diff --git a/contracts/EthStorageUpgradeableProxy.sol b/contracts/EthStorageUpgradeableProxy.sol index 65fd1d9..a21b61b 100644 --- a/contracts/EthStorageUpgradeableProxy.sol +++ b/contracts/EthStorageUpgradeableProxy.sol @@ -4,11 +4,10 @@ pragma solidity ^0.8.20; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; contract EthStorageUpgradeableProxy is TransparentUpgradeableProxy { - constructor( - address _logic, - address initialOwner, - bytes memory _data - ) payable TransparentUpgradeableProxy(_logic, initialOwner, _data) {} + constructor(address _logic, address initialOwner, bytes memory _data) + payable + TransparentUpgradeableProxy(_logic, initialOwner, _data) + {} function admin() public view virtual returns (address) { return ERC1967Utils.getAdmin(); diff --git a/contracts/Interfaces/IProxyAdmin.sol b/contracts/Interfaces/IProxyAdmin.sol index b332529..50164e3 100644 --- a/contracts/Interfaces/IProxyAdmin.sol +++ b/contracts/Interfaces/IProxyAdmin.sol @@ -4,9 +4,7 @@ pragma solidity ^0.8.20; import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; interface IProxyAdmin { - function upgradeAndCall( - ITransparentUpgradeableProxy proxy, - address implementation, - bytes memory data - ) external payable; + function upgradeAndCall(ITransparentUpgradeableProxy proxy, address implementation, bytes memory data) + external + payable; } diff --git a/contracts/StorageContract.sol b/contracts/StorageContract.sol index bee2a3b..6228135 100644 --- a/contracts/StorageContract.sol +++ b/contracts/StorageContract.sol @@ -84,7 +84,7 @@ abstract contract StorageContract is DecentralizedKV { /// @notice Fund tracker for prepaid uint256 public accPrepaidAmount; - /// @notice Reentrancy lock + /// @notice Reentrancy lock bool private transient locked; // TODO: Reserve extra slots (to a total of 50?) in the storage layout for future upgrades diff --git a/contracts/libraries/MerkleLib.sol b/contracts/libraries/MerkleLib.sol index e398244..7872332 100644 --- a/contracts/libraries/MerkleLib.sol +++ b/contracts/libraries/MerkleLib.sol @@ -74,12 +74,11 @@ library MerkleLib { } // Verify the if the hash of a chunk data is in the chunks - function verify( - bytes32 dataHash, - uint256 chunkIdx, - bytes32 root, - bytes32[] memory proofs - ) internal pure returns (bool) { + function verify(bytes32 dataHash, uint256 chunkIdx, bytes32 root, bytes32[] memory proofs) + internal + pure + returns (bool) + { bytes32 hash = dataHash; uint256 nChunkBits = proofs.length; require(chunkIdx < (1 << nChunkBits), "chunkId overflows"); @@ -95,11 +94,11 @@ library MerkleLib { return hash == root; } - function calculateRootWithProof( - bytes32 dataHash, - uint256 chunkIdx, - bytes32[] memory proofs - ) internal pure returns (bytes32) { + function calculateRootWithProof(bytes32 dataHash, uint256 chunkIdx, bytes32[] memory proofs) + internal + pure + returns (bytes32) + { bytes32 hash = dataHash; uint256 nChunkBits = proofs.length; require(chunkIdx < (1 << nChunkBits), "chunkId overflows"); @@ -115,12 +114,11 @@ library MerkleLib { return hash; } - function getProof( - bytes memory data, - uint256 chunkSize, - uint256 nChunkBits, - uint256 chunkIdx - ) internal pure returns (bytes32[] memory) { + function getProof(bytes memory data, uint256 chunkSize, uint256 nChunkBits, uint256 chunkIdx) + internal + pure + returns (bytes32[] memory) + { uint256 nChunks = 1 << nChunkBits; require(chunkIdx < nChunks, "index out of scope"); bytes32[] memory nodes = new bytes32[](nChunks); diff --git a/contracts/libraries/RLPReader.sol b/contracts/libraries/RLPReader.sol index 8dd4050..5b963a4 100644 --- a/contracts/libraries/RLPReader.sol +++ b/contracts/libraries/RLPReader.sol @@ -8,19 +8,19 @@ pragma solidity ^0.8.0; library RLPReader { uint8 constant STRING_SHORT_START = 0x80; - uint8 constant STRING_LONG_START = 0xb8; - uint8 constant LIST_SHORT_START = 0xc0; - uint8 constant LIST_LONG_START = 0xf8; + uint8 constant STRING_LONG_START = 0xb8; + uint8 constant LIST_SHORT_START = 0xc0; + uint8 constant LIST_LONG_START = 0xf8; uint8 constant WORD_SIZE = 32; struct RLPItem { - uint len; - uint memPtr; + uint256 len; + uint256 memPtr; } struct Iterator { - RLPItem item; // Item that's being iterated over. - uint nextPtr; // Position of the next item in the list. + RLPItem item; // Item that's being iterated over. + uint256 nextPtr; // Position of the next item in the list. } /* @@ -31,8 +31,8 @@ library RLPReader { function next(Iterator memory self) internal pure returns (RLPItem memory) { require(hasNext(self)); - uint ptr = self.nextPtr; - uint itemLength = _itemLength(ptr); + uint256 ptr = self.nextPtr; + uint256 itemLength = _itemLength(ptr); self.nextPtr = ptr + itemLength; return RLPItem(itemLength, ptr); @@ -52,7 +52,7 @@ library RLPReader { * @param item RLP encoded bytes */ function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) { - uint memPtr; + uint256 memPtr; assembly { memPtr := add(item, 0x20) } @@ -68,14 +68,14 @@ library RLPReader { function iterator(RLPItem memory self) internal pure returns (Iterator memory) { require(isList(self)); - uint ptr = self.memPtr + _payloadOffset(self.memPtr); + uint256 ptr = self.memPtr + _payloadOffset(self.memPtr); return Iterator(self, ptr); } /* * @param the RLP item. */ - function rlpLen(RLPItem memory item) internal pure returns (uint) { + function rlpLen(RLPItem memory item) internal pure returns (uint256) { return item.len; } @@ -83,18 +83,18 @@ library RLPReader { * @param the RLP item. * @return (memPtr, len) pair: location of the item's payload in memory. */ - function payloadLocation(RLPItem memory item) internal pure returns (uint, uint) { - uint offset = _payloadOffset(item.memPtr); - uint memPtr = item.memPtr + offset; - uint len = item.len - offset; // data length + function payloadLocation(RLPItem memory item) internal pure returns (uint256, uint256) { + uint256 offset = _payloadOffset(item.memPtr); + uint256 memPtr = item.memPtr + offset; + uint256 len = item.len - offset; // data length return (memPtr, len); } /* * @param the RLP item. */ - function payloadLen(RLPItem memory item) internal pure returns (uint) { - (, uint len) = payloadLocation(item); + function payloadLen(RLPItem memory item) internal pure returns (uint256) { + (, uint256 len) = payloadLocation(item); return len; } @@ -104,14 +104,14 @@ library RLPReader { function toList(RLPItem memory item) internal pure returns (RLPItem[] memory) { require(isList(item)); - uint items = numItems(item); + uint256 items = numItems(item); RLPItem[] memory result = new RLPItem[](items); - uint memPtr = item.memPtr + _payloadOffset(item.memPtr); - uint dataLen; - for (uint i = 0; i < items; i++) { + uint256 memPtr = item.memPtr + _payloadOffset(item.memPtr); + uint256 dataLen; + for (uint256 i = 0; i < items; i++) { dataLen = _itemLength(memPtr); - result[i] = RLPItem(dataLen, memPtr); + result[i] = RLPItem(dataLen, memPtr); memPtr = memPtr + dataLen; } @@ -123,13 +123,14 @@ library RLPReader { if (item.len == 0) return false; uint8 byte0; - uint memPtr = item.memPtr; + uint256 memPtr = item.memPtr; assembly { byte0 := byte(0, mload(memPtr)) } - if (byte0 < LIST_SHORT_START) + if (byte0 < LIST_SHORT_START) { return false; + } return true; } @@ -152,7 +153,7 @@ library RLPReader { * @return keccak256 hash of the item payload. */ function payloadKeccak256(RLPItem memory item) internal pure returns (bytes32) { - (uint memPtr, uint len) = payloadLocation(item); + (uint256 memPtr, uint256 len) = payloadLocation(item); bytes32 result; assembly { result := keccak256(memPtr, len) @@ -160,14 +161,16 @@ library RLPReader { return result; } - /** RLPItem conversions into data types **/ + /** + * RLPItem conversions into data types * + */ // @returns raw rlp encoding in bytes function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) { bytes memory result = new bytes(item.len); if (result.length == 0) return result; - - uint ptr; + + uint256 ptr; assembly { ptr := add(0x20, result) } @@ -179,8 +182,8 @@ library RLPReader { // any non-zero byte except "0x80" is considered true function toBoolean(RLPItem memory item) internal pure returns (bool) { require(item.len == 1); - uint result; - uint memPtr = item.memPtr; + uint256 result; + uint256 memPtr = item.memPtr; assembly { result := byte(0, mload(memPtr)) } @@ -203,31 +206,29 @@ library RLPReader { return address(uint160(toUint(item))); } - function toUint(RLPItem memory item) internal pure returns (uint) { + function toUint(RLPItem memory item) internal pure returns (uint256) { require(item.len > 0 && item.len <= 33); - (uint memPtr, uint len) = payloadLocation(item); + (uint256 memPtr, uint256 len) = payloadLocation(item); - uint result; + uint256 result; assembly { result := mload(memPtr) // shift to the correct location if necessary - if lt(len, 32) { - result := div(result, exp(256, sub(32, len))) - } + if lt(len, 32) { result := div(result, exp(256, sub(32, len))) } } return result; } // enforces 32 byte length - function toUintStrict(RLPItem memory item) internal pure returns (uint) { + function toUintStrict(RLPItem memory item) internal pure returns (uint256) { // one byte prefix require(item.len == 33); - uint result; - uint memPtr = item.memPtr + 1; + uint256 result; + uint256 memPtr = item.memPtr + 1; assembly { result := mload(memPtr) } @@ -238,10 +239,10 @@ library RLPReader { function toBytes(RLPItem memory item) internal pure returns (bytes memory) { require(item.len > 0); - (uint memPtr, uint len) = payloadLocation(item); + (uint256 memPtr, uint256 len) = payloadLocation(item); bytes memory result = new bytes(len); - uint destPtr; + uint256 destPtr; assembly { destPtr := add(0x20, result) } @@ -255,50 +256,44 @@ library RLPReader { */ // @return number of payload items inside an encoded list. - function numItems(RLPItem memory item) private pure returns (uint) { + function numItems(RLPItem memory item) private pure returns (uint256) { if (item.len == 0) return 0; - uint count = 0; - uint currPtr = item.memPtr + _payloadOffset(item.memPtr); - uint endPtr = item.memPtr + item.len; + uint256 count = 0; + uint256 currPtr = item.memPtr + _payloadOffset(item.memPtr); + uint256 endPtr = item.memPtr + item.len; while (currPtr < endPtr) { - currPtr = currPtr + _itemLength(currPtr); // skip over an item - count++; + currPtr = currPtr + _itemLength(currPtr); // skip over an item + count++; } return count; } // @return entire rlp item byte length - function _itemLength(uint memPtr) private pure returns (uint) { - uint itemLen; - uint byte0; + function _itemLength(uint256 memPtr) private pure returns (uint256) { + uint256 itemLen; + uint256 byte0; assembly { byte0 := byte(0, mload(memPtr)) } - if (byte0 < STRING_SHORT_START) + if (byte0 < STRING_SHORT_START) { itemLen = 1; - - else if (byte0 < STRING_LONG_START) + } else if (byte0 < STRING_LONG_START) { itemLen = byte0 - STRING_SHORT_START + 1; - - else if (byte0 < LIST_SHORT_START) { + } else if (byte0 < LIST_SHORT_START) { assembly { let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is memPtr := add(memPtr, 1) // skip over the first byte - + /* 32 byte word size */ let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len itemLen := add(dataLen, add(byteLen, 1)) } - } - - else if (byte0 < LIST_LONG_START) { + } else if (byte0 < LIST_LONG_START) { itemLen = byte0 - LIST_SHORT_START + 1; - } - - else { + } else { assembly { let byteLen := sub(byte0, 0xf7) memPtr := add(memPtr, 1) @@ -312,20 +307,23 @@ library RLPReader { } // @return number of bytes until the data - function _payloadOffset(uint memPtr) private pure returns (uint) { - uint byte0; + function _payloadOffset(uint256 memPtr) private pure returns (uint256) { + uint256 byte0; assembly { byte0 := byte(0, mload(memPtr)) } - if (byte0 < STRING_SHORT_START) + if (byte0 < STRING_SHORT_START) { return 0; - else if (byte0 < STRING_LONG_START || (byte0 >= LIST_SHORT_START && byte0 < LIST_LONG_START)) + } else if (byte0 < STRING_LONG_START || (byte0 >= LIST_SHORT_START && byte0 < LIST_LONG_START)) { return 1; - else if (byte0 < LIST_SHORT_START) // being explicit + } else if ( + byte0 < LIST_SHORT_START // being explicit + ) { return byte0 - (STRING_LONG_START - 1) + 1; - else + } else { return byte0 - (LIST_LONG_START - 1) + 1; + } } /* @@ -333,7 +331,7 @@ library RLPReader { * @param dest Pointer to destination * @param len Amount of memory to copy from the source */ - function copy(uint src, uint dest, uint len) private pure { + function copy(uint256 src, uint256 dest, uint256 len) private pure { if (len == 0) return; // copy as many word sizes as possible @@ -348,7 +346,7 @@ library RLPReader { if (len > 0) { // left over bytes. Mask is used to remove unwanted bytes from the word - uint mask = 256 ** (WORD_SIZE - len) - 1; + uint256 mask = 256 ** (WORD_SIZE - len) - 1; assembly { let srcpart := and(mload(src), not(mask)) // zero out src let destpart := and(mload(dest), mask) // retrieve the bytes diff --git a/contracts/libraries/RandaoLib.sol b/contracts/libraries/RandaoLib.sol index 3a0af58..cf48cde 100644 --- a/contracts/libraries/RandaoLib.sol +++ b/contracts/libraries/RandaoLib.sol @@ -27,10 +27,11 @@ library RandaoLib { /// @param _headerHash The hash of the header /// @param _headerRlpBytes The RLP data of the header /// @return The Randao mixDigest - function verifyHeaderAndGetRandao( - bytes32 _headerHash, - bytes memory _headerRlpBytes - ) internal pure returns (bytes32) { + function verifyHeaderAndGetRandao(bytes32 _headerHash, bytes memory _headerRlpBytes) + internal + pure + returns (bytes32) + { RLPReader.RLPItem memory item = _headerRlpBytes.toRlpItem(); require(_headerHash == item.rlpBytesKeccak256(), "RandaoLib: header hash mismatch"); return getRandaoFromHeader(item); diff --git a/contracts/zk-verify/Decoder.sol b/contracts/zk-verify/Decoder.sol index 1a3fb81..d54c241 100644 --- a/contracts/zk-verify/Decoder.sol +++ b/contracts/zk-verify/Decoder.sol @@ -15,13 +15,14 @@ pragma solidity ^0.8.0; library Pairing { struct G1Point { - uint X; - uint Y; + uint256 X; + uint256 Y; } // Encoding of field elements is: X[0] * z + X[1] + struct G2Point { - uint[2] X; - uint[2] Y; + uint256[2] X; + uint256[2] Y; } /// @return the generator of G1 @@ -32,17 +33,16 @@ library Pairing { /// @return the generator of G2 function P2() internal pure returns (G2Point memory) { // Original code point - return - G2Point( - [ - 11559732032986387107991004021392285783925812861821192530917403151452391805634, - 10857046999023057135944570762232829481370756359578518086990519993285655852781 - ], - [ - 4082367875863433681332203403145435568316851327593401208105741076214120093531, - 8495653923123431417604973247489272438418190587263600148770280649306958101930 - ] - ); + return G2Point( + [ + 11559732032986387107991004021392285783925812861821192530917403151452391805634, + 10857046999023057135944570762232829481370756359578518086990519993285655852781 + ], + [ + 4082367875863433681332203403145435568316851327593401208105741076214120093531, + 8495653923123431417604973247489272438418190587263600148770280649306958101930 + ] + ); /* // Changed by Jordi point @@ -52,20 +52,20 @@ library Pairing { [8495653923123431417604973247489272438418190587263600148770280649306958101930, 4082367875863433681332203403145435568316851327593401208105741076214120093531] ); -*/ + */ } /// @return r the negation of p, i.e. p.addition(p.negate()) should be zero. function negate(G1Point memory p) internal pure returns (G1Point memory r) { // The prime q in the base field F_q for G1 - uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; + uint256 q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; if (p.X == 0 && p.Y == 0) return G1Point(0, 0); return G1Point(p.X, q - (p.Y % q)); } /// @return r the sum of two points of G1 function addition(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) { - uint[4] memory input; + uint256[4] memory input; input[0] = p1.X; input[1] = p1.Y; input[2] = p2.X; @@ -76,17 +76,15 @@ library Pairing { success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60) // Use "invalid" to make gas estimation work switch success - case 0 { - invalid() - } + case 0 { invalid() } } require(success, "pairing-add-failed"); } /// @return r the product of a point on G1 and a scalar, i.e. /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p. - function scalar_mul(G1Point memory p, uint s) internal view returns (G1Point memory r) { - uint[3] memory input; + function scalar_mul(G1Point memory p, uint256 s) internal view returns (G1Point memory r) { + uint256[3] memory input; input[0] = p.X; input[1] = p.Y; input[2] = s; @@ -96,9 +94,7 @@ library Pairing { success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60) // Use "invalid" to make gas estimation work switch success - case 0 { - invalid() - } + case 0 { invalid() } } require(success, "pairing-mul-failed"); } @@ -109,10 +105,10 @@ library Pairing { /// return true. function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) { require(p1.length == p2.length, "pairing-lengths-failed"); - uint elements = p1.length; - uint inputSize = elements * 6; - uint[] memory input = new uint[](inputSize); - for (uint i = 0; i < elements; i++) { + uint256 elements = p1.length; + uint256 inputSize = elements * 6; + uint256[] memory input = new uint256[](inputSize); + for (uint256 i = 0; i < elements; i++) { input[i * 6 + 0] = p1[i].X; input[i * 6 + 1] = p1[i].Y; input[i * 6 + 2] = p2[i].X[0]; @@ -120,28 +116,25 @@ library Pairing { input[i * 6 + 4] = p2[i].Y[0]; input[i * 6 + 5] = p2[i].Y[1]; } - uint[1] memory out; + uint256[1] memory out; bool success; // solium-disable-next-line security/no-inline-assembly assembly { success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20) // Use "invalid" to make gas estimation work switch success - case 0 { - invalid() - } + case 0 { invalid() } } require(success, "pairing-opcode-failed"); return out[0] != 0; } /// Convenience method for a pairing check for two pairs. - function pairingProd2( - G1Point memory a1, - G2Point memory a2, - G1Point memory b1, - G2Point memory b2 - ) internal view returns (bool) { + function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2) + internal + view + returns (bool) + { G1Point[] memory p1 = new G1Point[](2); G2Point[] memory p2 = new G2Point[](2); p1[0] = a1; @@ -198,6 +191,7 @@ library Pairing { contract Decoder { using Pairing for *; + struct VerifyingKey { Pairing.G1Point alfa1; Pairing.G2Point beta2; @@ -205,6 +199,7 @@ contract Decoder { Pairing.G2Point delta2; Pairing.G1Point[] IC; } + struct Proof { Pairing.G1Point A; Pairing.G2Point B; @@ -270,27 +265,20 @@ contract Decoder { ); } - function verifyDecoding(uint[] memory input, Proof memory proof) internal view returns (uint) { + function verifyDecoding(uint256[] memory input, Proof memory proof) internal view returns (uint256) { uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617; VerifyingKey memory vk = verifyingKey(); require(input.length + 1 == vk.IC.length, "verifier-bad-input"); // Compute the linear combination vk_x Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0); - for (uint i = 0; i < input.length; i++) { + for (uint256 i = 0; i < input.length; i++) { require(input[i] < snark_scalar_field, "verifier-gte-snark-scalar-field"); vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[i + 1], input[i])); } vk_x = Pairing.addition(vk_x, vk.IC[0]); if ( !Pairing.pairingProd4( - Pairing.negate(proof.A), - proof.B, - vk.alfa1, - vk.beta2, - vk_x, - vk.gamma2, - proof.C, - vk.delta2 + Pairing.negate(proof.A), proof.B, vk.alfa1, vk.beta2, vk_x, vk.gamma2, proof.C, vk.delta2 ) ) return 1; return 0; diff --git a/contracts/zk-verify/Decoder2.sol b/contracts/zk-verify/Decoder2.sol index 8c30c7b..ce7a42b 100644 --- a/contracts/zk-verify/Decoder2.sol +++ b/contracts/zk-verify/Decoder2.sol @@ -22,17 +22,17 @@ pragma solidity >=0.7.0 <0.9.0; contract Decoder2 { // Scalar field size - uint256 constant r = 21888242871839275222246405745257275088548364400416034343698204186575808495617; + uint256 constant r = 21888242871839275222246405745257275088548364400416034343698204186575808495617; // Base field size - uint256 constant q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; + uint256 constant q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; // Verification Key data - uint256 constant alphax = 7506542393861712633345351046961518695186434969159573929710445813801252250723; - uint256 constant alphay = 16226065335411284296170178517395602646321797300570911178122732619405801531786; - uint256 constant betax1 = 18085759018360810108311053436144684567975240874798592024271494525670832624248; - uint256 constant betax2 = 14634453066859375398229234242235662432488733031061395747558146261931733463655; - uint256 constant betay1 = 5381338245488965956306749233704530527583477992038243832593582681279872987470; - uint256 constant betay2 = 15883666510464263642223723115318135885418478949233288914773546058946554436604; + uint256 constant alphax = 7506542393861712633345351046961518695186434969159573929710445813801252250723; + uint256 constant alphay = 16226065335411284296170178517395602646321797300570911178122732619405801531786; + uint256 constant betax1 = 18085759018360810108311053436144684567975240874798592024271494525670832624248; + uint256 constant betax2 = 14634453066859375398229234242235662432488733031061395747558146261931733463655; + uint256 constant betay1 = 5381338245488965956306749233704530527583477992038243832593582681279872987470; + uint256 constant betay2 = 15883666510464263642223723115318135885418478949233288914773546058946554436604; uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634; uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781; uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531; @@ -42,36 +42,39 @@ contract Decoder2 { uint256 constant deltay1 = 15074546931839152480666864429137492139314964383368818566007550713846561229462; uint256 constant deltay2 = 809101966924870641968799904345624923651810413083961659152470001551823113334; - uint256 constant IC0x = 21859776616790133348839467181671732914251000215306575824317360595804907051375; uint256 constant IC0y = 5948124107564618515449715251945373028277412284372620284583980914047280102876; - + uint256 constant IC1x = 7520522526360393336256191862722677948012949593965997902878602990224219591269; uint256 constant IC1y = 18122129100184838347758272212675964028707019394412040910218297874776889131339; - + uint256 constant IC2x = 9999628984230624978359278370848255996127491687253422284834743304166137276639; uint256 constant IC2y = 1555065374953614187921236262540138367937263242920725070578958971136763113533; - + uint256 constant IC3x = 10835355946958950355842429995606773830353386704839836610977135010867467767886; uint256 constant IC3y = 347681805283999531579989309847502060079457705975188603961036829994986965556; - + uint256 constant IC4x = 18753041537644146645964636680858664682282695577221297145676895383600075612749; uint256 constant IC4y = 4206563387370580535351146610430324298862523672147419676700216935123282436586; - + uint256 constant IC5x = 4442990650008179863485607955771945665024984641422192665573627724614025985085; uint256 constant IC5y = 12258170331083523204110753037449846946259145197015177866805657404915928554507; - + uint256 constant IC6x = 9756223775418760164233100362456726133526680277789326181795061439535609246955; uint256 constant IC6y = 14662783377248180262259778967741304849392652193971992154747894564718718444840; - - + // Memory data uint16 constant pVk = 0; uint16 constant pPairing = 128; uint16 constant pLastMem = 896; - function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[6] calldata _pubSignals) public view returns (bool) { + function verifyProof( + uint256[2] calldata _pA, + uint256[2][2] calldata _pB, + uint256[2] calldata _pC, + uint256[6] calldata _pubSignals + ) public view returns (bool) { assembly { function checkField(v) { if iszero(lt(v, q)) { @@ -79,7 +82,7 @@ contract Decoder2 { return(0, 0x20) } } - + // G1 function to multiply a G1 value(x,y) to value in an address function g1_mulAccC(pR, x, y, s) { let success @@ -114,19 +117,18 @@ contract Decoder2 { mstore(add(_pVk, 32), IC0y) // Compute the linear combination vk_x - + g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0))) - + g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32))) - + g1_mulAccC(_pVk, IC3x, IC3y, calldataload(add(pubSignals, 64))) - + g1_mulAccC(_pVk, IC4x, IC4y, calldataload(add(pubSignals, 96))) - + g1_mulAccC(_pVk, IC5x, IC5y, calldataload(add(pubSignals, 128))) - + g1_mulAccC(_pVk, IC6x, IC6y, calldataload(add(pubSignals, 160))) - // -A mstore(_pPairing, calldataload(pA)) @@ -152,7 +154,6 @@ contract Decoder2 { mstore(add(_pPairing, 384), mload(add(pMem, pVk))) mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32)))) - // gamma2 mstore(add(_pPairing, 448), gammax1) mstore(add(_pPairing, 480), gammax2) @@ -169,7 +170,6 @@ contract Decoder2 { mstore(add(_pPairing, 704), deltay1) mstore(add(_pPairing, 736), deltay2) - let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20) isOk := and(success, mload(_pPairing)) @@ -179,27 +179,26 @@ contract Decoder2 { mstore(0x40, add(pMem, pLastMem)) // Validate that all evaluations ∈ F - + checkField(calldataload(add(_pubSignals, 0))) - + checkField(calldataload(add(_pubSignals, 32))) - + checkField(calldataload(add(_pubSignals, 64))) - + checkField(calldataload(add(_pubSignals, 96))) - + checkField(calldataload(add(_pubSignals, 128))) - + checkField(calldataload(add(_pubSignals, 160))) - + checkField(calldataload(add(_pubSignals, 192))) - // Validate all evaluations let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem) mstore(0, isValid) - return(0, 0x20) - } - } - } + return(0, 0x20) + } + } +} diff --git a/package-lock.json b/package-lock.json index 323fcd1..c96e774 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,15 +16,23 @@ "@nomiclabs/hardhat-web3": "^2.0.0", "@openzeppelin/contracts": "^5.0.1", "@openzeppelin/contracts-upgradeable": "^5.0.1", + "arb-ts": "^1.0.2", "chai": "^4.3.4", "dotenv": "^10.0.0", + "eslint-config-prettier": "^8.3.0", "ethereum-waffle": "^4.0.10", + "ethereumjs-util": "^7.1.3", "ethers": "^5.7.0", "hardhat": "^2.19.4", "hardhat-gas-reporter": "^1.0.4", + "prettier": "^2.4.1", + "prettier-check": "^2.0.0", + "prettier-plugin-solidity": "^1.0.0-beta.18", "rlp": "^3.0.0", "snarkjs": "^0.6.11", - "solidity-coverage": "^0.8.2" + "solhint-plugin-prettier": "^0.0.5", + "solidity-coverage": "^0.8.2", + "solidity-rlp": "^2.0.5" }, "workspaces": { "packages": [ @@ -261,6 +269,188 @@ "dev": true, "peer": true }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, + "node_modules/@eslint/js": { + "version": "9.12.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/js/-/js-9.12.0.tgz", + "integrity": "sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==", + "dev": true, + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", + "dev": true, + "peer": true, + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/@ethereum-waffle/chai": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-4.0.10.tgz", @@ -1388,6 +1578,58 @@ "@trufflesuite/bigint-buffer": "1.1.9" } }, + "node_modules/@humanfs/core": { + "version": "0.19.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanfs/core/-/core-0.19.0.tgz", + "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanfs/node/-/node-0.16.5.tgz", + "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==", + "dev": true, + "peer": true, + "dependencies": { + "@humanfs/core": "^0.19.0", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@iden3/bigarray": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/@iden3/bigarray/-/bigarray-0.0.2.tgz", @@ -2313,6 +2555,13 @@ "@types/node": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "peer": true + }, "node_modules/@types/form-data": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", @@ -2339,6 +2588,13 @@ "dev": true, "peer": true }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "peer": true + }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://mirrors.cloud.tencent.com/npm/@types/keyv/-/keyv-3.1.4.tgz", @@ -2435,6 +2691,16 @@ "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true }, + "node_modules/@types/prompts": { + "version": "2.4.9", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/prompts/-/prompts-2.4.9.tgz", + "integrity": "sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "kleur": "^3.0.3" + } + }, "node_modules/@types/qs": { "version": "6.9.15", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", @@ -2531,6 +2797,29 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -2670,6 +2959,23 @@ "node": ">= 8" } }, + "node_modules/arb-ts": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/arb-ts/-/arb-ts-1.0.2.tgz", + "integrity": "sha512-FHdoIPDQ5a9kM6vodRvrBTXM+j8CE1lb6uDI2mLk8j/xu6vSSJ0mOUxICSc6V1HWORV5PaGJLaE/9VsfOJuLSg==", + "deprecated": "This package is no longer maintained, instead look into @arbitrum/sdk", + "dev": true, + "dependencies": { + "@ethersproject/address": "^5.0.8", + "@ethersproject/bignumber": "^5.1.1", + "@ethersproject/bytes": "^5.0.8", + "@nomiclabs/hardhat-ethers": "^2.0.2", + "@types/prompts": "^2.0.14", + "dotenv": "^10.0.0", + "ethers": "^5.1.0", + "prompts": "^2.4.2" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -3293,6 +3599,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -3884,6 +4200,37 @@ "node-fetch": "^2.6.12" } }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/crypt": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", @@ -4435,6 +4782,375 @@ "node": ">=4" } }, + "node_modules/eslint": { + "version": "9.12.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint/-/eslint-9.12.0.tgz", + "integrity": "sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.6.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.12.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.5", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.1.0", + "eslint-visitor-keys": "^4.1.0", + "espree": "^10.2.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "8.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-scope/-/eslint-scope-8.1.0.tgz", + "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "peer": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "peer": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/esniff": { "version": "2.0.1", "resolved": "https://mirrors.cloud.tencent.com/npm/esniff/-/esniff-2.0.1.tgz", @@ -4451,17 +5167,81 @@ "node": ">=0.10" } }, + "node_modules/espree": { + "version": "10.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", + "dev": true, + "peer": true, + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/esprima": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "peer": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true, "engines": { - "node": ">=0.4.0" + "node": ">=4.0" } }, "node_modules/estraverse": { @@ -4855,6 +5635,72 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/execa": { + "version": "0.6.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/execa/-/execa-0.6.3.tgz", + "integrity": "sha512-/teX3MDLFBdYUhRk8WCBYboIMUmqeizu0m9Z3YF3JWrbEh/SlZg00vLJSaAGWw3wrZ9tE0buNw79eaAPYhUuvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/execa/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, "node_modules/express": { "version": "4.21.1", "resolved": "https://mirrors.cloud.tencent.com/npm/express/-/express-4.21.1.tgz", @@ -4972,6 +5818,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -5026,6 +5878,19 @@ "web-worker": "^1.2.0" } }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "peer": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -5137,6 +6002,27 @@ "flat": "cli.js" } }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "peer": true + }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -5863,6 +6749,15 @@ "node": ">=4" } }, + "node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -5955,6 +6850,19 @@ "node": ">=6" } }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globby": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", @@ -6571,6 +7479,43 @@ "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", "dev": true }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "peer": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -6771,6 +7716,15 @@ "node": ">=8" } }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-typed-array": { "version": "1.1.13", "resolved": "https://mirrors.cloud.tencent.com/npm/is-typed-array/-/is-typed-array-1.1.13.tgz", @@ -6982,6 +7936,13 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "peer": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -7074,6 +8035,15 @@ "graceful-fs": "^4.1.9" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/lcid": { "version": "1.0.0", "resolved": "https://mirrors.cloud.tencent.com/npm/lcid/-/lcid-1.0.0.tgz", @@ -7287,6 +8257,13 @@ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "peer": true + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -8023,6 +9000,13 @@ "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==", "dev": true }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "peer": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://mirrors.cloud.tencent.com/npm/negotiator/-/negotiator-0.6.3.tgz", @@ -8145,6 +9129,27 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://mirrors.cloud.tencent.com/npm/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -8289,6 +9294,15 @@ "node": ">=12.20" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -8337,6 +9351,19 @@ "node": ">=4" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "peer": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-cache-control": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", @@ -8384,6 +9411,16 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -8515,6 +9552,70 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-check": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/prettier-check/-/prettier-check-2.0.0.tgz", + "integrity": "sha512-HZG53XQTJ9Cyi5hi1VFVVFxdlhITJybpZAch3ib9KqI05VUxV+F5Hip0GhSWRItrlDzVyqjSoDQ9KqIn7AHYyw==", + "dev": true, + "dependencies": { + "execa": "^0.6.0" + }, + "bin": { + "prettier-check": "cli.js" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "prettier": "x.x.x" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prettier-plugin-solidity": { + "version": "1.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.1.tgz", + "integrity": "sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg==", + "dev": true, + "dependencies": { + "@solidity-parser/parser": "^0.18.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "prettier": ">=2.3.0" + } + }, + "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@solidity-parser/parser/-/parser-0.18.0.tgz", + "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", + "dev": true + }, + "node_modules/prettier-plugin-solidity/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://mirrors.cloud.tencent.com/npm/process/-/process-0.11.10.tgz", @@ -8540,6 +9641,19 @@ "asap": "~2.0.6" } }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://mirrors.cloud.tencent.com/npm/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -8566,6 +9680,12 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -9416,6 +10536,29 @@ "node": "*" } }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "peer": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", @@ -9451,6 +10594,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://mirrors.cloud.tencent.com/npm/simple-concat/-/simple-concat-1.0.1.tgz", @@ -9507,6 +10656,12 @@ "node": ">=4" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -9617,6 +10772,19 @@ "semver": "bin/semver" } }, + "node_modules/solhint-plugin-prettier": { + "version": "0.0.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/solhint-plugin-prettier/-/solhint-plugin-prettier-0.0.5.tgz", + "integrity": "sha512-7jmWcnVshIrO2FFinIvDQmhQpfpS2rRRn3RejiYgnjIE68xO2bvrYvjqVNfrio4xH9ghOqn83tKuTzLjEbmGIA==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "peerDependencies": { + "prettier": "^1.15.0 || ^2.0.0", + "prettier-plugin-solidity": "^1.0.0-alpha.14" + } + }, "node_modules/solidity-coverage": { "version": "0.8.12", "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.12.tgz", @@ -9682,6 +10850,12 @@ "node": ">=10" } }, + "node_modules/solidity-rlp": { + "version": "2.0.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/solidity-rlp/-/solidity-rlp-2.0.8.tgz", + "integrity": "sha512-gzYzHoFKRH1ydJeCfzm3z/BvKrZGK/V9+qbOlNbBcRAYeizjCdDNhLTTE8iIJrHqsRrZRSOo+7mhbnxoBoZvJQ==", + "dev": true + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9871,6 +11045,15 @@ "node": ">=0.10.0" } }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-hex-prefix": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", @@ -10196,6 +11379,13 @@ "dev": true, "peer": true }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "peer": true + }, "node_modules/then-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", diff --git a/package.json b/package.json index 9d62e62..7734e03 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,9 @@ "install:all": "npm install && forge install", "compile": "hardhat compile", "test": "hardhat test && forge test", - "prettier:check": "prettier-check contracts/**/*.sol", - "prettier:fix": "prettier --write contracts/**/*.sol test/**/*.js scripts/**/*.js", + "format:check": "forge fmt --check", + "format:fix": "forge fmt", + "formatjs": "prettier --write test/**/*.js scripts/**/*.js", "deploy": "npx hardhat run scripts/deploy.js --network sepolia", "deployL2Dev": "npx hardhat run scripts/deployL2.js --network qkc_devnet", "deployL2Test": "npx hardhat run scripts/deployL2.js --network qkc_testnet", diff --git a/scripts/deploy.js b/scripts/deploy.js index 4b6c6a6..cc5990a 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -1,7 +1,6 @@ const hre = require("hardhat"); -const dotenv = require("dotenv") -dotenv.config() - +const dotenv = require("dotenv"); +dotenv.config(); let ownerAddress = null; let treasuryAddress = null; @@ -40,11 +39,11 @@ async function deployContract() { const StorageContract = await hre.ethers.getContractFactory("TestEthStorageContractKZG"); // refer to https://docs.google.com/spreadsheets/d/11DHhSang1UZxIFAKYw6_Qxxb-V40Wh1lsYjY2dbIP5k/edit#gid=0 const implContract = await StorageContract.deploy( - config, - startTime, // startTime - storageCost, - dcfFactor, - { gasPrice: gasPrice } + config, + startTime, // startTime + storageCost, + dcfFactor, + { gasPrice: gasPrice } ); await implContract.deployed(); const impl = implContract.address; @@ -93,11 +92,11 @@ async function updateContract() { // deploy const implContract = await StorageContract.deploy( - config, - startTime, // startTime - storageCost, - dcfFactor, - { gasPrice: gasPrice } + config, + startTime, // startTime + storageCost, + dcfFactor, + { gasPrice: gasPrice } ); await implContract.deployed(); const impl = implContract.address; diff --git a/scripts/deployL2-it.js b/scripts/deployL2-it.js index 9c321fb..8c8cba3 100644 --- a/scripts/deployL2-it.js +++ b/scripts/deployL2-it.js @@ -1,8 +1,7 @@ -const fs = require('fs'); +const fs = require("fs"); const hre = require("hardhat"); -const dotenv = require("dotenv") -dotenv.config() - +const dotenv = require("dotenv"); +dotenv.config(); let ownerAddress = null; let treasuryAddress = null; diff --git a/scripts/deployL2.js b/scripts/deployL2.js index 50fa5c3..2fc4717 100644 --- a/scripts/deployL2.js +++ b/scripts/deployL2.js @@ -1,7 +1,6 @@ const hre = require("hardhat"); -const dotenv = require("dotenv") -dotenv.config() - +const dotenv = require("dotenv"); +dotenv.config(); let ownerAddress = null; let treasuryAddress = null; diff --git a/test/lib/prover.js b/test/lib/prover.js index 1a8ba56..5a37a9d 100644 --- a/test/lib/prover.js +++ b/test/lib/prover.js @@ -1,5 +1,5 @@ const snarkjs = require("snarkjs"); -const RLP = require('rlp'); +const RLP = require("rlp"); require("dotenv").config(); @@ -43,7 +43,7 @@ async function generateRandaoProof(block) { BigInt(block.timestamp), block.extraData, block.mixHash, - '0x0000000000000000', + "0x0000000000000000", BigInt(block.baseFeePerGas), block.withdrawalsRoot, BigInt(block.blobGasUsed), diff --git a/test/lib/test-helper.js b/test/lib/test-helper.js index 6f8391d..408c8b7 100644 --- a/test/lib/test-helper.js +++ b/test/lib/test-helper.js @@ -166,16 +166,16 @@ class TestState { const abiCoder = new ethers.utils.AbiCoder(); const decodeProofData = abiCoder.encode( - ["tuple(tuple(uint256, uint256), tuple(uint256[2], uint256[2]), tuple(uint256, uint256))"], - [decodeProof] + ["tuple(tuple(uint256, uint256), tuple(uint256[2], uint256[2]), tuple(uint256, uint256))"], + [decodeProof] ); const inclusiveProofData = abiCoder.encode( - ["tuple(bytes32, bytes32, bytes32[])"], - [[decodedSampleData, root, merkleProof]] + ["tuple(bytes32, bytes32, bytes32[])"], + [[decodedSampleData, root, merkleProof]] ); return { decodeProof: decodeProofData, - inclusiveProof: inclusiveProofData + inclusiveProof: inclusiveProofData, }; }