Skip to content

Commit

Permalink
format
Browse files Browse the repository at this point in the history
  • Loading branch information
ZumZoom committed Sep 29, 2022
1 parent ed0bb7c commit e0551e3
Show file tree
Hide file tree
Showing 20 changed files with 1,183 additions and 456 deletions.
9 changes: 3 additions & 6 deletions .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -35,24 +35,21 @@
],
"quotes": [
2,
"single"
"single",
{"avoidEscape": true}
],
"semi": [
"error",
"always"
],
"space-before-function-paren": [
"error",
"always"
{"anonymous": "always", "named": "never", "asyncArrow": "always"}
],
"one-var-declaration-per-line": [
"error",
"always"
],
"function-paren-newline": [
"error",
"multiline"
],
"object-property-newline": [
"error",
{ "allowAllPropertiesOnSameLine": true }
Expand Down
2 changes: 1 addition & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
}
},
{
"files": "*.js",
"files": "*.ts",
"options": {
"printWidth": 120,
"singleQuote": true,
Expand Down
49 changes: 7 additions & 42 deletions hardhat.networks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,7 @@ dotenv.config();

const networks: NetworksUserConfig = {};

function register (
name: string,
chainId: number,
url?: string,
privateKey?: string
) {
function register(name: string, chainId: number, url?: string, privateKey?: string) {
if (url && privateKey) {
networks[name] = {
url,
Expand All @@ -23,44 +18,14 @@ function register (
}
}

register(
'mainnet',
1,
process.env.MAINNET_RPC_URL,
process.env.MAINNET_PRIVATE_KEY
);
register('mainnet', 1, process.env.MAINNET_RPC_URL, process.env.MAINNET_PRIVATE_KEY);
register('bsc', 56, process.env.BSC_RPC_URL, process.env.BSC_PRIVATE_KEY);
register('kovan', 42, process.env.KOVAN_RPC_URL, process.env.KOVAN_PRIVATE_KEY);
register(
'optimistic',
10,
process.env.OPTIMISTIC_RPC_URL,
process.env.OPTIMISTIC_PRIVATE_KEY
);
register(
'kovan-optimistic',
69,
process.env.KOVAN_OPTIMISTIC_RPC_URL,
process.env.KOVAN_OPTIMISTIC_PRIVATE_KEY
);
register(
'matic',
137,
process.env.MATIC_RPC_URL,
process.env.MATIC_PRIVATE_KEY
);
register(
'arbitrum',
42161,
process.env.ARBITRUM_RPC_URL,
process.env.ARBITRUM_PRIVATE_KEY
);
register(
'ropsten',
3,
process.env.ROPSTEN_RPC_URL,
process.env.ROPSTEN_PRIVATE_KEY
);
register('optimistic', 10, process.env.OPTIMISTIC_RPC_URL, process.env.OPTIMISTIC_PRIVATE_KEY);
register('kovan-optimistic', 69, process.env.KOVAN_OPTIMISTIC_RPC_URL, process.env.KOVAN_OPTIMISTIC_PRIVATE_KEY);
register('matic', 137, process.env.MATIC_RPC_URL, process.env.MATIC_PRIVATE_KEY);
register('arbitrum', 42161, process.env.ARBITRUM_RPC_URL, process.env.ARBITRUM_PRIVATE_KEY);
register('ropsten', 3, process.env.ROPSTEN_RPC_URL, process.env.ROPSTEN_PRIVATE_KEY);
register('xdai', 100, process.env.XDAI_RPC_URL, process.env.XDAI_PRIVATE_KEY);
register('avax', 43114, process.env.AVAX_RPC_URL, process.env.AVAX_PRIVATE_KEY);

Expand Down
8 changes: 6 additions & 2 deletions src/asserts.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { expect } from './prelude';

export function assertRoughlyEqualValues (expected: string | number | bigint, actual: string | number | bigint, relativeDiff: number) {
export function assertRoughlyEqualValues(
expected: string | number | bigint,
actual: string | number | bigint,
relativeDiff: number,
) {
let expectedBN = BigInt(expected);
let actualBN = BigInt(actual);
expect(expectedBN * actualBN).to.be.gte(0, 'Values are of different sign');
Expand All @@ -15,7 +19,7 @@ export function assertRoughlyEqualValues (expected: string | number | bigint, ac
multiplerNumerator *= 10;
}
const diff = expectedBN > actualBN ? expectedBN - actualBN : actualBN - expectedBN;
const treshold = expectedBN * BigInt(multiplerNumerator) / multiplerDenominator;
const treshold = (expectedBN * BigInt(multiplerNumerator)) / multiplerDenominator;
if (diff > treshold) {
expect(actualBN).to.be.equal(expectedBN, `${actual} != ${expected} with ${relativeDiff} precision`);
}
Expand Down
78 changes: 56 additions & 22 deletions src/permit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,29 +31,32 @@ export const DaiLikePermit = [
{ name: 'allowed', type: 'bool' },
];

export function trim0x (bigNumber: bigint | string) {
export function trim0x(bigNumber: bigint | string) {
const s = bigNumber.toString();
if (s.startsWith('0x')) {
return s.substring(2);
}
return s;
}

export function cutSelector (data: string) {
export function cutSelector(data: string) {
const hexPrefix = '0x';
return hexPrefix + data.substr(hexPrefix.length + 8);
}

export function domainSeparator (name: string, version: string, chainId: string, verifyingContract: string) {
return '0x' + TypedDataUtils.hashStruct(
'EIP712Domain',
{ name, version, chainId, verifyingContract },
{ EIP712Domain },
TypedDataVersion
).toString('hex');
export function domainSeparator(name: string, version: string, chainId: string, verifyingContract: string) {
return (
'0x' +
TypedDataUtils.hashStruct(
'EIP712Domain',
{ name, version, chainId, verifyingContract },
{ EIP712Domain },
TypedDataVersion,
).toString('hex')
);
}

export function buildData (
export function buildData(
name: string,
version: string,
chainId: number,
Expand All @@ -62,7 +65,7 @@ export function buildData (
spender: string,
value: string,
nonce: string,
deadline: string = defaultDeadline.toString()
deadline: string = defaultDeadline.toString(),
) {
return {
types: { Permit },
Expand All @@ -71,7 +74,7 @@ export function buildData (
} as const;
}

export function buildDataLikeDai (
export function buildDataLikeDai(
name: string,
version: string,
chainId: number,
Expand All @@ -80,7 +83,7 @@ export function buildDataLikeDai (
spender: string,
nonce: string,
allowed: boolean,
expiry: string = defaultDeadline.toString()
expiry: string = defaultDeadline.toString(),
) {
return {
types: { Permit: DaiLikePermit },
Expand All @@ -97,45 +100,76 @@ export interface PermittableToken extends Token {
/*
* @param permitContract The contract object with ERC20Permit type and token address for which the permit creating.
*/
export async function getPermit (
export async function getPermit(
owner: SignerWithAddress,
permitContract: PermittableToken,
tokenVersion: string,
chainId: number,
spender: string,
value: string,
deadline = defaultDeadline.toString()
deadline = defaultDeadline.toString(),
) {
const nonce = await permitContract.nonces(owner.address);
const name = await permitContract.name();
const data = buildData(name, tokenVersion, chainId, permitContract.address, owner.address, spender, value, nonce.toString(), deadline);
const data = buildData(
name,
tokenVersion,
chainId,
permitContract.address,
owner.address,
spender,
value,
nonce.toString(),
deadline,
);
const signature = await owner._signTypedData(data.domain, data.types, data.message);
const { v, r, s } = fromRpcSig(signature);
const permitCall = permitContract.interface.encodeFunctionData('permit', [owner.address, spender, value, deadline, v, r, s]);
const permitCall = permitContract.interface.encodeFunctionData('permit', [
owner.address,
spender,
value,
deadline,
v,
r,
s,
]);
return cutSelector(permitCall);
}

/*
* @param permitContract The contract object with ERC20PermitLikeDai type and token address for which the permit creating.
*/
export async function getPermitLikeDai (
export async function getPermitLikeDai(
holder: SignerWithAddress,
permitContract: PermittableToken,
tokenVersion: string,
chainId: number,
spender: string,
allowed: boolean,
expiry = defaultDeadline.toString()
expiry = defaultDeadline.toString(),
) {
const nonce = await permitContract.nonces(holder.address);
const name = await permitContract.name();
const data = buildDataLikeDai(name, tokenVersion, chainId, permitContract.address, holder.address, spender, nonce.toString(), allowed, expiry);
const data = buildDataLikeDai(
name,
tokenVersion,
chainId,
permitContract.address,
holder.address,
spender,
nonce.toString(),
allowed,
expiry,
);
const signature = await holder._signTypedData(data.domain, data.types, data.message);
const { v, r, s } = fromRpcSig(signature);
const permitCall = permitContract.interface.encodeFunctionData('permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32)', [holder.address, spender, nonce, expiry, allowed, v, r, s]);
const permitCall = permitContract.interface.encodeFunctionData(
'permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32)',
[holder.address, spender, nonce, expiry, allowed, v, r, s],
);
return cutSelector(permitCall);
}

export function withTarget (target: bigint | string, data: bigint | string) {
export function withTarget(target: bigint | string, data: bigint | string) {
return target.toString() + trim0x(data);
}
21 changes: 6 additions & 15 deletions src/prelude.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,18 @@ export const constants = {
ZERO_ADDRESS: '0x0000000000000000000000000000000000000000',
EEE_ADDRESS: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
ZERO_BYTES32: '0x0000000000000000000000000000000000000000000000000000000000000000',
MAX_UINT256: (2n ** 256n) - 1n,
MAX_INT256: (2n ** 255n) - 1n,
MAX_UINT256: 2n ** 256n - 1n,
MAX_INT256: 2n ** 255n - 1n,
MIN_INT256: -(2n ** 255n),
MAX_UINT128: (2n ** 128n) - 1n,
MAX_UINT128: 2n ** 128n - 1n,
} as const;

// utils
export {
time,
};
export { time };

export function ether (n: string): bigint {
export function ether(n: string): bigint {
return BigInt(toWei(n, 'ether'));
}

// chai
export {
Assertion,
AssertionError,
assert,
expect,
config,
should,
};
export { Assertion, AssertionError, assert, expect, config, should };
Loading

0 comments on commit e0551e3

Please sign in to comment.