From 54af3bbe74f170bf03d09a7e7b6d11d3ea4827b8 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Wed, 10 Dec 2025 15:15:48 +0000 Subject: [PATCH 01/57] Initialize npm dependencies, hardhat js project --- .gitignore | 18 + .gitmodules | 5 + chainlink-ace | 1 + hardhat.config.js | 6 + package-lock.json | 6172 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 20 + 6 files changed, 6222 insertions(+) create mode 160000 chainlink-ace create mode 100644 hardhat.config.js create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore index 9a5aced..3db350f 100644 --- a/.gitignore +++ b/.gitignore @@ -137,3 +137,21 @@ dist # Vite logs files vite.config.js.timestamp-* vite.config.ts.timestamp-* + +node_modules +.env + +# Hardhat files +/cache +/artifacts + +# TypeChain files +/typechain +/typechain-types + +# solidity-coverage files +/coverage +/coverage.json + +# Hardhat Ignition default folder for deployments against a local node +ignition/deployments/chain-31337 diff --git a/.gitmodules b/.gitmodules index 95947c6..ceda78b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,8 @@ [submodule "CMTAT"] path = CMTAT url = https://github.com/CMTA/CMTAT + branch = dev +[submodule "chainlink-ace"] + path = chainlink-ace + url = https://github.com/smartcontractkit/chainlink-ace + branch = main diff --git a/chainlink-ace b/chainlink-ace new file mode 160000 index 0000000..e0babf8 --- /dev/null +++ b/chainlink-ace @@ -0,0 +1 @@ +Subproject commit e0babf820a1fcac13e446c99d650f3e3400c2df8 diff --git a/hardhat.config.js b/hardhat.config.js new file mode 100644 index 0000000..b63f0c2 --- /dev/null +++ b/hardhat.config.js @@ -0,0 +1,6 @@ +require("@nomicfoundation/hardhat-toolbox"); + +/** @type import('hardhat/config').HardhatUserConfig */ +module.exports = { + solidity: "0.8.28", +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..85e6b22 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6172 @@ +{ + "name": "cmtat-ace", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "cmtat-ace", + "version": "1.0.0", + "devDependencies": { + "@chainlink/contracts": "1.3.0", + "@openzeppelin/contracts": "5.5.0", + "@openzeppelin/contracts-upgradeable": "5.5.0", + "hardhat": "^2.27.1" + } + }, + "node_modules/@arbitrum/nitro-contracts": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-1.1.1.tgz", + "integrity": "sha512-4Tyk3XVHz+bm8UujUC78LYSw3xAxyYvBCxfEX4z3qE4/ww7Qck/rmce5gbHMzQjArEAzAP2YSfYIFuIFuRXtfg==", + "dev": true, + "hasInstallScript": true, + "license": "BUSL-1.1", + "dependencies": { + "@offchainlabs/upgrade-executor": "1.1.0-beta.0", + "@openzeppelin/contracts": "4.5.0", + "@openzeppelin/contracts-upgradeable": "4.5.2", + "patch-package": "^6.4.7" + } + }, + "node_modules/@arbitrum/nitro-contracts/node_modules/@openzeppelin/contracts": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz", + "integrity": "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@arbitrum/nitro-contracts/node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", + "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@arbitrum/token-bridge-contracts": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@arbitrum/token-bridge-contracts/-/token-bridge-contracts-1.1.2.tgz", + "integrity": "sha512-k7AZXiB2HFecJ1KfaDBqgOKe3Loo1ttGLC7hUOVB+0YrihIR6cYpJRuqKSKK4YCy+FF21AUDtaG3x57OFM667Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@arbitrum/nitro-contracts": "^1.0.0-beta.8", + "@offchainlabs/upgrade-executor": "1.1.0-beta.0", + "@openzeppelin/contracts": "4.8.3", + "@openzeppelin/contracts-upgradeable": "4.8.3" + }, + "optionalDependencies": { + "@openzeppelin/upgrades-core": "^1.24.1" + } + }, + "node_modules/@arbitrum/token-bridge-contracts/node_modules/@openzeppelin/contracts": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@arbitrum/token-bridge-contracts/node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz", + "integrity": "sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bytecodealliance/preview2-shim": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz", + "integrity": "sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==", + "dev": true, + "license": "(Apache-2.0 WITH LLVM-exception)", + "optional": true + }, + "node_modules/@chainlink/contracts": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.3.0.tgz", + "integrity": "sha512-Vk93nijTC5iRFW/L6FKUzeMuJy7k5dNzAtqlHpdreqtzL7efO/qXbYCkqjJFNXGurfOXVehHlehFoH4tWvSbfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@arbitrum/nitro-contracts": "1.1.1", + "@arbitrum/token-bridge-contracts": "1.1.2", + "@changesets/changelog-github": "^0.5.0", + "@changesets/cli": "~2.27.8", + "@eth-optimism/contracts": "0.6.0", + "@openzeppelin/contracts": "4.9.3", + "@openzeppelin/contracts-upgradeable": "4.9.3", + "@scroll-tech/contracts": "0.1.0", + "@zksync/contracts": "git+https://github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9", + "semver": "^7.6.3" + }, + "engines": { + "node": ">=18", + "pnpm": ">=9" + } + }, + "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", + "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@changesets/apply-release-plan": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.14.tgz", + "integrity": "sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/config": "^3.1.2", + "@changesets/get-version-range-type": "^0.4.0", + "@changesets/git": "^3.0.4", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/assemble-release-plan": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", + "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.3", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/changelog-git": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", + "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0" + } + }, + "node_modules/@changesets/changelog-github": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.5.2.tgz", + "integrity": "sha512-HeGeDl8HaIGj9fQHo/tv5XKQ2SNEi9+9yl1Bss1jttPqeiASRXhfi0A2wv8yFKCp07kR1gpOI5ge6+CWNm1jPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/get-github-info": "^0.7.0", + "@changesets/types": "^6.1.0", + "dotenv": "^8.1.0" + } + }, + "node_modules/@changesets/cli": { + "version": "2.27.12", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.12.tgz", + "integrity": "sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/apply-release-plan": "^7.0.8", + "@changesets/assemble-release-plan": "^6.0.5", + "@changesets/changelog-git": "^0.2.0", + "@changesets/config": "^3.0.5", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/get-release-plan": "^4.0.6", + "@changesets/git": "^3.0.2", + "@changesets/logger": "^0.1.1", + "@changesets/pre": "^2.0.1", + "@changesets/read": "^0.6.2", + "@changesets/should-skip-package": "^0.1.1", + "@changesets/types": "^6.0.0", + "@changesets/write": "^0.3.2", + "@manypkg/get-packages": "^1.1.3", + "ansi-colors": "^4.1.3", + "ci-info": "^3.7.0", + "enquirer": "^2.4.1", + "external-editor": "^3.1.0", + "fs-extra": "^7.0.1", + "mri": "^1.2.0", + "p-limit": "^2.2.0", + "package-manager-detector": "^0.2.0", + "picocolors": "^1.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "spawndamnit": "^3.0.1", + "term-size": "^2.1.0" + }, + "bin": { + "changeset": "bin.js" + } + }, + "node_modules/@changesets/config": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.2.tgz", + "integrity": "sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.3", + "@changesets/logger": "^0.1.1", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1", + "micromatch": "^4.0.8" + } + }, + "node_modules/@changesets/errors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", + "dev": true, + "license": "MIT", + "dependencies": { + "extendable-error": "^0.1.5" + } + }, + "node_modules/@changesets/get-dependents-graph": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", + "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "picocolors": "^1.1.0", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/get-github-info": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.7.0.tgz", + "integrity": "sha512-+i67Bmhfj9V4KfDeS1+Tz3iF32btKZB2AAx+cYMqDSRFP7r3/ZdGbjCo+c6qkyViN9ygDuBjzageuPGJtKGe5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dataloader": "^1.4.0", + "node-fetch": "^2.5.0" + } + }, + "node_modules/@changesets/get-release-plan": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.14.tgz", + "integrity": "sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/assemble-release-plan": "^6.0.9", + "@changesets/config": "^3.1.2", + "@changesets/pre": "^2.0.2", + "@changesets/read": "^0.6.6", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/get-version-range-type": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@changesets/git": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", + "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@manypkg/get-packages": "^1.1.3", + "is-subdir": "^1.1.1", + "micromatch": "^4.0.8", + "spawndamnit": "^3.0.1" + } + }, + "node_modules/@changesets/logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", + "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/parse": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.2.tgz", + "integrity": "sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "js-yaml": "^4.1.1" + } + }, + "node_modules/@changesets/pre": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", + "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1" + } + }, + "node_modules/@changesets/read": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.6.tgz", + "integrity": "sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/git": "^3.0.4", + "@changesets/logger": "^0.1.1", + "@changesets/parse": "^0.4.2", + "@changesets/types": "^6.1.0", + "fs-extra": "^7.0.1", + "p-filter": "^2.1.0", + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/should-skip-package": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", + "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/types": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", + "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@changesets/write": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.2.tgz", + "integrity": "sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.0.0", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "prettier": "^2.7.1" + } + }, + "node_modules/@eth-optimism/contracts": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", + "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eth-optimism/core-utils": "0.12.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0" + }, + "peerDependencies": { + "ethers": "^5" + } + }, + "node_modules/@eth-optimism/core-utils": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", + "integrity": "sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bufio": "^1.0.7", + "chai": "^4.3.4" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "dev": true, + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/util": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", + "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" + } + }, + "node_modules/@manypkg/find-root/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" + } + }, + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/get-packages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.7.2" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.16.tgz", + "integrity": "sha512-bBL/nHmQwL1WCveALwg01VhJcpVVklJyunG1d/bhJbHgbjzAn6kohVJc7A6gFZegw+Rx38vdxpBkeCDjAEprzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.16", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.16", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.16", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.16", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.16", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.16", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.16" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.16.tgz", + "integrity": "sha512-no/8BPVBzVxDGGbDba0zsAxQmVNIq6SLjKzzhCxVKt4tatArXa6+24mr4jXJEmhVBvTNpQsNBO+MMpuEDVaTzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.16.tgz", + "integrity": "sha512-tf36YbcC6po3XYRbi+v0gjwzqg1MvyRqVUujNMXPHgjNWATXNRNOLyjwt2qDn+RD15qtzk70SHVnz9n9mPWzwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.16.tgz", + "integrity": "sha512-Kr6t9icKSaKtPVbb0TjUcbn3XHqXOGIn+KjKKSSpm6542OkL0HyOi06amh6/8CNke9Gf6Lwion8UJ0aGQhnFwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.16.tgz", + "integrity": "sha512-HaStgfxctSg5PYF+6ooDICL1O59KrgM4XEUsIqoRrjrQax9HnMBXcB8eAj+0O52FWiO9FlchBni2dzh4RjQR2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.16.tgz", + "integrity": "sha512-8JPTxEZkwOPTgnN4uTWut9ze9R8rp7+T4IfmsKK9i+lDtdbJIxkrFY275YHG2BEYLd7Y5jTa/I4nC74ZpTAvpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.16.tgz", + "integrity": "sha512-KugTrq3iHukbG64DuCYg8uPgiBtrrtX4oZSLba5sjocp0Ul6WWI1FeP1Qule+vClUrHSpJ+wR1G6SE7G0lyS/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.16.tgz", + "integrity": "sha512-Idy0ZjurxElfSmepUKXh6QdptLbW5vUNeIaydvqNogWoTbkJIM6miqZd9lXUy1TYxY7G4Rx5O50c52xc4pFwXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/slang": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.18.3.tgz", + "integrity": "sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@bytecodealliance/preview2-shim": "0.17.0" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@offchainlabs/upgrade-executor": { + "version": "1.1.0-beta.0", + "resolved": "https://registry.npmjs.org/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz", + "integrity": "sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw==", + "dev": true, + "license": "Apache 2.0", + "dependencies": { + "@openzeppelin/contracts": "4.7.3", + "@openzeppelin/contracts-upgradeable": "4.7.3" + } + }, + "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", + "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@openzeppelin/contracts": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.5.0.tgz", + "integrity": "sha512-R8hq4zmKKWP2c7OxeRgAcjZwvF5W0Qq2OIX7degrtdM52Q9xYr4MLJdUAVPKGUewNJ1qo+M6YiZLLnNUnjP/gg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.5.0.tgz", + "integrity": "sha512-Va5hKG5oaK0EE5bXTVWugcGimMHazxL+SL523dH6WVbGiuLXwuWr9oxtLyPHQSVGtgmlIgtKNR5V+OUpCIUwFQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@openzeppelin/contracts": "5.5.0" + } + }, + "node_modules/@openzeppelin/upgrades-core": { + "version": "1.44.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.44.2.tgz", + "integrity": "sha512-m6iorjyhPK9ow5/trNs7qsBC/SOzJCO51pvvAF2W9nOiZ1t0RtCd+rlRmRmlWTv4M33V0wzIUeamJ2BPbzgUXA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@nomicfoundation/slang": "^0.18.3", + "bignumber.js": "^9.1.2", + "cbor": "^10.0.0", + "chalk": "^4.1.0", + "compare-versions": "^6.0.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.0.3", + "minimatch": "^9.0.5", + "minimist": "^1.2.7", + "proper-lockfile": "^4.1.1", + "solidity-ast": "^0.4.60" + }, + "bin": { + "openzeppelin-upgrades-core": "dist/cli/cli.js" + } + }, + "node_modules/@scroll-tech/contracts": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@scroll-tech/contracts/-/contracts-0.1.0.tgz", + "integrity": "sha512-aBbDOc3WB/WveZdpJYcrfvMYMz7ZTEiW8M9XMJLba8p9FAR5KGYB/cV+8+EUsq3MKt7C1BfR+WnXoTVdvwIY6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", + "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@zksync/contracts": { + "name": "era-contracts", + "version": "0.1.0", + "resolved": "git+ssh://git@github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9", + "integrity": "sha512-KhgPVqd/MgV/ICUEsQf1uyL321GNPqsyHSAPMCaa9vW94fbuQK6RwMWoyQOPlZP17cQD8tzLNCSXqz73652kow==", + "dev": true, + "workspaces": { + "packages": [ + "l1-contracts", + "l2-contracts", + "system-contracts", + "gas-bound-caller" + ], + "nohoist": [ + "**/@openzeppelin/**" + ] + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-windows": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/bufio": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.2.3.tgz", + "integrity": "sha512-5Tt66bRzYUSlVZatc0E92uDenreJ+DpTBmSAUwL4VSxJn3e6cUyYwx+PoqML0GRZatgA/VX8ybhxItF8InZgqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cbor": { + "version": "10.0.11", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-10.0.11.tgz", + "integrity": "sha512-vIwORDd/WyB8Nc23o2zNN5RrtFGlR6Fca61TtjkUXueI3Jf2DOZDl1zsshvBntZ3wZHBM9ztjnkXSmzQDaq3WA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "nofilter": "^3.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "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/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/dataloader": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", + "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "license": "MPL-2.0", + "optional": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hardhat": { + "version": "2.27.2", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.27.2.tgz", + "integrity": "sha512-2N51AWD3Hg9T+4+A1zmJ70RkJgHzK+JYASrRtSmD3nVsoceYrFxwIJHUucw5fuy7Z9x9JTSMGO5dgCYe7MX8FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethereumjs/util": "^9.1.0", + "@ethersproject/abi": "^5.1.2", + "@nomicfoundation/edr": "0.12.0-next.16", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "find-up": "^5.0.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "micro-eth-signer": "^0.14.0", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "picocolors": "^1.1.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.6", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/hardhat/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/hardhat/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/hardhat/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hardhat/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hardhat/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hardhat/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hardhat/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/hash-base/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hash-base/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/hash-base/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/hash-base/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-id": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", + "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "better-path-resolve": "1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=7.10.1" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micro-eth-signer": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", + "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "micro-packed": "~0.7.2" + } + }, + "node_modules/micro-packed": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", + "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/obliterator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/outdent": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-filter/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-manager-detector": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "quansync": "^0.2.7" + } + }, + "node_modules/patch-package": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", + "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^1.10.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=10", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/patch-package/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/patch-package/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/patch-package/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-yaml-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.5", + "js-yaml": "^3.6.1", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-yaml-file/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/read-yaml-file/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ripemd160": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "hash-base": "^3.1.2", + "inherits": "^2.0.4" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dev": true, + "license": "MPL-2.0", + "optional": true, + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true, + "license": "MIT" + }, + "node_modules/secp256k1": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "optional": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solidity-ast": { + "version": "0.4.61", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.61.tgz", + "integrity": "sha512-OYBJYcYyG7gLV0VuXl9CUrvgJXjV/v0XnR4+1YomVe3q+QyENQXJJxAEASUz4vN6lMAl+C8RSRSr5MBAz09f6w==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spawndamnit": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", + "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", + "dev": true, + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "cross-spawn": "^7.0.5", + "signal-exit": "^4.0.1" + } + }, + "node_modules/spawndamnit/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/spawndamnit/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/spawndamnit/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawndamnit/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/spawndamnit/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/spawndamnit/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stacktrace-parser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1c66aa1 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "cmtat-ace", + "version": "1.0.0", + "description": "", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CMTA/CMTAT-ACE.git" + }, + "author": "", + "homepage": "https://github.com/CMTA/CMTAT-ACE#readme", + "devDependencies": { + "@chainlink/contracts": "1.3.0", + "@openzeppelin/contracts": "5.5.0", + "@openzeppelin/contracts-upgradeable": "5.5.0", + "hardhat": "^2.27.1" + } +} From d49ae6c09800424e4b32e62584cb55db70d32360 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Wed, 10 Dec 2025 15:26:37 +0000 Subject: [PATCH 02/57] Update submodules to separate directory --- .gitmodules | 12 ++++++------ CMTAT | 1 - submodules/CMTAT | 1 + chainlink-ace => submodules/chainlink-ace | 0 4 files changed, 7 insertions(+), 7 deletions(-) delete mode 160000 CMTAT create mode 160000 submodules/CMTAT rename chainlink-ace => submodules/chainlink-ace (100%) diff --git a/.gitmodules b/.gitmodules index ceda78b..804db8f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,8 +1,8 @@ -[submodule "CMTAT"] - path = CMTAT - url = https://github.com/CMTA/CMTAT - branch = dev -[submodule "chainlink-ace"] - path = chainlink-ace +[submodule "submodules/chainlink-ace"] + path = submodules/chainlink-ace url = https://github.com/smartcontractkit/chainlink-ace branch = main +[submodule "submodules/CMTAT"] + path = submodules/CMTAT + url = https://github.com/CMTA/CMTAT + branch = dev diff --git a/CMTAT b/CMTAT deleted file mode 160000 index 9c96c8e..0000000 --- a/CMTAT +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9c96c8eed903cb092e37b089316515ecefbd10fe diff --git a/submodules/CMTAT b/submodules/CMTAT new file mode 160000 index 0000000..ee08683 --- /dev/null +++ b/submodules/CMTAT @@ -0,0 +1 @@ +Subproject commit ee08683cb4b40ada31538da5947c601ff8ef2249 diff --git a/chainlink-ace b/submodules/chainlink-ace similarity index 100% rename from chainlink-ace rename to submodules/chainlink-ace From 997312ae1cbd534157fbcd02dee4d2b8f90c535b Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Thu, 18 Dec 2025 15:08:45 +0000 Subject: [PATCH 03/57] Add two standalone deployments and example deployment test. Test fails due to initialization error --- .gitmodules | 2 +- README.md | 39 +- contracts/deployment/ComplianceTokenCMTAT.sol | 49 + .../deployment/ComplianceTokenCMTATLite.sol | 48 + .../modules/lite/CCTCMTATBaseERC1404.sol | 85 + .../lite/CCTCMTATBaseERC20CrossChain.sol | 139 + .../modules/lite/CCTCMTATBaseERC2771.sol | 45 + .../modules/lite/CCTCMTATBasePolicyEngine.sol | 174 + .../lite/PolicyValidationModuleERC1404.sol | 149 + .../lite/ValidationModulePolicyEngine.sol | 125 + contracts/modules/standard/CCTBaseERC2771.sol | 51 + contracts/modules/standard/CCTCommon.sol | 133 + .../engines/CCTDocumentEngineModule.sol | 103 + .../engines/CCTSnapshotEngineModule.sol | 84 + .../modules/standard/erc20/CCTBurnModule.sol | 85 + .../modules/standard/erc20/CCTERC20Module.sol | 81 + .../modules/standard/erc20/CCTMintModule.sol | 83 + .../extensions/CCTCrossChainModule.sol | 103 + .../extensions/CCTEnforcementModule.sol | 103 + .../extensions/CCTExtraInformationModule.sol | 148 + .../modules/standard/extensions/CCTModule.sol | 60 + hardhat.config.js | 17 +- package-lock.json | 6623 +++++++++++++---- package.json | 8 +- test/standardDeployment.test.js | 21 + test/testUtils.js | 66 + 26 files changed, 7135 insertions(+), 1489 deletions(-) create mode 100644 contracts/deployment/ComplianceTokenCMTAT.sol create mode 100644 contracts/deployment/ComplianceTokenCMTATLite.sol create mode 100644 contracts/modules/lite/CCTCMTATBaseERC1404.sol create mode 100644 contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol create mode 100644 contracts/modules/lite/CCTCMTATBaseERC2771.sol create mode 100644 contracts/modules/lite/CCTCMTATBasePolicyEngine.sol create mode 100644 contracts/modules/lite/PolicyValidationModuleERC1404.sol create mode 100644 contracts/modules/lite/ValidationModulePolicyEngine.sol create mode 100644 contracts/modules/standard/CCTBaseERC2771.sol create mode 100644 contracts/modules/standard/CCTCommon.sol create mode 100644 contracts/modules/standard/engines/CCTDocumentEngineModule.sol create mode 100644 contracts/modules/standard/engines/CCTSnapshotEngineModule.sol create mode 100644 contracts/modules/standard/erc20/CCTBurnModule.sol create mode 100644 contracts/modules/standard/erc20/CCTERC20Module.sol create mode 100644 contracts/modules/standard/erc20/CCTMintModule.sol create mode 100644 contracts/modules/standard/extensions/CCTCrossChainModule.sol create mode 100644 contracts/modules/standard/extensions/CCTEnforcementModule.sol create mode 100644 contracts/modules/standard/extensions/CCTExtraInformationModule.sol create mode 100644 contracts/modules/standard/extensions/CCTModule.sol create mode 100644 test/standardDeployment.test.js create mode 100644 test/testUtils.js diff --git a/.gitmodules b/.gitmodules index 804db8f..987cae4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,4 +5,4 @@ [submodule "submodules/CMTAT"] path = submodules/CMTAT url = https://github.com/CMTA/CMTAT - branch = dev + branch = master diff --git a/README.md b/README.md index 2a2e05e..124f5fb 100644 --- a/README.md +++ b/README.md @@ -1 +1,38 @@ -# CMTA-ACE \ No newline at end of file +# CMTAT ACE integration project + +## Deployment versions* +Two versions are available; *lite* version which substitutes RuleEngine with Chainlink ACE PolicyEngine, and *standard* version, which uses PolicyEngine to protect all external functions instead of OpenZepplin role-based AccessControl. + +## Initialize submodules +```shell +git submodule update +``` + +## Install dependencies +You can use any package manager either npm, yarn or pnpm. For example you can type: + +```shell +npm install +``` + +## Compile contracts +To compile + +```shell +npx hardhat compile +``` + +# Testing + +To run tests: + +```shell +npx hardhat test +``` + +# Scripts +You can use example scripts to deploy, e.g. for local Hardhat Network deployment: + +```shell +npx hardhat run scripts/{script_name} +``` \ No newline at end of file diff --git a/contracts/deployment/ComplianceTokenCMTAT.sol b/contracts/deployment/ComplianceTokenCMTAT.sol new file mode 100644 index 0000000..68435eb --- /dev/null +++ b/contracts/deployment/ComplianceTokenCMTAT.sol @@ -0,0 +1,49 @@ +//SPDX-License-Identifier: MPL-2.0 + +pragma solidity 0.8.26; + +import {CCTBaseERC2771} from "../modules/standard/CCTBaseERC2771.sol"; +import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; +import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; +import {ISnapshotEngine} from "../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; +import {IERC1643} from "../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; +import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; + + +/** + * @title ComplianceTokenCMTAT + * @author Chainlink + * @notice Compliance Token contract with Chainlink ACE policy validation on all public function (instead of RBAC) + */ +contract ComplianceTokenCMTAT is CCTBaseERC2771 { + /** + * @notice Contract version for standalone deployment + * @param forwarderIrrevocable address of the forwarder, required for the gasless support + * @param admin address of the admin of contract (Access Control) + * @param ERC20Attributes_ ERC20 name, symbol and decimals + * @param extraInformationAttributes_ tokenId, terms, information + * @param snapshotEngine_ address of the snapshot engine + * @param documentEngine_ address of the document engine + * @param policyEngine_ address of the policy engine + */ + /// @custom:oz-upgrades-unsafe-allow constructor + constructor( + address forwarderIrrevocable, + address admin, + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_, + address policyEngine_ + ) ERC2771Module(forwarderIrrevocable) { + // Initialize the contract to avoid front-running + initialize( + admin, + ERC20Attributes_, + extraInformationAttributes_, + snapshotEngine_, + documentEngine_, + policyEngine_ + ); + } +} \ No newline at end of file diff --git a/contracts/deployment/ComplianceTokenCMTATLite.sol b/contracts/deployment/ComplianceTokenCMTATLite.sol new file mode 100644 index 0000000..16fe92a --- /dev/null +++ b/contracts/deployment/ComplianceTokenCMTATLite.sol @@ -0,0 +1,48 @@ +//SPDX-License-Identifier: MPL-2.0 + +pragma solidity 0.8.26; + +import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; +import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; +import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; +import {ISnapshotEngine} from "../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; +import {IERC1643} from "../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; +import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; + +/** + * @title ComplianceTokenCMTATLite + * @author Chainlink + * @notice Compliance Token contract with Chainlink ACE policy validation on CMTA transfers + */ +contract ComplianceTokenCMTATLite is CCTCMTATBaseERC2771 { + /** + * @notice Contract version for standalone deployment + * @param forwarderIrrevocable address of the forwarder, required for the gasless support + * @param admin address of the admin of contract (Access Control) + * @param ERC20Attributes_ ERC20 name, symbol and decimals + * @param extraInformationAttributes_ tokenId, terms, information + * @param snapshotEngine_ address of the snapshot engine + * @param documentEngine_ address of the document engine + * @param policyEngine_ address of the policy engine + */ + /// @custom:oz-upgrades-unsafe-allow constructor + constructor( + address forwarderIrrevocable, + address admin, + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_, + address policyEngine_ + ) ERC2771Module(forwarderIrrevocable) { + // Initialize the contract to avoid front-running + initialize( + admin, + ERC20Attributes_, + extraInformationAttributes_, + snapshotEngine_, + documentEngine_, + policyEngine_ + ); + } +} \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBaseERC1404.sol b/contracts/modules/lite/CCTCMTATBaseERC1404.sol new file mode 100644 index 0000000..a3964c2 --- /dev/null +++ b/contracts/modules/lite/CCTCMTATBaseERC1404.sol @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {CCTCMTATBasePolicyEngine} from "./CCTCMTATBasePolicyEngine.sol"; +import {PolicyValidationModuleERC1404, IERC1404, IERC1404Extend} from "./PolicyValidationModuleERC1404.sol"; +import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; +import {PolicyProtected} from "../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; +import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import {ERC20EnforcementModule, ERC20EnforcementModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; + + +abstract contract CCTCMTATBaseERC1404 is + CCTCMTATBasePolicyEngine, + PolicyValidationModuleERC1404 +{ + /** + * @dev ERC20EnforcementModule error text + */ + string internal constant TEXT_TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE = + "AddrFrom:insufficientActiveBalance"; + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /** + * @inheritdoc PolicyValidationModuleERC1404 + */ + function messageForTransferRestriction( + uint8 restrictionCode + ) public view virtual override(PolicyValidationModuleERC1404) returns (string memory message) { + if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE)) { + return TEXT_TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE; + } else { + return PolicyValidationModuleERC1404.messageForTransferRestriction(restrictionCode); + } + + } + + /** + * @inheritdoc ValidationModulePolicyEngine + */ + function canTransfer( + address from, + address to, + uint256 value + ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModulePolicyEngine) view returns (bool) { + return CCTCMTATBasePolicyEngine.canTransfer(from, to, value); + } + + /** + * @inheritdoc ValidationModulePolicyEngine + */ + function canTransferFrom( + address spender, + address from, + address to, + uint256 value + ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModulePolicyEngine) view returns (bool) { + return CCTCMTATBasePolicyEngine.canTransferFrom(spender, from, to, value); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _detectTransferRestriction( + address from, + address to, + uint256 value + ) internal virtual override(PolicyValidationModuleERC1404) view returns (uint8 code) { + uint256 frozenTokensLocal = ERC20EnforcementModule.getFrozenTokens(from); + if (frozenTokensLocal > 0) { + uint256 activeBalance = ERC20Upgradeable.balanceOf(from) - frozenTokensLocal; + if(value > activeBalance) { + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE); + } + } + return PolicyValidationModuleERC1404._detectTransferRestriction(from, to, value); + } + + // Note: CCTCMTATBasePolicyEngine implements PolicyProtected + function supportsInterface(bytes4 interfaceId) public view virtual override(CCTCMTATBasePolicyEngine, PolicyProtected) returns (bool) { + return CCTCMTATBasePolicyEngine.supportsInterface(interfaceId); + } +} \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol new file mode 100644 index 0000000..b48f6b5 --- /dev/null +++ b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol @@ -0,0 +1,139 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {ERC20CrossChainModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol"; +import {CCIPModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol"; +import {CCTCMTATBaseERC1404} from "./CCTCMTATBaseERC1404.sol"; +import {CMTATBaseCommon} from "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol"; +import {ERC20MintModule, ERC20MintModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol"; +import {ERC20BurnModule, ERC20BurnModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol"; +import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; + +abstract contract CCTCMTATBaseERC20CrossChain is ERC20CrossChainModule, CCIPModule, CCTCMTATBaseERC1404 { + + /* ============ State Functions ============ */ + function transfer(address to, uint256 value) public virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (bool) { + return CMTATBaseCommon.transfer(to, value); + } + /* + * @inheritdoc ERC20BaseModule + */ + function transferFrom( + address from, + address to, + uint256 value + ) + public + virtual + override(ERC20Upgradeable, CMTATBaseCommon) + returns (bool) + { + return CMTATBaseCommon.transferFrom(from, to, value); + } + /** + * @dev Check if the mint is valid + */ + function _mintOverride(address account, uint256 value) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { + _checkTransferred(address(0), address(0), account, value); + ERC20MintModuleInternal._mintOverride(account, value); + } + + /** + * @dev Check if the burn is valid + */ + function _burnOverride(address account, uint256 value) internal virtual override(CMTATBaseCommon, ERC20BurnModuleInternal) { + _checkTransferred(address(0), account, address(0), value); + ERC20BurnModuleInternal._burnOverride(account, value); + } + + /** + * @dev Check if a minter transfer is valid + */ + function _minterTransferOverride(address from, address to, uint256 value) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { + _checkTransferred(address(0), from, to, value); + ERC20MintModuleInternal._minterTransferOverride(from, to, value); + } + + /** + * @inheritdoc CMTATBaseCommon + */ + function decimals() + public + view + virtual + override(ERC20Upgradeable, CMTATBaseCommon) + returns (uint8) + { + return CMTATBaseCommon.decimals(); + } + + + /** + * @inheritdoc CMTATBaseCommon + */ + function name() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) { + return CMTATBaseCommon.name(); + } + + /** + * @inheritdoc CMTATBaseCommon + */ + function symbol() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) { + return CMTATBaseCommon.symbol(); + } + + + /* ============ View functions ============ */ + function supportsInterface(bytes4 _interfaceId) public view virtual override(ERC20CrossChainModule, CCTCMTATBaseERC1404) returns (bool) { + return ERC20CrossChainModule.supportsInterface(_interfaceId)|| CCTCMTATBaseERC1404.supportsInterface(_interfaceId); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + /* ==== Access Control ==== */ + + /** + * @custom:access-control + * - the caller must have the `DEFAULT_ADMIN_ROLE`. + */ + function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) onlyRole(DEFAULT_ADMIN_ROLE) {} + + /** + * @dev + * A cross-chain bridge could call the OpenZeppelin function `renounceRole` to lose their privileges (CROSS_CHAIN_ROLE) + * While it is not intended,this has no other effect than depriving the bridge of burn/mint tokens + * An attacker could use this to disrupt minting/burning if they can get the bridge to execute calls. + * However, in this case, the bridge should still be considered compromised and not used again. + * @custom:access-control + * - the caller must have the `CROSS_CHAIN_ROLE`. + */ + function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) whenNotPaused { + AccessControlUpgradeable._checkRole(CROSS_CHAIN_ROLE, caller); + } + + /** + * @custom:access-control + * - the caller must have the `BURNER_FROM_ROLE`. + * - We don't allow token holder to burn their own tokens if they don't have this role. + */ + function _authorizeBurnFrom() internal virtual override(ERC20CrossChainModule) onlyRole(BURNER_FROM_ROLE) whenNotPaused{} + + /** + * @custom:access-control + * - the caller must have the `BURNER_FROM_ROLE`. + * - We don't allow token holder to burn their own tokens if they don't have this role. + */ + function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) onlyRole(BURNER_SELF_ROLE) whenNotPaused{} + + /* ==== ERC-20 OpenZeppelin ==== */ + function _update( + address from, + address to, + uint256 amount + ) internal virtual override(ERC20Upgradeable, CMTATBaseCommon) { + return CMTATBaseCommon._update(from, to, amount); + } +} \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBaseERC2771.sol b/contracts/modules/lite/CCTCMTATBaseERC2771.sol new file mode 100644 index 0000000..c1f1e93 --- /dev/null +++ b/contracts/modules/lite/CCTCMTATBaseERC2771.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {CCTCMTATBaseERC20CrossChain} from "./CCTCMTATBaseERC20CrossChain.sol"; +import {ERC2771Module, ERC2771ContextUpgradeable} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; + +abstract contract CCTCMTATBaseERC2771 is CCTCMTATBaseERC20CrossChain, ERC2771Module { + /*////////////////////////////////////////////////////////////// + ERC2771 MODULE + //////////////////////////////////////////////////////////////*/ + /** + * @dev This surcharge is not necessary if you do not use the 2771Module + */ + function _msgSender() + internal virtual + view + override(ContextUpgradeable, ERC2771ContextUpgradeable) + returns (address sender) + { + return ERC2771ContextUpgradeable._msgSender(); + } + + /** + * @dev This surcharge is not necessary if you do not use the 2771Module + */ + function _contextSuffixLength() internal virtual view + override(ContextUpgradeable, ERC2771ContextUpgradeable) + returns (uint256) { + return ERC2771ContextUpgradeable._contextSuffixLength(); + } + + /** + * @dev This surcharge is not necessary if you do not use the 2771Module + */ + function _msgData() + internal virtual + view + override(ContextUpgradeable, ERC2771ContextUpgradeable) + returns (bytes calldata) + { + return ERC2771ContextUpgradeable._msgData(); + } +} \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol new file mode 100644 index 0000000..6bb51bf --- /dev/null +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -0,0 +1,174 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {CMTATBaseCommon} from "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol"; +import {PolicyProtected} from "../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; +import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; +import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; +import {IPolicyEngine} from "../../../submodules/chainlink-ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; +import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; +import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; +import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; +import {PauseModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol"; +import {EnforcementModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol"; +// Extensions +import {ERC20EnforcementModule, ERC20EnforcementModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; +import {Errors} from "../../../submodules/CMTAT/contracts/libraries/Errors.sol"; + + +abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModulePolicyEngine { + + /*////////////////////////////////////////////////////////////// + INITIALIZER FUNCTION + //////////////////////////////////////////////////////////////*/ + /** + * @notice + * initialize the proxy contract + * The calls to this function will revert if the contract was deployed without a proxy + * @param admin address of the admin of contract (Access Control) + * @param ERC20Attributes_ ERC20 name, symbol and decimals + * @param extraInformationAttributes_ tokenId, terms, information + * @param policyEngine_ address of the policy engine + * @param snapshotEngine_ address of the snapshot engine + * @param documentEngine_ address of the document engine + * @dev + * If you override the public function initialize, + * call inside directly the internal function, not the public one which is protected by the initializer modifier + */ + function initialize( + address admin, + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_, + address policyEngine_ + ) public virtual initializer { + _initialize( + admin, + ERC20Attributes_, + extraInformationAttributes_, + snapshotEngine_, + documentEngine_, + policyEngine_ + ); + } + + /** + * @dev don't call the initializer modifer + */ + function _initialize( + address admin, + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_, + address policyEngine_ + ) internal virtual onlyInitializing{ + __CMTAT_init( + admin, + ERC20Attributes_, + extraInformationAttributes_, + snapshotEngine_, + documentEngine_, + policyEngine_ + ); + } + + /** + * @dev calls the different initialize functions from the different modules + */ + function __CMTAT_init( + address admin, + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_, + address policyEngine_ + ) internal virtual onlyInitializing { + /* OpenZeppelin library */ + // OZ init_unchained functions are called firstly due to inheritance + __Context_init_unchained(); + + // AccessControlUpgradeable inherits from ERC165Upgradeable + __ERC165_init_unchained(); + + // Openzeppelin + __CMTAT_openzeppelin_init_unchained(ERC20Attributes_); + + /* Wrapper modules */ + __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_, snapshotEngine_, documentEngine_); + + /* Chainlink-ACE policy module */ + __PolicyProtected_init(admin, policyEngine_); + } + + /* + * @dev OpenZeppelin + */ + function __CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes memory ERC20Attributes_) internal virtual onlyInitializing { + // Note that the Openzeppelin functions name() and symbol() are overriden in ERC20BaseModule + __ERC20_init_unchained(ERC20Attributes_.name, ERC20Attributes_.symbol); + } + + /* + * @dev CMTAT wrapper modules + */ + function __CMTAT_modules_init_unchained(address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, ICMTATConstructor.Engine memory engines_) internal virtual onlyInitializing { + __CMTAT_commonModules_init_unchained(admin,ERC20Attributes_, extraInformationAttributes_, engines_.snapshotEngine, engines_.documentEngine); + } + + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + /** + * @inheritdoc ValidationModulePolicyEngine + */ + function canTransfer( + address from, + address to, + uint256 value + ) public virtual override (ValidationModulePolicyEngine) view returns (bool) { + if(!ERC20EnforcementModuleInternal._checkActiveBalance(from, value)){ + return false; + } else { + return ValidationModulePolicyEngine.canTransfer(from, to, value); + } + } + + /** + * @inheritdoc ValidationModulePolicyEngine + */ + function canTransferFrom( + address spender, + address from, + address to, + uint256 value + ) public virtual override (ValidationModulePolicyEngine) view returns (bool) { + if(!ERC20EnforcementModuleInternal._checkActiveBalance(from, value)){ + return false; + } else { + return ValidationModulePolicyEngine.canTransferFrom(spender, from, to, value); + } + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + /* ==== Access Control ==== */ + function _authorizePause() internal virtual override(PauseModule) onlyRole(PAUSER_ROLE){} + function _authorizeDeactivate() internal virtual override(PauseModule) onlyRole(DEFAULT_ADMIN_ROLE){} + + function _authorizeFreeze() internal virtual override(EnforcementModule) onlyRole(ENFORCER_ROLE){} + + /* ==== Transfer/mint/burn restriction ==== */ + function _checkTransferred(address spender, address from, address to, uint256 value) internal virtual override(CMTATBaseCommon) { + CMTATBaseCommon._checkTransferred(spender, from, to, value); + require(ValidationModulePolicyEngine._transferred(spender, from, to, value), Errors.CMTAT_InvalidTransfer(from, to, value)); + } + + + function supportsInterface(bytes4 interfaceId) public view virtual override(CMTATBaseCommon, PolicyProtected) returns (bool) { + return CMTATBaseCommon.supportsInterface(interfaceId) || PolicyProtected.supportsInterface(interfaceId); + } +} \ No newline at end of file diff --git a/contracts/modules/lite/PolicyValidationModuleERC1404.sol b/contracts/modules/lite/PolicyValidationModuleERC1404.sol new file mode 100644 index 0000000..227347e --- /dev/null +++ b/contracts/modules/lite/PolicyValidationModuleERC1404.sol @@ -0,0 +1,149 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + + +/* ==== Tokenization === */ +import {IERC1404, IERC1404Extend} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol"; +import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; + +/** + * @dev Validation module (ERC-1404) + * + * Useful to restrict and validate transfers + */ +abstract contract PolicyValidationModuleERC1404 is + ValidationModulePolicyEngine, IERC1404Extend +{ + /* ============ State Variables ============ */ + string constant TEXT_TRANSFER_OK = "NoRestriction"; + string constant TEXT_UNKNOWN_CODE = "UnknownCode"; + + /* EnforcementModule */ + string internal constant TEXT_TRANSFER_REJECTED_FROM_FROZEN = + "AddrFromIsFrozen"; + + string internal constant TEXT_TRANSFER_REJECTED_TO_FROZEN = + "AddrToIsFrozen"; + + string internal constant TEXT_TRANSFER_REJECTED_SPENDER_FROZEN = + "AddrSpenderIsFrozen"; + + /* PauseModule */ + string internal constant TEXT_TRANSFER_REJECTED_PAUSED = + "EnforcedPause"; + + /* Contract deactivated */ + string internal constant TEXT_TRANSFER_REJECTED_DEACTIVATED = + "ContractDeactivated"; + + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + /** + * @notice returns the human readable explanation + * corresponding to the error code returned by detectTransferRestriction + * @param restrictionCode The error code returned by detectTransferRestriction + * @return message The human readable explanation corresponding to the error code returned by detectTransferRestriction + * @dev see {ERC-1404} + */ + function messageForTransferRestriction( + uint8 restrictionCode + ) public virtual view override(IERC1404) returns (string memory message) { + if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) { + return TEXT_TRANSFER_OK; + } else if ( + restrictionCode == + uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_PAUSED) + ) { + return TEXT_TRANSFER_REJECTED_PAUSED; + } else if ( + restrictionCode == + uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_DEACTIVATED) + ) { + return TEXT_TRANSFER_REJECTED_DEACTIVATED; + } else if ( + restrictionCode == + uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_FROZEN) + ) { + return TEXT_TRANSFER_REJECTED_FROM_FROZEN; + } else if ( + restrictionCode == + uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_TO_FROZEN) + ) { + return TEXT_TRANSFER_REJECTED_TO_FROZEN; + } else if ( + restrictionCode == + uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_SPENDER_FROZEN) + ) { + return TEXT_TRANSFER_REJECTED_SPENDER_FROZEN; + } else { + return TEXT_UNKNOWN_CODE; + } + } + + /** + * @notice check if value token can be transferred from `from` to `to` + * @param from address The address which you want to send tokens from + * @param to address The address which you want to transfer to + * @param value uint256 the amount of tokens to be transferred + * @return code of the rejection reason + * @dev see {ERC-1404} + */ + function detectTransferRestriction( + address from, + address to, + uint256 value + ) public virtual view override(IERC1404) returns (uint8 code) { + uint8 codeReturn = _detectTransferRestriction(from, to, value); + if (codeReturn != uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) { + return codeReturn; + } else { + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + } + } + + function detectTransferRestrictionFrom( + address spender, + address from, + address to, + uint256 value + ) public virtual view override(IERC1404Extend) returns (uint8 code) { + if (isFrozen(spender)) { + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_SPENDER_FROZEN); + } else { + uint8 codeReturn = _detectTransferRestriction(from, to, value); + if (codeReturn != uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK) ){ + return codeReturn; + } else { + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + } + } + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /** + * @dev override this function to add further restriction + */ + function _detectTransferRestriction( + address from, + address to, + uint256 /* value */ + ) internal virtual view returns (uint8 code) { + if (deactivated()){ + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_DEACTIVATED); + } else if (paused()) { + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_PAUSED); + } else if (isFrozen(from)) { + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_FROZEN); + } else if (isFrozen(to)) { + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_TO_FROZEN); + } + else { + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + } + } +} diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol new file mode 100644 index 0000000..10b1a24 --- /dev/null +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; +import {PolicyProtected} from "../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; +import {IPolicyEngine} from "../../../submodules/chainlink-ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; + + +abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtected { + + + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /* ============ View functions ============ */ + /** + * @inheritdoc ValidationModuleCore + * @dev call the ruleEngine if set + */ + function canTransfer( + address from, + address to, + uint256 value + ) public view virtual override(ValidationModuleCore) returns (bool) { + return _canTransfer(from, to, value); + } + + /** + * @inheritdoc ValidationModuleCore + * @dev call the ruleEngine if set + */ + function canTransferFrom( + address spender, + address from, + address to, + uint256 value + ) public view virtual override(ValidationModuleCore) returns (bool) { + return _canTransferFrom(spender, from, to, value); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + /* ============ View functions ============ */ + function _canTransfer( + address from, + address to, + uint256 value) + internal view virtual returns (bool) { + if (!ValidationModuleCore.canTransfer(from, to, value)) { + return false; + } else { + return _canTransferWithPolicyEngine(from, to, value); + } + } + + function _canTransferFrom( + address spender, + address from, + address to, + uint256 value + ) internal view virtual returns (bool) { + if (!ValidationModuleCore.canTransferFrom(spender, from, to, value)) { + return false; + } else { + return _canTransferFromWithPolicyEngine(spender, from, to, value); + } + } + + // Note: parameters are kept to retain the interface, even if not used + function _canTransferFromWithPolicyEngine( + address spender, + address from, + address to, + uint256 value + ) internal view virtual returns (bool) { + return _tryRunPolicies(); + } + + // Note: parameters are kept to retain the interface, even if not used + function _canTransferWithPolicyEngine( + address from, + address to, + uint256 value + ) internal view virtual returns (bool) { + return _tryRunPolicies(); + } + + function _tryRunPolicies() internal view returns(bool) { + IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine()); + if (address(policyEngine_) != address(0)) { + bytes memory context = getContext(); + try policyEngine_.check( + IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + ) + { + return true; + } + catch { + return false; + } + } else { + return true; + } + } + + + /* ============ State functions ============ */ + function _transferred(address spender, address from, address to, uint256 value) internal virtual returns (bool) { + if(!_canTransferGenericByModule(spender, from, to)) { + return false; + } else { + IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine()); + if (address(policyEngine_) != address(0)){ + bytes memory context = getContext(); + policyEngine_.run( + IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})); + } + } + return true; + } + +} \ No newline at end of file diff --git a/contracts/modules/standard/CCTBaseERC2771.sol b/contracts/modules/standard/CCTBaseERC2771.sol new file mode 100644 index 0000000..10ffee6 --- /dev/null +++ b/contracts/modules/standard/CCTBaseERC2771.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + + +import {CCTCommon} from "./CCTCommon.sol"; +import {ERC2771Module, ERC2771ContextUpgradeable} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; +import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; +import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; +import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol"; +import "hardhat/console.sol"; + +abstract contract CCTBaseERC2771 is CCTCommon, ERC2771Module { + + /*////////////////////////////////////////////////////////////// + ERC2771 MODULE + //////////////////////////////////////////////////////////////*/ + /** + * @dev This surcharge is not necessary if you do not use the 2771Module + */ + function _msgSender() + internal virtual + view + override(ContextUpgradeable, ERC2771ContextUpgradeable) + returns (address sender) + { + return ERC2771ContextUpgradeable._msgSender(); + } + + /** + * @dev This surcharge is not necessary if you do not use the 2771Module + */ + function _contextSuffixLength() internal virtual view + override(ContextUpgradeable, ERC2771ContextUpgradeable) + returns (uint256) { + return ERC2771ContextUpgradeable._contextSuffixLength(); + } + + /** + * @dev This surcharge is not necessary if you do not use the 2771Module + */ + function _msgData() + internal virtual + view + override(ContextUpgradeable, ERC2771ContextUpgradeable) + returns (bytes calldata) + { + return ERC2771ContextUpgradeable._msgData(); + } +} \ No newline at end of file diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol new file mode 100644 index 0000000..e91151d --- /dev/null +++ b/contracts/modules/standard/CCTCommon.sol @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {VersionModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol"; +import {CCTERC20Module} from "./erc20/CCTERC20Module.sol"; +import {CCTSnapshotEngineModule} from "./engines/CCTSnapshotEngineModule.sol"; +import {CCTEnforcementModule} from "./extensions/CCTEnforcementModule.sol"; +import {CCTDocumentEngineModule, IERC1643} from "./engines/CCTDocumentEngineModule.sol"; +import {CCTExtraInformationModule} from "./extensions/CCTExtraInformationModule.sol"; +import {IBurnMintERC20} from "../../../submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol"; +import {IERC5679} from "../../../submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol"; +import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; +import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; +import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import {PolicyProtected} from "../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; +import {CCTCrossChainModule} from "./extensions/CCTCrossChainModule.sol"; + + +abstract contract CCTCommon is + CCTERC20Module, + CCTCrossChainModule, + CCTEnforcementModule, + VersionModule, + CCTSnapshotEngineModule, + CCTDocumentEngineModule, + CCTExtraInformationModule, + IBurnMintERC20 +{ + function initialize( + address admin, + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_, + address policyEngine + ) public virtual initializer { + _initialize(admin, ERC20Attributes_, extraInformationAttributes_, snapshotEngine_, documentEngine_, policyEngine); + } + + function _initialize( + address admin, + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_, + address policyEngine + ) internal virtual onlyInitializing { + __CCT_commonModules_init_unchained( + admin, + ERC20Attributes_, + extraInformationAttributes_, + snapshotEngine_, + documentEngine_, + policyEngine + ); + } + + function __CCT_commonModules_init_unchained(address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationModuleAttributes_, + ISnapshotEngine snapshotEngine_, IERC1643 documentEngine_, address policyEngine + ) internal virtual onlyInitializing { + __PolicyProtected_init(admin, policyEngine); + + __CCTERC20Module_init_unchained(ERC20Attributes_.name, ERC20Attributes_.symbol); + + __CCTExtraInformationModule_init_unchained(ExtraInformationModuleAttributes_.tokenId, ExtraInformationModuleAttributes_.terms, ExtraInformationModuleAttributes_.information); + __CCTSnapshotEngineModule_init_unchained(snapshotEngine_); + __CCTDocumentEngineModule_init_unchained(documentEngine_); + } + + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function supportsInterface(bytes4 _interfaceId) public view virtual override( + CCTCrossChainModule, + PolicyProtected + ) returns (bool) { + return + CCTCrossChainModule.supportsInterface(_interfaceId) || + PolicyProtected.supportsInterface(_interfaceId); + } + + + + /*////////////////////////////////////////////////////////////// + Functions requiring several modules + //////////////////////////////////////////////////////////////*/ + + /** + * @inheritdoc IBurnMintERC20 + * @dev + * - The access control is managed by the functions burn (ERC20BurnModule) and mint (ERC20MintModule) + * - Input validation is also managed by the functions burn and mint + * - You can mint more tokens than burnt + */ + function burnAndMint(address from, address to, uint256 amountToBurn, uint256 amountToMint, bytes calldata data) public virtual override(IBurnMintERC20) { + burn(from, amountToBurn, data); + mint(to, amountToMint, data); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /** + * @dev we don't check the transfer validity here + */ + function _update( + address from, + address to, + uint256 amount + ) internal virtual override(ERC20Upgradeable) { + // We check here the address of the snapshotEngine here because we don't want to read balance/totalSupply if there is no Snapshot Engine + ISnapshotEngine snapshotEngineLocal = snapshotEngine(); + + if(address(snapshotEngineLocal) != address(0)){ + uint256 fromBalanceBefore = balanceOf(from); + uint256 toBalanceBefore = balanceOf(to); + uint256 totalSupplyBefore = totalSupply(); + + // We perform the update here (CEI pattern) + ERC20Upgradeable._update(from, to, amount); + + // Required to use the balance before the update + snapshotEngineLocal.operateOnTransfer(from, to, fromBalanceBefore, toBalanceBefore, totalSupplyBefore); + } else { + // Update without snapshot call + ERC20Upgradeable._update(from, to, amount); + } + } + +} \ No newline at end of file diff --git a/contracts/modules/standard/engines/CCTDocumentEngineModule.sol b/contracts/modules/standard/engines/CCTDocumentEngineModule.sol new file mode 100644 index 0000000..b3d55f3 --- /dev/null +++ b/contracts/modules/standard/engines/CCTDocumentEngineModule.sol @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import {IERC1643, IDocumentEngine} from "../../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol"; +import {IDocumentEngineModule} from "../../../../submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol"; +import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; + +/** + * @title Document module (ERC1643) + * @dev + * + * Retrieve documents from a documentEngine + */ +abstract contract CCTDocumentEngineModule is Initializable, IDocumentEngineModule, PolicyProtected { + + // keccak256(abi.encode(uint256(keccak256("CMTAT.storage.DocumentEngineModule")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant DocumentEngineModuleStorageLocation = 0xbd0905600c85d707dc53eba2e146c1c2527cd32ac3ff6b86846155151b3e2700; + /* ==== ERC-7201 State Variables === */ + struct DocumentEngineModuleStorage { + IERC1643 _documentEngine; + } + + /* ============ Initializer Function ============ */ + /** + * @dev + * + * - set a DocumentEngine if address different from zero + * + */ + function __CCTDocumentEngineModule_init_unchained(IERC1643 documentEngine_) + internal virtual onlyInitializing { + if (address(documentEngine_) != address (0)) { + DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage(); + _setDocumentEngine($, documentEngine_); + } + } + + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + /** + * @inheritdoc IDocumentEngineModule + */ + function documentEngine() public view virtual override(IDocumentEngineModule) returns (IERC1643 documentEngine_) { + DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage(); + return $._documentEngine; + } + + /** + * @inheritdoc IERC1643 + */ + function getDocument(string memory name) public view virtual override(IERC1643) returns (Document memory document){ + DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage(); + if(address($._documentEngine) != address(0)){ + return $._documentEngine.getDocument(name); + } else{ + return Document("", 0x0, 0); + } + } + + /** + * @inheritdoc IERC1643 + */ + function getAllDocuments() public view virtual override(IERC1643) returns (string[] memory documentNames_){ + DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage(); + if(address($._documentEngine) != address(0)){ + documentNames_ = $._documentEngine.getAllDocuments(); + } + } + + /* ============ Restricted Functions ============ */ + + /** + * @inheritdoc IDocumentEngineModule + */ + function setDocumentEngine( + IERC1643 documentEngine_ + ) public virtual override(IDocumentEngineModule) runPolicy { + DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage(); + require($._documentEngine != documentEngine_, CMTAT_DocumentEngineModule_SameValue()); + _setDocumentEngine($, documentEngine_); + } + + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _setDocumentEngine( + DocumentEngineModuleStorage storage $, IERC1643 documentEngine_ + ) internal virtual { + $._documentEngine = documentEngine_; + emit DocumentEngine(documentEngine_); + } + + /* ============ ERC-7201 ============ */ + function _getDocumentEngineModuleStorage() private pure returns (DocumentEngineModuleStorage storage $) { + assembly { + $.slot := DocumentEngineModuleStorageLocation + } + } +} diff --git a/contracts/modules/standard/engines/CCTSnapshotEngineModule.sol b/contracts/modules/standard/engines/CCTSnapshotEngineModule.sol new file mode 100644 index 0000000..345d23c --- /dev/null +++ b/contracts/modules/standard/engines/CCTSnapshotEngineModule.sol @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import {ISnapshotEngine, ISnapshotEngineModule} from "../../../../submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol"; +import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; + + +abstract contract CCTSnapshotEngineModule is Initializable, ISnapshotEngineModule, PolicyProtected { + + /* ============ ERC-7201 ============ */ + // keccak256(abi.encode(uint256(keccak256("CMTAT.storage.SnapshotEngineModule")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant SnapshotEngineModuleStorageLocation = 0x1387b97dfab601d3023cb57858a6be29329babb05c85597ddbe4926c1193a900; + /* ==== ERC-7201 State Variables === */ + struct SnapshotEngineModuleStorage { + ISnapshotEngine _snapshotEngine; + } + + /* ============ Initializer Function ============ */ + /** + * @dev + * + * - The grant to the admin role is done by AccessControlDefaultAdminRules + * - The control of the zero address is done by AccessControlDefaultAdminRules + * + */ + function __CCTSnapshotEngineModule_init_unchained(ISnapshotEngine snapshotEngine_) + internal virtual onlyInitializing { + if (address(snapshotEngine_) != address (0)) { + SnapshotEngineModuleStorage storage $ = _getSnapshotEngineModuleStorage(); + _setSnapshotEngine($, snapshotEngine_); + } + } + + + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /* ============ State Restricted Functions ============ */ + /** + * @inheritdoc ISnapshotEngineModule + * @custom:access-control + * - The caller must have the `SNAPSHOOTER_ROLE`. + */ + function setSnapshotEngine( + ISnapshotEngine snapshotEngine_ + ) public virtual override(ISnapshotEngineModule) runPolicy { + SnapshotEngineModuleStorage storage $ = _getSnapshotEngineModuleStorage(); + require($._snapshotEngine != snapshotEngine_, CMTAT_SnapshotModule_SameValue()); + _setSnapshotEngine($, snapshotEngine_); + } + + + /* ============ View functions ============ */ + + /** + * @inheritdoc ISnapshotEngineModule + */ + function snapshotEngine() public view virtual override(ISnapshotEngineModule) returns (ISnapshotEngine) { + SnapshotEngineModuleStorage storage $ = _getSnapshotEngineModuleStorage(); + return $._snapshotEngine; + } + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function _setSnapshotEngine( + SnapshotEngineModuleStorage storage $, ISnapshotEngine snapshotEngine_ + ) internal virtual { + $._snapshotEngine = snapshotEngine_; + emit SnapshotEngine(snapshotEngine_); + } + + /* ============ ERC-7201 ============ */ + function _getSnapshotEngineModuleStorage() private pure returns (SnapshotEngineModuleStorage storage $) { + assembly { + $.slot := SnapshotEngineModuleStorageLocation + } + } + + +} diff --git a/contracts/modules/standard/erc20/CCTBurnModule.sol b/contracts/modules/standard/erc20/CCTBurnModule.sol new file mode 100644 index 0000000..a482b0c --- /dev/null +++ b/contracts/modules/standard/erc20/CCTBurnModule.sol @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {ERC20BurnModuleInternal} from "../../../../submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol"; +import {IBurnBatchERC20} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol"; +import {IERC3643Burn} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol"; +import {IERC7551Burn, IERC5679Burn} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol"; +import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; + + +abstract contract CCTBurnModule is ERC20BurnModuleInternal, IBurnBatchERC20, IERC3643Burn, IERC7551Burn, PolicyProtected { + + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /** + * @dev + * @inheritdoc IERC7551Burn + * @custom:access-control + * - the caller must have the `BURNER_ROLE`. + */ + function burn( + address account, + uint256 value, + bytes calldata data + ) public virtual override(IERC5679Burn) runPolicy { + _burn(account, value, data); + } + + /** + * @inheritdoc IERC3643Burn + * @custom:access-control + * - the caller must have the `BURNER_ROLE`. + */ + function burn( + address account, + uint256 value + ) public virtual override(IERC3643Burn) runPolicy { + _burn(account, value,""); + } + + /** + * + * @inheritdoc IBurnBatchERC20 + * @custom:access-control + * - the caller must have the `BURNER_ROLE`. + */ + function batchBurn( + address[] calldata accounts, + uint256[] calldata values, + bytes memory data + ) public virtual override(IBurnBatchERC20) runPolicy { + _batchBurn(accounts, values); + emit BatchBurn(_msgSender(),accounts, values, data ); + } + + /** + * + * @inheritdoc IERC3643Burn + * @custom:access-control + * - the caller must have the `BURNER_ROLE`. + */ + function batchBurn( + address[] calldata accounts, + uint256[] calldata values + ) public virtual override (IERC3643Burn) runPolicy { + _batchBurn(accounts, values); + emit BatchBurn(_msgSender(),accounts, values, "" ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function _burn( + address account, + uint256 value, + bytes memory data + ) internal virtual { + _burnOverride(account, value); + emit Burn(_msgSender(), account, value, data); + } +} \ No newline at end of file diff --git a/contracts/modules/standard/erc20/CCTERC20Module.sol b/contracts/modules/standard/erc20/CCTERC20Module.sol new file mode 100644 index 0000000..f699e32 --- /dev/null +++ b/contracts/modules/standard/erc20/CCTERC20Module.sol @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + + +import {CCTMintModule} from "./CCTMintModule.sol"; +import {CCTBurnModule} from "./CCTBurnModule.sol"; +import {IERC20Allowance} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol"; +import {IERC20BatchBalance} from "../../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; +import {IERC3643ERC20Base} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol"; +import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; + + +abstract contract CCTERC20Module is CCTMintModule, CCTBurnModule, IERC20Allowance, IERC3643ERC20Base, IERC20BatchBalance { + // This is a placeholder for the actual implementation of the CCTERC20Module. + /* ============ Events ============ */ + event Name(string indexed newNameIndexed, string newName); + event Symbol(string indexed newSymbolIndexed, string newSymbol); + + // Copy from ERC20 as these are private variables and are not inherited + // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ERC20")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 public constant CCTERC20StorageLocation = 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00; + + function _getCCTERC20Storage() private pure returns (ERC20Storage storage $) { + assembly { + $.slot := CCTERC20StorageLocation + } + } + + /* ============ Initializer Function ============ */ + /** + * @dev Initializers: Sets the values for decimals. + * + * this value is immutable: it can only be set once during + * construction/initialization. + */ + function __CCTERC20Module_init_unchained( + string memory name_, + string memory symbol_ + ) internal virtual onlyInitializing { + __ERC20_init_unchained(name_, symbol_); + } + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + + /* ============ Custom functions ============ */ + /* ======== State Functions ======= */ + /** + * @inheritdoc IERC3643ERC20Base + * @dev + */ + function setName(string calldata name_) public virtual override(IERC3643ERC20Base) runPolicy{ + ERC20Storage storage $ = _getCCTERC20Storage(); + $._name = name_; + emit Name(name_, name_); + } + + /** + * @inheritdoc IERC3643ERC20Base + */ + function setSymbol(string calldata symbol_) public virtual override(IERC3643ERC20Base) runPolicy { + ERC20Storage storage $ = _getCCTERC20Storage(); + $._symbol = symbol_; + emit Symbol(symbol_, symbol_); + } + /* ======== View functions ======= */ + /** + * @inheritdoc IERC20BatchBalance + */ + function batchBalanceOf(address[] calldata addresses) public view virtual + override(IERC20BatchBalance) returns(uint256[] memory balances , uint256 totalSupply_) { + balances = new uint256[](addresses.length); + for(uint256 i = 0; i < addresses.length; ++i){ + balances[i] = ERC20Upgradeable.balanceOf(addresses[i]); + } + totalSupply_ = ERC20Upgradeable.totalSupply(); + } +} \ No newline at end of file diff --git a/contracts/modules/standard/erc20/CCTMintModule.sol b/contracts/modules/standard/erc20/CCTMintModule.sol new file mode 100644 index 0000000..25abc92 --- /dev/null +++ b/contracts/modules/standard/erc20/CCTMintModule.sol @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {ERC20MintModuleInternal} from "../../../../submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol"; +import {IMintBatchERC20Event} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol"; +import {IERC3643Mint, IERC3643BatchTransfer} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol"; +import {IERC7551Mint, IERC5679Mint} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol"; +import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; + + +abstract contract CCTMintModule is ERC20MintModuleInternal, IERC3643Mint, IERC3643BatchTransfer, + IERC7551Mint, IMintBatchERC20Event, PolicyProtected { + + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + /** + * @inheritdoc IERC5679Mint + * @custom:devimpl + * Requirements: + * - `account` cannot be the zero address (check made by _mint). + * @custom:access-control + * - the caller must have the `MINTER_ROLE`. + */ + function mint(address account, uint256 value, bytes calldata data) public virtual override(IERC5679Mint) runPolicy { + _mint(account, value, data); + } + + /** + * @inheritdoc IERC3643Mint + * @dev + + * Emits a {Mint} event. + * Emits a {Transfer} event with `from` set to the zero address (emits inside _mint). + * + * Requirements: + * - `account` cannot be the zero address (check made by _mint). + * @custom:access-control + * - the caller must have the `MINTER_ROLE`. + */ + function mint(address account, uint256 value) public virtual override(IERC3643Mint) runPolicy { + _mint(account, value, ""); + } + + /** + * + * @inheritdoc IERC3643Mint + * @custom:devimpl + * Requirement + * - `accounts` cannot contain a zero address (check made by _mint). + * @custom:access-control + * - the caller must have the `MINTER_ROLE`. + */ + function batchMint( + address[] calldata accounts, + uint256[] calldata values + ) public virtual override(IERC3643Mint) runPolicy { + _batchMint(accounts, values); + emit BatchMint(_msgSender(), accounts, values); + } + + /** + * @inheritdoc IERC3643BatchTransfer + * @custom:access-control + * - the caller must have the `MINTER_ROLE`. + */ + function batchTransfer( + address[] calldata tos, + uint256[] calldata values + ) public virtual override(IERC3643BatchTransfer) runPolicy returns (bool success_) { + return _batchTransfer(tos, values); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _mint(address account, uint256 value, bytes memory data) internal virtual { + _mintOverride(account, value); + emit Mint(_msgSender(), account, value, data); + } + +} \ No newline at end of file diff --git a/contracts/modules/standard/extensions/CCTCrossChainModule.sol b/contracts/modules/standard/extensions/CCTCrossChainModule.sol new file mode 100644 index 0000000..f69f632 --- /dev/null +++ b/contracts/modules/standard/extensions/CCTCrossChainModule.sol @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + + +import {IERC7802} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol"; +import {IBurnFromERC20} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol"; +import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; +import {CCTModule} from "./CCTModule.sol"; +import {IERC20Allowance} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol"; + + +/** + * @title ERC20CrossChainModule (ERC-7802) + * @dev + * + * Contains all mint and burn functions, inherits from ERC-20 + */ +abstract contract CCTCrossChainModule is ERC20Upgradeable, CCTModule, IERC7802, IBurnFromERC20 { + + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /** + * @inheritdoc IERC7802 + * @dev + * Don't emit the same event as configured in the ERC20MintModule + * @custom:access-control + * Protected by the modifier onlyTokenBridge. + */ + function crosschainMint(address to, uint256 value) public virtual override(IERC7802) runPolicy { + _mint(to, value); + emit CrosschainMint(to, value,_msgSender()); + } + + /** + * @inheritdoc IERC7802 + * @dev + * Don't emit the same event as configured in the ERC20BurnModule + * Don't require allowance to follow Optimism Superchain ERC20 and OpenZeppelin implementation + * @custom:access-control + * - Protected by the modifier onlyTokenBridge. + */ + function crosschainBurn(address from, uint256 value) public virtual override(IERC7802) runPolicy { + _burn(from, value); + emit CrosschainBurn(from, value, _msgSender()); + } + + /** + * @inheritdoc IBurnFromERC20 + * @custom:access-control + * - Protected by the modifier onlyBurnerFrom. + */ + function burnFrom(address account, uint256 value) public virtual override(IBurnFromERC20) runPolicy { + address sender = _msgSender(); + _burnFrom(sender, account, value); + } + + /** + * @inheritdoc IBurnFromERC20 + * @custom:access-control + * - Protected by the modifier onlyBurnerFrom + */ + function burn( + uint256 value + ) public virtual override(IBurnFromERC20) runPolicy{ + // Don't emit Spend event because allowance is not used here + address sender = _msgSender(); + // burn from itself + _burn(sender, sender, value); + } + + + + /* ============ View functions ============ */ + function supportsInterface(bytes4 _interfaceId) public view virtual override(IERC165, PolicyProtected) returns (bool) { + return _interfaceId == type(IERC7802).interfaceId || PolicyProtected.supportsInterface(_interfaceId); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _burnFrom(address sender, address account, uint256 value) internal virtual { + // Allowance check and spend + ERC20Upgradeable._spendAllowance(account, sender, value ); + // Specific event for the spend operation, same as transferFrom (ERC20BaseModule) + emit IERC20Allowance.Spend(account, sender, value); + _burn(sender, account, value); + } + + function _burn( + address sender, address account, uint256 value + ) internal virtual { + // burn + _burn(account, value); + // Specific event to burnFrom and self-burn (burn) + // Don't emit CrossChainBurn because this function burn is not part of the IERC7802 interface + emit BurnFrom(sender, account, sender, value); + } +} \ No newline at end of file diff --git a/contracts/modules/standard/extensions/CCTEnforcementModule.sol b/contracts/modules/standard/extensions/CCTEnforcementModule.sol new file mode 100644 index 0000000..53f6d8b --- /dev/null +++ b/contracts/modules/standard/extensions/CCTEnforcementModule.sol @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {ERC20EnforcementModuleInternal} from "../../../../submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol"; +import {IERC3643ERC20Enforcement} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol"; +import {IERC7551ERC20Enforcement, IERC7551ERC20EnforcementEvent} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol"; +import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; + + +abstract contract CCTEnforcementModule is ERC20EnforcementModuleInternal, IERC7551ERC20Enforcement, IERC3643ERC20Enforcement, PolicyProtected { + + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /** + * + * @inheritdoc IERC7551ERC20Enforcement + */ + function getFrozenTokens(address account) public override(IERC7551ERC20Enforcement, IERC3643ERC20Enforcement) + view virtual returns (uint256 frozenBalance_) { + return _getFrozenTokens(account); + } + + /** + * + * @inheritdoc IERC7551ERC20Enforcement + */ + function getActiveBalanceOf(address account) public view override(IERC7551ERC20Enforcement) returns (uint256 activeBalance_) { + return _getActiveBalanceOf(account); + } + + /* ============ ERC-20 Enforcement ============ */ + /** + * + * @inheritdoc IERC7551ERC20Enforcement + * @custom:access-control + * - the caller must have the `DEFAULT_ADMIN_ROLE`. + */ + function forcedTransfer(address from, address to, uint256 value, bytes calldata data) + public virtual override(IERC7551ERC20Enforcement) runPolicy returns (bool) { + _forcedTransfer(from, to, value, data); + return true; + } + + /** + * + * @inheritdoc IERC3643ERC20Enforcement + * @custom:access-control + * - the caller must have the `DEFAULT_ADMIN_ROLE`. + */ + function forcedTransfer(address from, address to, uint256 value) + public virtual override(IERC3643ERC20Enforcement) runPolicy returns (bool) { + _forcedTransfer(from, to, value, ""); + return true; + } + + /** + * + * @inheritdoc IERC3643ERC20Enforcement + * @custom:access-control + * - the caller must have the `ERC20ENFORCER_ROLE`. + */ + function freezePartialTokens(address account, uint256 value) + public virtual override(IERC3643ERC20Enforcement) runPolicy { + _freezePartialTokens(account, value, ""); + } + + /** + * + * @inheritdoc IERC3643ERC20Enforcement + * @custom:access-control + * - the caller must have the `ERC20ENFORCER_ROLE`. + */ + function unfreezePartialTokens(address account, uint256 value) + public virtual override(IERC3643ERC20Enforcement) runPolicy { + _unfreezePartialTokens(account, value, ""); + } + + /** + * + * @inheritdoc IERC7551ERC20Enforcement + * @custom:access-control + * - the caller must have the `ERC20ENFORCER_ROLE`. + */ + function freezePartialTokens(address account, uint256 value, bytes calldata data) + public virtual override(IERC7551ERC20Enforcement) runPolicy { + _freezePartialTokens(account, value, data); + } + + /** + * + * @inheritdoc IERC7551ERC20Enforcement + * @custom:access-control + * - the caller must have the `ERC20ENFORCER_ROLE`. + */ + function unfreezePartialTokens(address account, uint256 value, bytes calldata data) + public virtual override(IERC7551ERC20Enforcement) runPolicy { + _unfreezePartialTokens(account, value, data); + } + +} diff --git a/contracts/modules/standard/extensions/CCTExtraInformationModule.sol b/contracts/modules/standard/extensions/CCTExtraInformationModule.sol new file mode 100644 index 0000000..0ef7e49 --- /dev/null +++ b/contracts/modules/standard/extensions/CCTExtraInformationModule.sol @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + + +import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import {IERC1643CMTAT, IERC1643} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643CMTAT.sol"; +import {ICMTATBase} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol"; +import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; + + +abstract contract CCTExtraInformationModule is ICMTATBase, PolicyProtected { + + /* ============ ERC-7201 ============ */ + // keccak256(abi.encode(uint256(keccak256("CMTAT.storage.ExtraInformationModule")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant ExtraInformationModuleStorageLocation = 0xd2d5d34c4a4dea00599692d3257c0aebc5e0359176118cd2364ab9b008c2d100; + + /* ==== ERC-7201 State Variables === */ + struct ExtraInformationModuleStorage { + string _tokenId; + CMTATTerms _terms; + string _information; + } + + /* ============ Initializer Function ============ */ + /** + * @dev Sets the values for {tokenId}, {terms_} and {information}. + * + */ + function __CCTExtraInformationModule_init_unchained( + string memory tokenId_, + IERC1643CMTAT.DocumentInfo memory terms_, + string memory information_ + ) internal virtual onlyInitializing { + ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); + // tokenId + _setTokenId($, tokenId_); + // Terms + _setTerms($, terms_); + // Information + _setInformation($, information_); + } + + /*////////////////////////////////////////////////////////////// + PUBLIC/EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /* ============ Restricted Functions ============ */ + + /** + * @dev the tokenId will be changed even if the new value is the same as the current one + * @custom:access-control + * - the caller must have the `EXTRA_INFORMATION_ROLE`. + */ + function setTokenId( + string calldata tokenId_ + ) public virtual override(ICMTATBase) runPolicy { + ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); + _setTokenId($, tokenId_); + } + + /** + * @inheritdoc ICMTATBase + * @dev The terms will be changed even if the new value is the same as the current one + * @custom:access-control + * - the caller must have the `EXTRA_INFORMATION_ROLE`. + */ + function setTerms(IERC1643CMTAT.DocumentInfo calldata terms_) public virtual override(ICMTATBase) runPolicy { + _setTerms(terms_); + } + + /** + * @inheritdoc ICMTATBase + * @dev The information will be changed even if the new value is the same as the current one + * @custom:access-control + * - the caller must have the `EXTRA_INFORMATION_ROLE`. + */ + + function setInformation( + string calldata information_ + ) public virtual runPolicy { + ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); + _setInformation($, information_); + } + + /* ============ View functions ============ */ + /** + * @inheritdoc ICMTATBase + */ + function tokenId() public view virtual override(ICMTATBase) returns (string memory tokenId_) { + ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); + return $._tokenId; + } + + /** + * @inheritdoc ICMTATBase + */ + function terms() public view virtual override(ICMTATBase) returns (CMTATTerms memory terms_) { + ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); + return $._terms; + } + + /** + * @inheritdoc ICMTATBase + */ + function information() public view virtual override(ICMTATBase) returns (string memory information_) { + ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); + return $._information; + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _setTerms(IERC1643CMTAT.DocumentInfo memory terms_) internal{ + ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); + _setTerms($, terms_); + } + + function _setTokenId( + ExtraInformationModuleStorage storage $, string memory tokenId_ + ) internal virtual { + $._tokenId = tokenId_; + emit TokenId(tokenId_, tokenId_); + } + + function _setTerms(ExtraInformationModuleStorage storage $, IERC1643CMTAT.DocumentInfo memory terms_) internal virtual { + // Terms/Document name + $._terms.name = terms_.name; + // Document + $._terms.doc.documentHash = terms_.documentHash; + $._terms.doc.uri = terms_.uri; + $._terms.doc.lastModified = block.timestamp; + // Event + emit Terms($._terms); + } + + function _setInformation(ExtraInformationModuleStorage storage $, string memory information_) internal virtual { + $._information = information_; + emit Information(information_); + } + + /* ============ ERC-7201 ============ */ + function _getExtraInformationModuleStorage() private pure returns (ExtraInformationModuleStorage storage $) { + assembly { + $.slot := ExtraInformationModuleStorageLocation + } + } +} diff --git a/contracts/modules/standard/extensions/CCTModule.sol b/contracts/modules/standard/extensions/CCTModule.sol new file mode 100644 index 0000000..3c5a255 --- /dev/null +++ b/contracts/modules/standard/extensions/CCTModule.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.20; + + +import {IGetCCIPAdmin} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol"; +import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; + + +/** + * @title Chainlink CCT specific functions + * Implements CCT specific functions to make CMTAT compatible with Chainlink CCIP (CCT standard) + * + */ +abstract contract CCTModule is IGetCCIPAdmin, PolicyProtected { + /* ============ Error ============ */ + error CMTAT_CCIPModule_SameValue(); + // keccak256(abi.encode(uint256(keccak256("CMTAT.storage.CCIPModule")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant CCIPModuleStorageLocation = 0x364fbfd89c0eee55bbc8dd10b1a9bf3e04fba9f3ee606f4c79a82f9941ad7a00; + + /* ==== ERC-7201 State Variables === */ + struct CCIPModuleStorage { + /** + * @dev the CCIPAdmin can be used to register with the CCIP token admin registry, but has no other special powers, + * and can only be transferred by calling setCCIPAdmin. + */ + address s_ccipAdmin; + } + + /** + * @notice Transfers the CCIPAdmin role to a new address + * @dev only authorised addresses (onlyCCIPSetAdmin) can call this function, NOT the current ccipAdmin, and 1-step ownership transfer is used. + * @param newAdmin The address to transfer the CCIPAdmin role to. Setting to address(0) is a valid way to revoke + * the role + */ + function setCCIPAdmin(address newAdmin) public virtual runPolicy { + CCIPModuleStorage storage $ = _getCCIPModuleStorage(); + address currentAdmin = $.s_ccipAdmin; + require(newAdmin != currentAdmin, CMTAT_CCIPModule_SameValue()); + + $.s_ccipAdmin = newAdmin; + + emit CCIPAdminTransferred(currentAdmin, newAdmin); + } + + /** + * Returns the current CCIPAdmin + */ + function getCCIPAdmin() public view virtual returns (address) { + CCIPModuleStorage storage $ = _getCCIPModuleStorage(); + return $.s_ccipAdmin; + } + + /* ============ ERC-7201 ============ */ + function _getCCIPModuleStorage() internal pure returns (CCIPModuleStorage storage $) { + assembly { + $.slot := CCIPModuleStorageLocation + } + } +} diff --git a/hardhat.config.js b/hardhat.config.js index b63f0c2..ecbd029 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,6 +1,19 @@ -require("@nomicfoundation/hardhat-toolbox"); +require('@openzeppelin/hardhat-upgrades') /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { - solidity: "0.8.28", + solidity: { + version: "0.8.26", + settings: { + viaIR: true, + optimizer: { + enabled: true, + runs: 1 + } + } + }, + paths: { + sources: "./contracts", + tests: "./test" + }, }; diff --git a/package-lock.json b/package-lock.json index 85e6b22..eb3eeee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,25 @@ "version": "1.0.0", "devDependencies": { "@chainlink/contracts": "1.3.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", + "@nomicfoundation/hardhat-network-helpers": "^1.1.2", "@openzeppelin/contracts": "5.5.0", "@openzeppelin/contracts-upgradeable": "5.5.0", - "hardhat": "^2.27.1" + "@openzeppelin/hardhat-upgrades": "^3.2.0", + "@openzeppelin/upgrades-core": "^1.44.1", + "hardhat": "^2.24.0", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-gas-reporter": "^1.0.9" } }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@arbitrum/nitro-contracts": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-1.1.1.tgz", @@ -72,945 +86,1006 @@ "dev": true, "license": "MIT" }, - "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bytecodealliance/preview2-shim": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz", - "integrity": "sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==", - "dev": true, - "license": "(Apache-2.0 WITH LLVM-exception)", - "optional": true - }, - "node_modules/@chainlink/contracts": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.3.0.tgz", - "integrity": "sha512-Vk93nijTC5iRFW/L6FKUzeMuJy7k5dNzAtqlHpdreqtzL7efO/qXbYCkqjJFNXGurfOXVehHlehFoH4tWvSbfw==", + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@arbitrum/nitro-contracts": "1.1.1", - "@arbitrum/token-bridge-contracts": "1.1.2", - "@changesets/changelog-github": "^0.5.0", - "@changesets/cli": "~2.27.8", - "@eth-optimism/contracts": "0.6.0", - "@openzeppelin/contracts": "4.9.3", - "@openzeppelin/contracts-upgradeable": "4.9.3", - "@scroll-tech/contracts": "0.1.0", - "@zksync/contracts": "git+https://github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9", - "semver": "^7.6.3" + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=18", - "pnpm": ">=9" + "node": ">=16.0.0" } }, - "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", - "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", - "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==", + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/@changesets/apply-release-plan": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.14.tgz", - "integrity": "sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==", + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@changesets/config": "^3.1.2", - "@changesets/get-version-range-type": "^0.4.0", - "@changesets/git": "^3.0.4", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "detect-indent": "^6.0.0", - "fs-extra": "^7.0.1", - "lodash.startcase": "^4.4.0", - "outdent": "^0.5.0", - "prettier": "^2.7.1", - "resolve-from": "^5.0.0", - "semver": "^7.5.3" + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@changesets/assemble-release-plan": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", - "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "semver": "^7.5.3" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@changesets/changelog-git": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", - "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@changesets/types": "^6.1.0" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@changesets/changelog-github": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.5.2.tgz", - "integrity": "sha512-HeGeDl8HaIGj9fQHo/tv5XKQ2SNEi9+9yl1Bss1jttPqeiASRXhfi0A2wv8yFKCp07kR1gpOI5ge6+CWNm1jPw==", + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@changesets/get-github-info": "^0.7.0", - "@changesets/types": "^6.1.0", - "dotenv": "^8.1.0" + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@changesets/cli": { - "version": "2.27.12", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.12.tgz", - "integrity": "sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==", + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@changesets/apply-release-plan": "^7.0.8", - "@changesets/assemble-release-plan": "^6.0.5", - "@changesets/changelog-git": "^0.2.0", - "@changesets/config": "^3.0.5", - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.2", - "@changesets/get-release-plan": "^4.0.6", - "@changesets/git": "^3.0.2", - "@changesets/logger": "^0.1.1", - "@changesets/pre": "^2.0.1", - "@changesets/read": "^0.6.2", - "@changesets/should-skip-package": "^0.1.1", - "@changesets/types": "^6.0.0", - "@changesets/write": "^0.3.2", - "@manypkg/get-packages": "^1.1.3", - "ansi-colors": "^4.1.3", - "ci-info": "^3.7.0", - "enquirer": "^2.4.1", - "external-editor": "^3.1.0", - "fs-extra": "^7.0.1", - "mri": "^1.2.0", - "p-limit": "^2.2.0", - "package-manager-detector": "^0.2.0", - "picocolors": "^1.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "spawndamnit": "^3.0.1", - "term-size": "^2.1.0" + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" }, - "bin": { - "changeset": "bin.js" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@changesets/config": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.2.tgz", - "integrity": "sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==", + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/logger": "^0.1.1", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1", - "micromatch": "^4.0.8" + "tslib": "^2.6.2" } }, - "node_modules/@changesets/errors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", - "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "extendable-error": "^0.1.5" + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@changesets/get-dependents-graph": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", - "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "picocolors": "^1.1.0", - "semver": "^7.5.3" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@changesets/get-github-info": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.7.0.tgz", - "integrity": "sha512-+i67Bmhfj9V4KfDeS1+Tz3iF32btKZB2AAx+cYMqDSRFP7r3/ZdGbjCo+c6qkyViN9ygDuBjzageuPGJtKGe5A==", + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "dataloader": "^1.4.0", - "node-fetch": "^2.5.0" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@changesets/get-release-plan": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.14.tgz", - "integrity": "sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==", + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@changesets/assemble-release-plan": "^6.0.9", - "@changesets/config": "^3.1.2", - "@changesets/pre": "^2.0.2", - "@changesets/read": "^0.6.6", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@changesets/get-version-range-type": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", - "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/@changesets/git": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", - "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", + "node_modules/@aws-sdk/client-lambda": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.954.0.tgz", + "integrity": "sha512-psVZGa+kaTRfU7mPW0mOawPXgHvDOR0VdB/NOourwQ9Ug55HHeDneJ6pt9MvNeE5/AKkwm8avLHTB2W6hYV8ng==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@changesets/errors": "^0.2.0", - "@manypkg/get-packages": "^1.1.3", - "is-subdir": "^1.1.1", - "micromatch": "^4.0.8", - "spawndamnit": "^3.0.1" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/credential-provider-node": "3.954.0", + "@aws-sdk/middleware-host-header": "3.953.0", + "@aws-sdk/middleware-logger": "3.953.0", + "@aws-sdk/middleware-recursion-detection": "3.953.0", + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/region-config-resolver": "3.953.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@aws-sdk/util-user-agent-browser": "3.953.0", + "@aws-sdk/util-user-agent-node": "3.954.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/core": "^3.19.0", + "@smithy/eventstream-serde-browser": "^4.2.6", + "@smithy/eventstream-serde-config-resolver": "^4.3.6", + "@smithy/eventstream-serde-node": "^4.2.6", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/hash-node": "^4.2.6", + "@smithy/invalid-dependency": "^4.2.6", + "@smithy/middleware-content-length": "^4.2.6", + "@smithy/middleware-endpoint": "^4.4.0", + "@smithy/middleware-retry": "^4.4.16", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/middleware-stack": "^4.2.6", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.15", + "@smithy/util-defaults-mode-node": "^4.2.18", + "@smithy/util-endpoints": "^3.2.6", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-retry": "^4.2.6", + "@smithy/util-stream": "^4.5.7", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@changesets/logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", - "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", + "node_modules/@aws-sdk/client-lambda/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.954.0.tgz", + "integrity": "sha512-FVyMAvlFhLK68DHWB1lSkCRTm25xl38bIZDd+jKt5+yDolCrG5+n9aIN8AA8jNO1HNGhZuMjSIQm9r5rGmJH8g==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "picocolors": "^1.1.0" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/middleware-host-header": "3.953.0", + "@aws-sdk/middleware-logger": "3.953.0", + "@aws-sdk/middleware-recursion-detection": "3.953.0", + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/region-config-resolver": "3.953.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@aws-sdk/util-user-agent-browser": "3.953.0", + "@aws-sdk/util-user-agent-node": "3.954.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/core": "^3.19.0", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/hash-node": "^4.2.6", + "@smithy/invalid-dependency": "^4.2.6", + "@smithy/middleware-content-length": "^4.2.6", + "@smithy/middleware-endpoint": "^4.4.0", + "@smithy/middleware-retry": "^4.4.16", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/middleware-stack": "^4.2.6", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.15", + "@smithy/util-defaults-mode-node": "^4.2.18", + "@smithy/util-endpoints": "^3.2.6", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-retry": "^4.2.6", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@changesets/parse": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.2.tgz", - "integrity": "sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==", + "node_modules/@aws-sdk/client-sso/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0", - "js-yaml": "^4.1.1" - } + "license": "0BSD" }, - "node_modules/@changesets/pre": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", - "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", + "node_modules/@aws-sdk/core": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.954.0.tgz", + "integrity": "sha512-5oYO5RP+mvCNXNj8XnF9jZo0EP0LTseYOJVNQYcii1D9DJqzHL3HJWurYh7cXxz7G7eDyvVYA01O9Xpt34TdoA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1" + "@aws-sdk/types": "3.953.0", + "@aws-sdk/xml-builder": "3.953.0", + "@smithy/core": "^3.19.0", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/signature-v4": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@changesets/read": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.6.tgz", - "integrity": "sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==", + "node_modules/@aws-sdk/core/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.954.0.tgz", + "integrity": "sha512-2HNkqBjfsvyoRuPAiFh86JBFMFyaCNhL4VyH6XqwTGKZffjG7hdBmzXPy7AT7G3oFh1k/1Zc27v0qxaKoK7mBA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@changesets/git": "^3.0.4", - "@changesets/logger": "^0.1.1", - "@changesets/parse": "^0.4.2", - "@changesets/types": "^6.1.0", - "fs-extra": "^7.0.1", - "p-filter": "^2.1.0", - "picocolors": "^1.1.0" + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@changesets/should-skip-package": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", - "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", + "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.954.0.tgz", + "integrity": "sha512-CrWD5300+NE1OYRnSVDxoG7G0b5cLIZb7yp+rNQ5Jq/kqnTmyJXpVAsivq+bQIDaGzPXhadzpAMIoo7K/aHaag==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/util-stream": "^4.5.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@changesets/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", - "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", + "node_modules/@aws-sdk/credential-provider-http/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/@changesets/write": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.2.tgz", - "integrity": "sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==", + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.954.0.tgz", + "integrity": "sha512-WAFD8pVwRSoBsuXcoD+s/hrdsP9Z0PNUedSgkOGExuJVAabpM2cIIMzYNsdHio9XFZUSqHkv8mF5mQXuIZvuzg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@changesets/types": "^6.0.0", - "fs-extra": "^7.0.1", - "human-id": "^1.0.2", - "prettier": "^2.7.1" + "@aws-sdk/core": "3.954.0", + "@aws-sdk/credential-provider-env": "3.954.0", + "@aws-sdk/credential-provider-http": "3.954.0", + "@aws-sdk/credential-provider-login": "3.954.0", + "@aws-sdk/credential-provider-process": "3.954.0", + "@aws-sdk/credential-provider-sso": "3.954.0", + "@aws-sdk/credential-provider-web-identity": "3.954.0", + "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/credential-provider-imds": "^4.2.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@eth-optimism/contracts": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", - "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.954.0.tgz", + "integrity": "sha512-EYqaBWwdVbVK7prmsmgTWLPptoWREplPkFMFscOpVmseDvf/0IjYNbNLLtfuhy/6L7ZBGI9wat2k4u0MRivvxA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@eth-optimism/core-utils": "0.12.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0" + "@aws-sdk/core": "3.954.0", + "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "ethers": "^5" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@eth-optimism/core-utils": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", - "integrity": "sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==", + "node_modules/@aws-sdk/credential-provider-login/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.954.0.tgz", + "integrity": "sha512-UPBjw7Lnly5i+/rES8Z5U+nPaumzEUYOE/wrHkxyH6JjwFWn8w7R07fE5Z5cgYlIq1U1lQ7sxYwB3wHPpQ65Aw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bufio": "^1.0.7", - "chai": "^4.3.4" + "@aws-sdk/credential-provider-env": "3.954.0", + "@aws-sdk/credential-provider-http": "3.954.0", + "@aws-sdk/credential-provider-ini": "3.954.0", + "@aws-sdk/credential-provider-process": "3.954.0", + "@aws-sdk/credential-provider-sso": "3.954.0", + "@aws-sdk/credential-provider-web-identity": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/credential-provider-imds": "^4.2.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethereumjs/rlp": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", - "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp.cjs" + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.954.0.tgz", + "integrity": "sha512-Y1/0O2LgbKM8iIgcVj/GNEQW6p90LVTCOzF2CI1pouoKqxmZ/1F7F66WHoa6XUOfKaCRj/R6nuMR3om9ThaM5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=18" + "node": ">=18.0.0" } }, - "node_modules/@ethereumjs/util": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", - "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", + "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MPL-2.0", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.954.0.tgz", + "integrity": "sha512-UXxGfkp/plFRdyidMLvNul5zoLKmHhVQOCrD2OgR/lg9jNqNmJ7abF+Qu8abo902iDkhU21Qj4M398cx6l8Kng==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethereumjs/rlp": "^5.0.2", - "ethereum-cryptography": "^2.2.1" + "@aws-sdk/client-sso": "3.954.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/token-providers": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=18" + "node": ">=18.0.0" } }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.954.0.tgz", + "integrity": "sha512-XEyf1T08q1tG4zkTS4Dnf1cAQyrJUo/xlvi6XNpqGhY3bOmKUYE2h/K6eITIdytDL9VuCpWYQ6YRcIVtL29E0w==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@noble/hashes": "1.4.0" + "@aws-sdk/core": "3.954.0", + "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.953.0.tgz", + "integrity": "sha512-jTGhfkONav+r4E6HLOrl5SzBqDmPByUYCkyB/c/3TVb8jX3wAZx8/q9bphKpCh+G5ARi3IdbSisgkZrJYqQ19Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.953.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "node_modules/@aws-sdk/middleware-host-header/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.953.0.tgz", + "integrity": "sha512-PlWdVYgcuptkIC0ZKqVUhWNtSHXJSx7U9V8J7dJjRmsXC40X7zpEycvrkzDMJjeTDGcCceYbyYAg/4X1lkcIMw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" + "@aws-sdk/types": "3.953.0", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/abi": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", - "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "node_modules/@aws-sdk/middleware-logger/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.953.0.tgz", + "integrity": "sha512-cmIJx0gWeesUKK4YwgE+VQL3mpACr3/J24fbwnc1Z5tntC86b+HQFzU5vsBDw6lLwyD46dBgWdsXFh1jL+ZaFw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@aws-sdk/types": "3.953.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.954.0.tgz", + "integrity": "sha512-5PX8JDe3dB2+MqXeGIhmgFnm2rbVsSxhz+Xyuu1oxLtbOn+a9UDA+sNBufEBjt3UxWy5qwEEY1fxdbXXayjlGg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@smithy/core": "^3.19.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "node_modules/@aws-sdk/middleware-user-agent/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" - } + "license": "0BSD" }, - "node_modules/@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "node_modules/@aws-sdk/nested-clients": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.954.0.tgz", + "integrity": "sha512-JLUhf35fTQIDPLk6G5KPggL9tV//Hjhy6+N2zZeis76LuBRNhKDq8z1CFyKhjf00vXi/tDYdn9D7y9emI+5Y/g==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/middleware-host-header": "3.953.0", + "@aws-sdk/middleware-logger": "3.953.0", + "@aws-sdk/middleware-recursion-detection": "3.953.0", + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/region-config-resolver": "3.953.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@aws-sdk/util-user-agent-browser": "3.953.0", + "@aws-sdk/util-user-agent-node": "3.954.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/core": "^3.19.0", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/hash-node": "^4.2.6", + "@smithy/invalid-dependency": "^4.2.6", + "@smithy/middleware-content-length": "^4.2.6", + "@smithy/middleware-endpoint": "^4.4.0", + "@smithy/middleware-retry": "^4.4.16", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/middleware-stack": "^4.2.6", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.15", + "@smithy/util-defaults-mode-node": "^4.2.18", + "@smithy/util-endpoints": "^3.2.6", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-retry": "^4.2.6", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "node_modules/@aws-sdk/nested-clients/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.953.0.tgz", + "integrity": "sha512-5MJgnsc+HLO+le0EK1cy92yrC7kyhGZSpaq8PcQvKs9qtXCXT5Tb6tMdkr5Y07JxYsYOV1omWBynvL6PWh08tQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/bytes": "^5.8.0" + "@aws-sdk/types": "3.953.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/basex": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", - "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "node_modules/@aws-sdk/region-config-resolver/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.954.0.tgz", + "integrity": "sha512-rDyN3oQQKMOJgyQ9/LNbh4fAGAj8ePMGOAQzSP/kyzizmViI6STpBW1o/VRqiTgMNi1bvA9ZasDtfrJqcVt0iA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "@aws-sdk/core": "3.954.0", + "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "node_modules/@aws-sdk/token-providers/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/types": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.953.0.tgz", + "integrity": "sha512-M9Iwg9kTyqTErI0vOTVVpcnTHWzS3VplQppy8MuL02EE+mJ0BIwpWfsaAPQW+/XnVpdNpWZTsHcNE29f1+hR8g==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "node_modules/@aws-sdk/types/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.953.0.tgz", + "integrity": "sha512-rjaS6jrFksopXvNg6YeN+D1lYwhcByORNlFuYesFvaQNtPOufbE5tJL4GJ3TMXyaY0uFR28N5BHHITPyWWfH/g==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "@aws-sdk/types": "3.953.0", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "@smithy/util-endpoints": "^3.2.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/constants": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "node_modules/@aws-sdk/util-endpoints/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.953.0.tgz", + "integrity": "sha512-mPxK+I1LcrgC/RSa3G5AMAn8eN2Ay0VOgw8lSRmV1jCtO+iYvNeCqOdxoJUjOW6I5BA4niIRWqVORuRP07776Q==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/bignumber": "^5.8.0" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/contracts": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", - "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "node_modules/@aws-sdk/util-locate-window/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.953.0.tgz", + "integrity": "sha512-UF5NeqYesWuFao+u7LJvpV1SJCaLml5BtFZKUdTnNNMeN6jvV+dW/eQoFGpXF94RCqguX0XESmRuRRPQp+/rzQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0" + "@aws-sdk/types": "3.953.0", + "@smithy/types": "^4.10.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" } }, - "node_modules/@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.954.0.tgz", + "integrity": "sha512-fB5S5VOu7OFkeNzcblQlez4AjO5hgDFaa7phYt7716YWisY3RjAaQPlxgv+G3GltHHDJIfzEC5aRxdf62B9zMg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@ethersproject/hdnode": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", - "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "node_modules/@aws-sdk/util-user-agent-node/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" + "tslib": "^2.3.1" } }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", - "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } + "license": "0BSD" }, - "node_modules/@ethersproject/keccak256": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "node_modules/@aws-sdk/xml-builder": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.953.0.tgz", + "integrity": "sha512-Zmrj21jQ2OeOJGr9spPiN00aQvXa/WUqRXcTVENhrMt+OFoSOfDFpYhUj9NQ09QmQ8KMWFoWuWW6iKurNqLvAA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" + "@smithy/types": "^4.10.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/logger": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "node_modules/@aws-sdk/xml-builder/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" + "license": "0BSD" }, - "node_modules/@ethersproject/networks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "node_modules/@aws/lambda-invoke-store": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", + "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", - "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/sha2": "^5.8.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@ethersproject/properties": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "node_modules/@bytecodealliance/preview2-shim": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz", + "integrity": "sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.8.0" - } + "license": "(Apache-2.0 WITH LLVM-exception)" }, - "node_modules/@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "node_modules/@chainlink/contracts": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.3.0.tgz", + "integrity": "sha512-Vk93nijTC5iRFW/L6FKUzeMuJy7k5dNzAtqlHpdreqtzL7efO/qXbYCkqjJFNXGurfOXVehHlehFoH4tWvSbfw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" + "@arbitrum/nitro-contracts": "1.1.1", + "@arbitrum/token-bridge-contracts": "1.1.2", + "@changesets/changelog-github": "^0.5.0", + "@changesets/cli": "~2.27.8", + "@eth-optimism/contracts": "0.6.0", + "@openzeppelin/contracts": "4.9.3", + "@openzeppelin/contracts-upgradeable": "4.9.3", + "@scroll-tech/contracts": "0.1.0", + "@zksync/contracts": "git+https://github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9", + "semver": "^7.6.3" + }, + "engines": { + "node": ">=18", + "pnpm": ">=9" } }, - "node_modules/@ethersproject/random": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", - "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "node_modules/@chainlink/contracts/node_modules/@eth-optimism/contracts": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", + "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "@eth-optimism/core-utils": "0.12.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0" + }, + "peerDependencies": { + "ethers": "^5" } }, - "node_modules/@ethersproject/rlp": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } + "license": "MIT" }, - "node_modules/@ethersproject/sha2": { + "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", + "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@chainlink/contracts/node_modules/ethers": { "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", - "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", "dev": true, "funding": [ { @@ -1023,868 +1098,3124 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "node_modules/@changesets/apply-release-plan": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.14.tgz", + "integrity": "sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==", + "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" + "@changesets/config": "^3.1.2", + "@changesets/get-version-range-type": "^0.4.0", + "@changesets/git": "^3.0.4", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" } }, - "node_modules/@ethersproject/solidity": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", - "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "node_modules/@changesets/assemble-release-plan": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", + "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", - "peer": true, "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.3", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "semver": "^7.5.3" } }, - "node_modules/@ethersproject/strings": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "node_modules/@changesets/changelog-git": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", + "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "@changesets/types": "^6.1.0" } }, - "node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "node_modules/@changesets/changelog-github": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.5.2.tgz", + "integrity": "sha512-HeGeDl8HaIGj9fQHo/tv5XKQ2SNEi9+9yl1Bss1jttPqeiASRXhfi0A2wv8yFKCp07kR1gpOI5ge6+CWNm1jPw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" + "@changesets/get-github-info": "^0.7.0", + "@changesets/types": "^6.1.0", + "dotenv": "^8.1.0" } }, - "node_modules/@ethersproject/units": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", - "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "node_modules/@changesets/cli": { + "version": "2.27.12", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.12.tgz", + "integrity": "sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", - "peer": true, "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "@changesets/apply-release-plan": "^7.0.8", + "@changesets/assemble-release-plan": "^6.0.5", + "@changesets/changelog-git": "^0.2.0", + "@changesets/config": "^3.0.5", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/get-release-plan": "^4.0.6", + "@changesets/git": "^3.0.2", + "@changesets/logger": "^0.1.1", + "@changesets/pre": "^2.0.1", + "@changesets/read": "^0.6.2", + "@changesets/should-skip-package": "^0.1.1", + "@changesets/types": "^6.0.0", + "@changesets/write": "^0.3.2", + "@manypkg/get-packages": "^1.1.3", + "ansi-colors": "^4.1.3", + "ci-info": "^3.7.0", + "enquirer": "^2.4.1", + "external-editor": "^3.1.0", + "fs-extra": "^7.0.1", + "mri": "^1.2.0", + "p-limit": "^2.2.0", + "package-manager-detector": "^0.2.0", + "picocolors": "^1.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "spawndamnit": "^3.0.1", + "term-size": "^2.1.0" + }, + "bin": { + "changeset": "bin.js" } }, - "node_modules/@ethersproject/wallet": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", - "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "node_modules/@changesets/config": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.2.tgz", + "integrity": "sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", - "peer": true, "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/json-wallets": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.3", + "@changesets/logger": "^0.1.1", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1", + "micromatch": "^4.0.8" + } + }, + "node_modules/@changesets/errors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", + "dev": true, + "license": "MIT", + "dependencies": { + "extendable-error": "^0.1.5" + } + }, + "node_modules/@changesets/get-dependents-graph": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", + "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "picocolors": "^1.1.0", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/get-github-info": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.7.0.tgz", + "integrity": "sha512-+i67Bmhfj9V4KfDeS1+Tz3iF32btKZB2AAx+cYMqDSRFP7r3/ZdGbjCo+c6qkyViN9ygDuBjzageuPGJtKGe5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dataloader": "^1.4.0", + "node-fetch": "^2.5.0" + } + }, + "node_modules/@changesets/get-release-plan": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.14.tgz", + "integrity": "sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/assemble-release-plan": "^6.0.9", + "@changesets/config": "^3.1.2", + "@changesets/pre": "^2.0.2", + "@changesets/read": "^0.6.6", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/get-version-range-type": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@changesets/git": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", + "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@manypkg/get-packages": "^1.1.3", + "is-subdir": "^1.1.1", + "micromatch": "^4.0.8", + "spawndamnit": "^3.0.1" + } + }, + "node_modules/@changesets/logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", + "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/parse": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.2.tgz", + "integrity": "sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "js-yaml": "^4.1.1" + } + }, + "node_modules/@changesets/pre": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", + "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1" + } + }, + "node_modules/@changesets/read": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.6.tgz", + "integrity": "sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/git": "^3.0.4", + "@changesets/logger": "^0.1.1", + "@changesets/parse": "^0.4.2", + "@changesets/types": "^6.1.0", + "fs-extra": "^7.0.1", + "p-filter": "^2.1.0", + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/should-skip-package": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", + "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/types": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", + "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@changesets/write": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.2.tgz", + "integrity": "sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.0.0", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "prettier": "^2.7.1" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@eth-optimism/core-utils": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", + "integrity": "sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bufio": "^1.0.7", + "chai": "^4.3.4" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "dev": true, + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/util": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", + "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" + } + }, + "node_modules/@manypkg/find-root/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/find-root/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" + } + }, + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/get-packages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.7.2" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.16.tgz", + "integrity": "sha512-bBL/nHmQwL1WCveALwg01VhJcpVVklJyunG1d/bhJbHgbjzAn6kohVJc7A6gFZegw+Rx38vdxpBkeCDjAEprzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.16", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.16", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.16", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.16", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.16", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.16", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.16" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.16.tgz", + "integrity": "sha512-no/8BPVBzVxDGGbDba0zsAxQmVNIq6SLjKzzhCxVKt4tatArXa6+24mr4jXJEmhVBvTNpQsNBO+MMpuEDVaTzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.16.tgz", + "integrity": "sha512-tf36YbcC6po3XYRbi+v0gjwzqg1MvyRqVUujNMXPHgjNWATXNRNOLyjwt2qDn+RD15qtzk70SHVnz9n9mPWzwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.16.tgz", + "integrity": "sha512-Kr6t9icKSaKtPVbb0TjUcbn3XHqXOGIn+KjKKSSpm6542OkL0HyOi06amh6/8CNke9Gf6Lwion8UJ0aGQhnFwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.16.tgz", + "integrity": "sha512-HaStgfxctSg5PYF+6ooDICL1O59KrgM4XEUsIqoRrjrQax9HnMBXcB8eAj+0O52FWiO9FlchBni2dzh4RjQR2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.16.tgz", + "integrity": "sha512-8JPTxEZkwOPTgnN4uTWut9ze9R8rp7+T4IfmsKK9i+lDtdbJIxkrFY275YHG2BEYLd7Y5jTa/I4nC74ZpTAvpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.16.tgz", + "integrity": "sha512-KugTrq3iHukbG64DuCYg8uPgiBtrrtX4oZSLba5sjocp0Ul6WWI1FeP1Qule+vClUrHSpJ+wR1G6SE7G0lyS/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.12.0-next.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.16.tgz", + "integrity": "sha512-Idy0ZjurxElfSmepUKXh6QdptLbW5vUNeIaydvqNogWoTbkJIM6miqZd9lXUy1TYxY7G4Rx5O50c52xc4pFwXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.0.tgz", + "integrity": "sha512-GPhBNafh1fCnVD9Y7BYvoLnblnvfcq3j8YDbO1gGe/1nOFWzGmV7gFu5DkwFXF+IpYsS+t96o9qc/mPu3V3Vfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.1.0", + "chai": "^4.2.0", + "ethers": "^6.14.0", + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.2.tgz", + "integrity": "sha512-7xEaz2X8p47qWIAqtV2z03MmusheHm8bvY2mDlxo9JiT2BgSx59GSdv5+mzwOvsuKDbTij7oqDnwFyYOlHREEQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.14.0", + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz", + "integrity": "sha512-p7HaUVDbLj7ikFivQVNhnfMHUBgiHYMwQWvGn9AriieuopGOELIrwj2KjyM2a6z70zai5YKO264Vwz+3UFJZPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ethereumjs-util": "^7.1.4" + }, + "peerDependencies": { + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.3.tgz", + "integrity": "sha512-danbGjPp2WBhLkJdQy9/ARM3WQIK+7vwzE0urNem1qZJjh9f54Kf5f1xuQv8DvqewUAkuPxVt/7q4Grz5WjqSg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.1.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@nomicfoundation/slang": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.18.3.tgz", + "integrity": "sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bytecodealliance/preview2-shim": "0.17.0" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@offchainlabs/upgrade-executor": { + "version": "1.1.0-beta.0", + "resolved": "https://registry.npmjs.org/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz", + "integrity": "sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw==", + "dev": true, + "license": "Apache 2.0", + "dependencies": { + "@openzeppelin/contracts": "4.7.3", + "@openzeppelin/contracts-upgradeable": "4.7.3" + } + }, + "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", + "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@openzeppelin/contracts": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.5.0.tgz", + "integrity": "sha512-R8hq4zmKKWP2c7OxeRgAcjZwvF5W0Qq2OIX7degrtdM52Q9xYr4MLJdUAVPKGUewNJ1qo+M6YiZLLnNUnjP/gg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.5.0.tgz", + "integrity": "sha512-Va5hKG5oaK0EE5bXTVWugcGimMHazxL+SL523dH6WVbGiuLXwuWr9oxtLyPHQSVGtgmlIgtKNR5V+OUpCIUwFQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@openzeppelin/contracts": "5.5.0" + } + }, + "node_modules/@openzeppelin/defender-sdk-base-client": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-2.7.0.tgz", + "integrity": "sha512-J5IpvbFfdIJM4IadBcXfhCXVdX2yEpaZtRR1ecq87d8CdkmmEpniYfef/yVlG98yekvu125LaIRg0yXQOt9Bdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-lambda": "^3.563.0", + "amazon-cognito-identity-js": "^6.3.6", + "async-retry": "^1.3.3" + } + }, + "node_modules/@openzeppelin/defender-sdk-deploy-client": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-2.7.0.tgz", + "integrity": "sha512-YOHZmnHmM1y6uSqXWGfk2/5/ae4zZJE6xG92yFEAIOy8vqh1dxznWMsoCcAXRXTCWc8RdCDpFdMfEy4SBTyYtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@openzeppelin/defender-sdk-base-client": "^2.7.0", + "axios": "^1.7.4", + "lodash": "^4.17.21" + } + }, + "node_modules/@openzeppelin/defender-sdk-network-client": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-2.7.0.tgz", + "integrity": "sha512-4CYWPa9+kSjojE5KS7kRmP161qsBATdp97TCrzyDdGoVahj0GyqgafRL9AAjm0eHZOM1c7EIYEpbvYRtFi8vyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@openzeppelin/defender-sdk-base-client": "^2.7.0", + "axios": "^1.7.4", + "lodash": "^4.17.21" + } + }, + "node_modules/@openzeppelin/hardhat-upgrades": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.9.1.tgz", + "integrity": "sha512-pSDjlOnIpP+PqaJVe144dK6VVKZw2v6YQusyt0OOLiCsl+WUzfo4D0kylax7zjrOxqy41EK2ipQeIF4T+cCn2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@openzeppelin/defender-sdk-base-client": "^2.1.0", + "@openzeppelin/defender-sdk-deploy-client": "^2.1.0", + "@openzeppelin/defender-sdk-network-client": "^2.1.0", + "@openzeppelin/upgrades-core": "^1.41.0", + "chalk": "^4.1.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.1.5", + "proper-lockfile": "^4.1.1", + "undici": "^6.11.1" + }, + "bin": { + "migrate-oz-cli-project": "dist/scripts/migrate-oz-cli-project.js" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.6", + "@nomicfoundation/hardhat-verify": "^2.0.14", + "ethers": "^6.6.0", + "hardhat": "^2.24.1" + }, + "peerDependenciesMeta": { + "@nomicfoundation/hardhat-verify": { + "optional": true + } + } + }, + "node_modules/@openzeppelin/hardhat-upgrades/node_modules/undici": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", + "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/@openzeppelin/upgrades-core": { + "version": "1.44.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.44.2.tgz", + "integrity": "sha512-m6iorjyhPK9ow5/trNs7qsBC/SOzJCO51pvvAF2W9nOiZ1t0RtCd+rlRmRmlWTv4M33V0wzIUeamJ2BPbzgUXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/slang": "^0.18.3", + "bignumber.js": "^9.1.2", + "cbor": "^10.0.0", + "chalk": "^4.1.0", + "compare-versions": "^6.0.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.0.3", + "minimatch": "^9.0.5", + "minimist": "^1.2.7", + "proper-lockfile": "^4.1.1", + "solidity-ast": "^0.4.60" + }, + "bin": { + "openzeppelin-upgrades-core": "dist/cli/cli.js" + } + }, + "node_modules/@scroll-tech/contracts": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@scroll-tech/contracts/-/contracts-0.1.0.tgz", + "integrity": "sha512-aBbDOc3WB/WveZdpJYcrfvMYMz7ZTEiW8M9XMJLba8p9FAR5KGYB/cV+8+EUsq3MKt7C1BfR+WnXoTVdvwIY6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.6.tgz", + "integrity": "sha512-P7JD4J+wxHMpGxqIg6SHno2tPkZbBUBLbPpR5/T1DEUvw/mEaINBMaPFZNM7lA+ToSCZ36j6nMHa+5kej+fhGg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/abort-controller/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@smithy/config-resolver": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.4.tgz", + "integrity": "sha512-s3U5ChS21DwU54kMmZ0UJumoS5cg0+rGVZvN6f5Lp6EbAVi0ZyP+qDSHdewfmXKUgNK1j3z45JyzulkDukrjAA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.6", + "@smithy/types": "^4.10.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.6", + "@smithy/util-middleware": "^4.2.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@smithy/core": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.19.0.tgz", + "integrity": "sha512-Y9oHXpBcXQgYHOcAEmxjkDilUbSTkgKjoHYed3WaYUH8jngq8lPWDBSpjHblJ9uOgBdy5mh3pzebrScDdYr29w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.7", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-stream": "^4.5.7", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.6.tgz", + "integrity": "sha512-xBmawExyTzOjbhzkZwg+vVm/khg28kG+rj2sbGlULjFd1jI70sv/cbpaR0Ev4Yfd6CpDUDRMe64cTqR//wAOyA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/web": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "node_modules/@smithy/credential-provider-imds/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.6.tgz", + "integrity": "sha512-OZfsI+YRG26XZik/jKMMg37acnBSbUiK/8nETW3uM3mLj+0tMmFXdHQw1e5WEd/IHN8BGOh3te91SNDe2o4RHg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.10.0", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ethersproject/wordlists": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", - "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "node_modules/@smithy/eventstream-codec/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, + "license": "0BSD" + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.6.tgz", + "integrity": "sha512-6OiaAaEbLB6dEkRbQyNzFSJv5HDvly3Mc6q/qcPd2uS/g3szR8wAIkh7UndAFKfMypNSTuZ6eCBmgCLR5LacTg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "@smithy/eventstream-serde-universal": "^4.2.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "node_modules/@smithy/eventstream-serde-browser/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.6.tgz", + "integrity": "sha512-xP5YXbOVRVN8A4pDnSUkEUsL9fYFU6VNhxo8tgr13YnMbf3Pn4xVr+hSyLVjS1Frfi1Uk03ET5Bwml4+0CeYEw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=14" + "node": ">=18.0.0" } }, - "node_modules/@manypkg/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.6.tgz", + "integrity": "sha512-jhH7nJuaOpnTFcuZpWK9dqb6Ge2yGi1okTo0W6wkJrfwAm2vwmO74tF1v07JmrSyHBcKLQATEexclJw9K1Vj7w==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "^7.5.5", - "@types/node": "^12.7.1", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" + "@smithy/eventstream-serde-universal": "^4.2.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@manypkg/find-root/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/@smithy/eventstream-serde-node/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.6.tgz", + "integrity": "sha512-olIfZ230B64TvPD6b0tPvrEp2eB0FkyL3KvDlqF4RVmIc/kn3orzXnV6DTQdOOW5UU+M5zKY3/BU47X420/oPw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@smithy/eventstream-codec": "^4.2.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=18.0.0" } }, - "node_modules/@manypkg/get-packages": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "node_modules/@smithy/eventstream-serde-universal/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.7.tgz", + "integrity": "sha512-fcVap4QwqmzQwQK9QU3keeEpCzTjnP9NJ171vI7GnD7nbkAIcP9biZhDUx88uRH9BabSsQDS0unUps88uZvFIQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "^7.5.5", - "@changesets/types": "^4.0.1", - "@manypkg/find-root": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "read-yaml-file": "^1.1.0" + "@smithy/protocol-http": "^5.3.6", + "@smithy/querystring-builder": "^4.2.6", + "@smithy/types": "^4.10.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "node_modules/@smithy/fetch-http-handler/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/@manypkg/get-packages/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/@smithy/hash-node": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.6.tgz", + "integrity": "sha512-k3Dy9VNR37wfMh2/1RHkFf/e0rMyN0pjY0FdyY6ItJRjENYyVPRMwad6ZR1S9HFm6tTuIOd9pqKBmtJ4VHxvxg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@smithy/types": "^4.10.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=18.0.0" } }, - "node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "node_modules/@smithy/hash-node/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.6.tgz", + "integrity": "sha512-E4t/V/q2T46RY21fpfznd1iSLTvCXKNKo4zJ1QuEFN4SE9gKfu2vb6bgq35LpufkQ+SETWIC7ZAf2GGvTlBaMQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@noble/hashes": "1.7.2" + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "node_modules/@smithy/is-array-buffer/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.6.tgz", + "integrity": "sha512-0cjqjyfj+Gls30ntq45SsBtqF3dfJQCeqQPyGz58Pk8OgrAr5YiB7ZvDzjCA94p4r6DCI4qLm7FKobqBjf515w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.0.tgz", + "integrity": "sha512-M6qWfUNny6NFNy8amrCGIb9TfOMUkHVtg9bHtEFGRgfH7A7AtPpn/fcrToGPjVDK1ECuMVvqGQOXcZxmu9K+7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.19.0", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "@smithy/util-middleware": "^4.2.6", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "node_modules/@smithy/middleware-endpoint/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" + "license": "0BSD" }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@smithy/middleware-retry": { + "version": "4.4.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.16.tgz", + "integrity": "sha512-XPpNhNRzm3vhYm7YCsyw3AtmWggJbg1wNGAoqb7NBYr5XA5isMRv14jgbYyUV6IvbTBFZQdf2QpeW43LrRdStQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@smithy/node-config-provider": "^4.3.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/service-error-classification": "^4.2.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-retry": "^4.2.6", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8" + "node": ">=18.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@smithy/middleware-retry/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.7.tgz", + "integrity": "sha512-PFMVHVPgtFECeu4iZ+4SX6VOQT0+dIpm4jSPLLL6JLSkp9RohGqKBKD0cbiXdeIFS08Forp0UHI6kc0gIHenSA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 8" + "node": ">=18.0.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@smithy/middleware-serde/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.6.tgz", + "integrity": "sha512-JSbALU3G+JS4kyBZPqnJ3hxIYwOVRV7r9GNQMS6j5VsQDo5+Es5nddLfr9TQlxZLNHPvKSh+XSB0OuWGfSWFcA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8" + "node": ">=18.0.0" } }, - "node_modules/@nomicfoundation/edr": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.16.tgz", - "integrity": "sha512-bBL/nHmQwL1WCveALwg01VhJcpVVklJyunG1d/bhJbHgbjzAn6kohVJc7A6gFZegw+Rx38vdxpBkeCDjAEprzw==", + "node_modules/@smithy/middleware-stack/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.6.tgz", + "integrity": "sha512-fYEyL59Qe82Ha1p97YQTMEQPJYmBS+ux76foqluaTVWoG9Px5J53w6NvXZNE3wP7lIicLDF7Vj1Em18XTX7fsA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.16", - "@nomicfoundation/edr-darwin-x64": "0.12.0-next.16", - "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.16", - "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.16", - "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.16", - "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.16", - "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.16" + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.6.tgz", + "integrity": "sha512-Gsb9jf4ido5BhPfani4ggyrKDd3ZK+vTFWmUaZeFg5G3E5nhFmqiTzAIbHqmPs1sARuJawDiGMGR/nY+Gw6+aQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/querystring-builder": "^4.2.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 20" + "node": ">=18.0.0" } }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.16.tgz", - "integrity": "sha512-no/8BPVBzVxDGGbDba0zsAxQmVNIq6SLjKzzhCxVKt4tatArXa6+24mr4jXJEmhVBvTNpQsNBO+MMpuEDVaTzQ==", + "node_modules/@smithy/node-http-handler/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } + "license": "0BSD" }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.16.tgz", - "integrity": "sha512-tf36YbcC6po3XYRbi+v0gjwzqg1MvyRqVUujNMXPHgjNWATXNRNOLyjwt2qDn+RD15qtzk70SHVnz9n9mPWzwg==", + "node_modules/@smithy/property-provider": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.6.tgz", + "integrity": "sha512-a/tGSLPtaia2krbRdwR4xbZKO8lU67DjMk/jfY4QKt4PRlKML+2tL/gmAuhNdFDioO6wOq0sXkfnddNFH9mNUA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 20" + "node": ">=18.0.0" } }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.16.tgz", - "integrity": "sha512-Kr6t9icKSaKtPVbb0TjUcbn3XHqXOGIn+KjKKSSpm6542OkL0HyOi06amh6/8CNke9Gf6Lwion8UJ0aGQhnFwA==", + "node_modules/@smithy/property-provider/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } + "license": "0BSD" }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.16.tgz", - "integrity": "sha512-HaStgfxctSg5PYF+6ooDICL1O59KrgM4XEUsIqoRrjrQax9HnMBXcB8eAj+0O52FWiO9FlchBni2dzh4RjQR2g==", + "node_modules/@smithy/protocol-http": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.6.tgz", + "integrity": "sha512-qLRZzP2+PqhE3OSwvY2jpBbP0WKTZ9opTsn+6IWYI0SKVpbG+imcfNxXPq9fj5XeaUTr7odpsNpK6dmoiM1gJQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 20" + "node": ">=18.0.0" } }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.16.tgz", - "integrity": "sha512-8JPTxEZkwOPTgnN4uTWut9ze9R8rp7+T4IfmsKK9i+lDtdbJIxkrFY275YHG2BEYLd7Y5jTa/I4nC74ZpTAvpA==", + "node_modules/@smithy/protocol-http/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } + "license": "0BSD" }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.16.tgz", - "integrity": "sha512-KugTrq3iHukbG64DuCYg8uPgiBtrrtX4oZSLba5sjocp0Ul6WWI1FeP1Qule+vClUrHSpJ+wR1G6SE7G0lyS/Q==", + "node_modules/@smithy/querystring-builder": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.6.tgz", + "integrity": "sha512-MeM9fTAiD3HvoInK/aA8mgJaKQDvm8N0dKy6EiFaCfgpovQr4CaOkJC28XqlSRABM+sHdSQXbC8NZ0DShBMHqg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.10.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 20" + "node": ">=18.0.0" } }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.16.tgz", - "integrity": "sha512-Idy0ZjurxElfSmepUKXh6QdptLbW5vUNeIaydvqNogWoTbkJIM6miqZd9lXUy1TYxY7G4Rx5O50c52xc4pFwXQ==", + "node_modules/@smithy/querystring-builder/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } + "license": "0BSD" }, - "node_modules/@nomicfoundation/slang": { - "version": "0.18.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.18.3.tgz", - "integrity": "sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ==", + "node_modules/@smithy/querystring-parser": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.6.tgz", + "integrity": "sha512-YmWxl32SQRw/kIRccSOxzS/Ib8/b5/f9ex0r5PR40jRJg8X1wgM3KrR2In+8zvOGVhRSXgvyQpw9yOSlmfmSnA==", "dev": true, - "license": "MIT", - "optional": true, + "license": "Apache-2.0", "dependencies": { - "@bytecodealliance/preview2-shim": "0.17.0" + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", - "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "node_modules/@smithy/querystring-parser/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" - } + "license": "0BSD" }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", - "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "node_modules/@smithy/service-error-classification": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.6.tgz", + "integrity": "sha512-Q73XBrzJlGTut2nf5RglSntHKgAG0+KiTJdO5QQblLfr4TdliGwIAha1iZIjwisc3rA5ulzqwwsYC6xrclxVQg==", "dev": true, - "license": "MIT", - "optional": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.10.0" + }, "engines": { - "node": ">= 12" + "node": ">=18.0.0" } }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", - "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.1.tgz", + "integrity": "sha512-tph+oQYPbpN6NamF030hx1gb5YN2Plog+GLaRHpoEDwp8+ZPG26rIJvStG9hkWzN2HBn3HcWg0sHeB0tmkYzqA==", "dev": true, - "license": "MIT", - "optional": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 12" + "node": ">=18.0.0" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", - "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "node_modules/@smithy/shared-ini-file-loader/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } + "license": "0BSD" }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", - "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "node_modules/@smithy/signature-v4": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.6.tgz", + "integrity": "sha512-P1TXDHuQMadTMTOBv4oElZMURU4uyEhxhHfn+qOc2iofW9Rd4sZtBGx58Lzk112rIGVEYZT8eUMK4NftpewpRA==", "dev": true, - "license": "MIT", - "optional": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 12" + "node": ">=18.0.0" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", - "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", + "node_modules/@smithy/signature-v4/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } + "license": "0BSD" }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", - "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", + "node_modules/@smithy/smithy-client": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.1.tgz", + "integrity": "sha512-1ovWdxzYprhq+mWqiGZlt3kF69LJthuQcfY9BIyHx9MywTFKzFapluku1QXoaBB43GCsLDxNqS+1v30ure69AA==", "dev": true, - "license": "MIT", - "optional": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.19.0", + "@smithy/middleware-endpoint": "^4.4.0", + "@smithy/middleware-stack": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "@smithy/util-stream": "^4.5.7", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 12" + "node": ">=18.0.0" } }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", - "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", + "node_modules/@smithy/smithy-client/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "optional": true, + "license": "0BSD" + }, + "node_modules/@smithy/types": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.10.0.tgz", + "integrity": "sha512-K9mY7V/f3Ul+/Gz4LJANZ3vJ/yiBIwCyxe0sPT4vNJK63Srvd+Yk1IzP0t+nE7XFSpIGtzR71yljtnqpUTYFlQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 12" + "node": ">=18.0.0" } }, - "node_modules/@offchainlabs/upgrade-executor": { - "version": "1.1.0-beta.0", - "resolved": "https://registry.npmjs.org/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz", - "integrity": "sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw==", + "node_modules/@smithy/types/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "Apache 2.0", + "license": "0BSD" + }, + "node_modules/@smithy/url-parser": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.6.tgz", + "integrity": "sha512-tVoyzJ2vXp4R3/aeV4EQjBDmCuWxRa8eo3KybL7Xv4wEM16nObYh7H1sNfcuLWHAAAzb0RVyxUz1S3sGj4X+Tg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@openzeppelin/contracts": "4.7.3", - "@openzeppelin/contracts-upgradeable": "4.7.3" + "@smithy/querystring-parser": "^4.2.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", + "node_modules/@smithy/url-parser/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", - "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==", + "node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@openzeppelin/contracts": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.5.0.tgz", - "integrity": "sha512-R8hq4zmKKWP2c7OxeRgAcjZwvF5W0Qq2OIX7degrtdM52Q9xYr4MLJdUAVPKGUewNJ1qo+M6YiZLLnNUnjP/gg==", + "node_modules/@smithy/util-base64/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/@openzeppelin/contracts-upgradeable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.5.0.tgz", - "integrity": "sha512-Va5hKG5oaK0EE5bXTVWugcGimMHazxL+SL523dH6WVbGiuLXwuWr9oxtLyPHQSVGtgmlIgtKNR5V+OUpCIUwFQ==", + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", "dev": true, - "license": "MIT", - "peerDependencies": { - "@openzeppelin/contracts": "5.5.0" + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@openzeppelin/upgrades-core": { - "version": "1.44.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.44.2.tgz", - "integrity": "sha512-m6iorjyhPK9ow5/trNs7qsBC/SOzJCO51pvvAF2W9nOiZ1t0RtCd+rlRmRmlWTv4M33V0wzIUeamJ2BPbzgUXA==", + "node_modules/@smithy/util-body-length-browser/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "optional": true, + "license": "0BSD" + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@nomicfoundation/slang": "^0.18.3", - "bignumber.js": "^9.1.2", - "cbor": "^10.0.0", - "chalk": "^4.1.0", - "compare-versions": "^6.0.0", - "debug": "^4.1.1", - "ethereumjs-util": "^7.0.3", - "minimatch": "^9.0.5", - "minimist": "^1.2.7", - "proper-lockfile": "^4.1.1", - "solidity-ast": "^0.4.60" + "tslib": "^2.6.2" }, - "bin": { - "openzeppelin-upgrades-core": "dist/cli/cli.js" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@scroll-tech/contracts": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@scroll-tech/contracts/-/contracts-0.1.0.tgz", - "integrity": "sha512-aBbDOc3WB/WveZdpJYcrfvMYMz7ZTEiW8M9XMJLba8p9FAR5KGYB/cV+8+EUsq3MKt7C1BfR+WnXoTVdvwIY6w==", + "node_modules/@smithy/util-body-length-node/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "node_modules/@smithy/util-buffer-from/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "tslib": "^2.6.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "node_modules/@smithy/util-config-provider/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.15.tgz", + "integrity": "sha512-LiZQVAg/oO8kueX4c+oMls5njaD2cRLXRfcjlTYjhIqmwHnCwkQO5B3dMQH0c5PACILxGAQf6Mxsq7CjlDc76A==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@noble/hashes": "1.4.0" + "@smithy/property-provider": "^4.2.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" + "license": "0BSD" + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.18", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.18.tgz", + "integrity": "sha512-Kw2J+KzYm9C9Z9nY6+W0tEnoZOofstVCMTshli9jhQbQCy64rueGfKzPfuFBnVUqZD9JobxTh2DzHmPkp/Va/Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.4.4", + "@smithy/credential-provider-imds": "^4.2.6", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@scure/bip32/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } + "license": "0BSD" }, - "node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "node_modules/@smithy/util-endpoints": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.6.tgz", + "integrity": "sha512-v60VNM2+mPvgHCBXEfMCYrQ0RepP6u6xvbAkMenfe4Mi872CqNkJzgcnQL837e8NdeDxBgrWQRTluKq5Lqdhfg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "@smithy/node-config-provider": "^4.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "node_modules/@smithy/util-endpoints/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" + "license": "0BSD" + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@scure/bip39/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "node_modules/@smithy/util-hex-encoding/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } + "license": "0BSD" }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "node_modules/@smithy/util-middleware": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.6.tgz", + "integrity": "sha512-qrvXUkxBSAFomM3/OEMuDVwjh4wtqK8D2uDZPShzIqOylPst6gor2Cdp6+XrH4dyksAWq/bE2aSDYBTTnj0Rxg==", "dev": true, - "license": "BSD-3-Clause", + "license": "Apache-2.0", "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "node_modules/@smithy/util-middleware/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "BSD-3-Clause", + "license": "0BSD" + }, + "node_modules/@smithy/util-retry": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.6.tgz", + "integrity": "sha512-x7CeDQLPQ9cb6xN7fRJEjlP9NyGW/YeXWc4j/RUhg4I+H60F0PEeRc2c/z3rm9zmsdiMFzpV/rT+4UHW6KM1SA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "@smithy/service-error-classification": "^4.2.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "node_modules/@smithy/util-retry/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "BSD-3-Clause", + "license": "0BSD" + }, + "node_modules/@smithy/util-stream": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.7.tgz", + "integrity": "sha512-Uuy4S5Aj4oF6k1z+i2OtIBJUns4mlg29Ph4S+CqjR+f4XXpSFVgTCYLzMszHJTicYDBxKFtwq2/QSEDSS5l02A==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/types": "^4.10.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "node_modules/@smithy/util-stream/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "BSD-3-Clause", + "license": "0BSD" + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "node_modules/@smithy/util-uri-escape/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "MIT", + "license": "0BSD" + }, + "node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "node_modules/@smithy/util-utf8/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "BSD-3-Clause", + "license": "0BSD" + }, + "node_modules/@smithy/util-waiter": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.6.tgz", + "integrity": "sha512-xU9HwUSik9UUCJmm530yvBy0AwlQFICveKmqvaaTukKkXEAhyiBdHtSrhPrH3rH+uz0ykyaE3LdgsX86C6mDCQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "node_modules/@smithy/util-waiter/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "BSD-3-Clause", + "license": "0BSD" + }, + "node_modules/@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, + "node_modules/@smithy/uuid/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@types/bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "version": "24.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.2.tgz", + "integrity": "sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } }, "node_modules/@types/pbkdf2": { "version": "3.1.2", @@ -1892,18 +4223,23 @@ "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/secp256k1": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "@types/node": "*" } @@ -1933,6 +4269,36 @@ ] } }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -1944,9 +4310,9 @@ } }, "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", "dev": true, "license": "MIT", "peer": true @@ -1978,6 +4344,63 @@ "node": ">=8" } }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amazon-cognito-identity-js": { + "version": "6.3.16", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.16.tgz", + "integrity": "sha512-HPGSBGD6Q36t99puWh0LnptxO/4icnk2kqIQ9cTJ2tFQo5NMUnWQIgtrTAk8nm+caqUbjDzXzG56GBjI2tS6jQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "1.2.2", + "buffer": "4.9.2", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + } + }, + "node_modules/amazon-cognito-identity-js/node_modules/@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "node_modules/amazon-cognito-identity-js/node_modules/@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -2040,6 +4463,13 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -2054,6 +4484,15 @@ "node": ">= 8" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2071,6 +4510,23 @@ "node": ">=8" } }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -2081,6 +4537,45 @@ "node": "*" } }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/async-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -2097,7 +4592,6 @@ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -2108,6 +4602,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axios": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2121,11 +4627,31 @@ "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "safe-buffer": "^5.0.1" } }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", @@ -2152,7 +4678,6 @@ "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": "*" } @@ -2175,8 +4700,7 @@ "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/bn.js": { "version": "5.2.2", @@ -2185,6 +4709,13 @@ "dev": true, "license": "MIT" }, + "node_modules/bowser": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", + "dev": true, + "license": "MIT" + }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -2264,7 +4795,6 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -2280,7 +4810,6 @@ "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "base-x": "^3.0.2" } @@ -2291,13 +4820,24 @@ "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "bs58": "^4.0.0", "create-hash": "^1.1.0", "safe-buffer": "^5.1.2" } }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -2310,8 +4850,14 @@ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" + }, + "node_modules/buffer/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" }, "node_modules/bufio": { "version": "1.2.3", @@ -2339,7 +4885,6 @@ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -2359,7 +4904,6 @@ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -2374,7 +4918,6 @@ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -2399,13 +4942,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/cbor": { "version": "10.0.11", "resolved": "https://registry.npmjs.org/cbor/-/cbor-10.0.11.tgz", "integrity": "sha512-vIwORDd/WyB8Nc23o2zNN5RrtFGlR6Fca61TtjkUXueI3Jf2DOZDl1zsshvBntZ3wZHBM9ztjnkXSmzQDaq3WA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "nofilter": "^3.0.2" }, @@ -2432,6 +4981,19 @@ "node": ">=4" } }, + "node_modules/chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2456,6 +5018,16 @@ "dev": true, "license": "MIT" }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, "node_modules/check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", @@ -2507,7 +5079,6 @@ "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", @@ -2540,6 +5111,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -2572,6 +5159,29 @@ "dev": true, "license": "MIT" }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", @@ -2594,8 +5204,7 @@ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -2604,6 +5213,62 @@ "dev": true, "license": "MIT" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/cookie": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", @@ -2619,8 +5284,7 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/create-hash": { "version": "1.2.0", @@ -2628,7 +5292,6 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -2643,7 +5306,6 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -2653,6 +5315,15 @@ "sha.js": "^2.4.8" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/cross-spawn": { "version": "6.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", @@ -2680,6 +5351,16 @@ "semver": "bin/semver" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, "node_modules/dataloader": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", @@ -2737,7 +5418,6 @@ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2750,6 +5430,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2809,7 +5499,6 @@ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -2879,7 +5568,6 @@ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" } @@ -2890,7 +5578,6 @@ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" } @@ -2901,7 +5588,6 @@ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "es-errors": "^1.3.0" }, @@ -2909,6 +5595,22 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -2946,13 +5648,236 @@ "node": ">=4" } }, + "node_modules/eth-gas-reporter": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "peerDependencies": { + "@codechecks/client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } + } + }, + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/eth-gas-reporter/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/eth-gas-reporter/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-gas-reporter/node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-gas-reporter/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-gas-reporter/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -2977,7 +5902,6 @@ "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, "license": "MPL-2.0", - "optional": true, "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -2990,53 +5914,111 @@ } }, "node_modules/ethers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", - "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", "dev": true, "funding": [ { "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD", + "peer": true + }, + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "utf-8-validate": { + "optional": true } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abi": "5.8.0", - "@ethersproject/abstract-provider": "5.8.0", - "@ethersproject/abstract-signer": "5.8.0", - "@ethersproject/address": "5.8.0", - "@ethersproject/base64": "5.8.0", - "@ethersproject/basex": "5.8.0", - "@ethersproject/bignumber": "5.8.0", - "@ethersproject/bytes": "5.8.0", - "@ethersproject/constants": "5.8.0", - "@ethersproject/contracts": "5.8.0", - "@ethersproject/hash": "5.8.0", - "@ethersproject/hdnode": "5.8.0", - "@ethersproject/json-wallets": "5.8.0", - "@ethersproject/keccak256": "5.8.0", - "@ethersproject/logger": "5.8.0", - "@ethersproject/networks": "5.8.0", - "@ethersproject/pbkdf2": "5.8.0", - "@ethersproject/properties": "5.8.0", - "@ethersproject/providers": "5.8.0", - "@ethersproject/random": "5.8.0", - "@ethersproject/rlp": "5.8.0", - "@ethersproject/sha2": "5.8.0", - "@ethersproject/signing-key": "5.8.0", - "@ethersproject/solidity": "5.8.0", - "@ethersproject/strings": "5.8.0", - "@ethersproject/transactions": "5.8.0", - "@ethersproject/units": "5.8.0", - "@ethersproject/wallet": "5.8.0", - "@ethersproject/web": "5.8.0", - "@ethersproject/wordlists": "5.8.0" } }, "node_modules/evp_bytestokey": { @@ -3045,7 +6027,6 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -3073,6 +6054,22 @@ "node": ">=4" } }, + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -3090,6 +6087,44 @@ "node": ">=8.6.0" } }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "optional": true, + "peer": true + }, + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -3174,7 +6209,6 @@ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "is-callable": "^1.2.7" }, @@ -3185,6 +6219,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fp-ts": { "version": "1.19.3", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", @@ -3207,6 +6258,13 @@ "node": ">=6 <7 || >=8" } }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true, + "license": "MIT" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3235,7 +6293,6 @@ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "license": "MIT", - "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3266,7 +6323,6 @@ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -3286,13 +6342,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -3375,7 +6440,6 @@ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" }, @@ -3453,6 +6517,36 @@ } } }, + "node_modules/hardhat-contract-sizer": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.1.tgz", + "integrity": "sha512-/PPQQbUMgW6ERzk8M0/DA8/v2TEM9xRRAnF9qKPNMYF6FX5DFWcnxBsQvtp8uBz+vy7rmLyV9Elti2wmmhgkbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "cli-table3": "^0.6.0", + "strip-ansi": "^6.0.0" + }, + "peerDependencies": { + "hardhat": "^2.0.0" + } + }, + "node_modules/hardhat-gas-reporter": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", + "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" + }, + "peerDependencies": { + "hardhat": "^2.0.2" + } + }, "node_modules/hardhat/node_modules/@noble/hashes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", @@ -3644,7 +6738,6 @@ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "es-define-property": "^1.0.0" }, @@ -3658,7 +6751,6 @@ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" }, @@ -3672,7 +6764,6 @@ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -3689,7 +6780,6 @@ "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "inherits": "^2.0.4", "readable-stream": "^2.3.8", @@ -3705,8 +6795,7 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/hash-base/node_modules/readable-stream": { "version": "2.3.8", @@ -3714,7 +6803,6 @@ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3730,8 +6818,7 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/hash-base/node_modules/string_decoder": { "version": "1.1.1", @@ -3739,7 +6826,6 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -3749,8 +6835,7 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/hash.js": { "version": "1.1.7", @@ -3769,7 +6854,6 @@ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -3799,6 +6883,22 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", @@ -3820,6 +6920,23 @@ "url": "https://opencollective.com/express" } }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true, + "license": "MIT" + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -3854,6 +6971,27 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3929,7 +7067,6 @@ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" }, @@ -4045,7 +7182,6 @@ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "which-typed-array": "^1.1.16" }, @@ -4097,8 +7233,7 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", @@ -4107,6 +7242,24 @@ "dev": true, "license": "ISC" }, + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "dev": true, + "license": "MIT" + }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -4127,6 +7280,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/json-stream-stringify": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", @@ -4193,6 +7355,24 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/lodash.startcase": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", @@ -4200,6 +7380,15 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -4234,13 +7423,28 @@ "dev": true, "license": "MIT" }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true, + "license": "MIT" + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" } @@ -4251,7 +7455,6 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -4316,6 +7519,29 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -4336,7 +7562,6 @@ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", - "optional": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4605,7 +7830,6 @@ "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">=12.19" } @@ -4620,6 +7844,29 @@ "node": ">=0.10.0" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/obliterator": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", @@ -4654,6 +7901,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "dev": true, + "license": "MIT" + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -4759,6 +8013,12 @@ "quansync": "^0.2.7" } }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, "node_modules/patch-package": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", @@ -4911,7 +8171,6 @@ "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "create-hash": "^1.2.0", "create-hmac": "^1.1.7", @@ -4960,7 +8219,6 @@ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" } @@ -4986,8 +8244,17 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, + "license": "MIT" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, "license": "MIT", - "optional": true + "dependencies": { + "asap": "~2.0.6" + } }, "node_modules/proper-lockfile": { "version": "4.1.2", @@ -4995,13 +8262,35 @@ "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/quansync": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", @@ -5135,6 +8424,42 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "req-from": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5145,6 +8470,18 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -5174,7 +8511,6 @@ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 4" } @@ -5256,7 +8592,6 @@ "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "hash-base": "^3.1.2", "inherits": "^2.0.4" @@ -5271,7 +8606,6 @@ "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "dev": true, "license": "MPL-2.0", - "optional": true, "dependencies": { "bn.js": "^5.2.0" }, @@ -5345,7 +8679,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "optional": true, "dependencies": { "elliptic": "^6.5.7", "node-addon-api": "^5.0.0", @@ -5360,8 +8693,7 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/semver": { "version": "7.7.3", @@ -5392,7 +8724,6 @@ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -5410,8 +8741,7 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", @@ -5426,7 +8756,6 @@ "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "dev": true, "license": "(MIT AND BSD-3-Clause)", - "optional": true, "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", @@ -5442,6 +8771,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -5465,13 +8808,88 @@ "node": ">=0.10.0" } }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/slash": { "version": "3.0.0", @@ -5483,6 +8901,26 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, "node_modules/solc": { "version": "0.8.26", "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", @@ -5520,8 +8958,7 @@ "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.61.tgz", "integrity": "sha512-OYBJYcYyG7gLV0VuXl9CUrvgJXjV/v0XnR4+1YomVe3q+QyENQXJJxAEASUz4vN6lMAl+C8RSRSr5MBAz09f6w==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/source-map": { "version": "0.6.1", @@ -5733,6 +9170,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -5746,6 +9196,50 @@ "node": ">=8" } }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/term-size": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", @@ -5759,6 +9253,54 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -5826,7 +9368,6 @@ "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "isarray": "^2.0.5", "safe-buffer": "^5.2.1", @@ -5866,6 +9407,64 @@ "dev": true, "license": "MIT" }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -5909,7 +9508,6 @@ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -5919,6 +9517,29 @@ "node": ">= 0.4" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/undici": { "version": "5.29.0", "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", @@ -5932,6 +9553,20 @@ "node": ">=14.0" } }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true, + "license": "MIT" + }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -5969,6 +9604,15 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -6006,7 +9650,6 @@ "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -6155,6 +9798,18 @@ "node": ">=10" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 1c66aa1..b9fc357 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,14 @@ "homepage": "https://github.com/CMTA/CMTAT-ACE#readme", "devDependencies": { "@chainlink/contracts": "1.3.0", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-gas-reporter": "^1.0.9", + "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", + "@nomicfoundation/hardhat-network-helpers": "^1.1.2", "@openzeppelin/contracts": "5.5.0", "@openzeppelin/contracts-upgradeable": "5.5.0", - "hardhat": "^2.27.1" + "@openzeppelin/hardhat-upgrades": "^3.2.0", + "@openzeppelin/upgrades-core": "^1.44.1", + "hardhat": "^2.24.0" } } diff --git a/test/standardDeployment.test.js b/test/standardDeployment.test.js new file mode 100644 index 0000000..b1dc60e --- /dev/null +++ b/test/standardDeployment.test.js @@ -0,0 +1,21 @@ +const {ethers} = require("hardhat"); +const { expect } = require('chai') +const { etherAddresses, deployComplianceTokenCMTAT } = require("./testUtils.js"); +const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') + + +describe("ComplianceTokenCMTAT Standalone Deployment", () => { + + it("should deploy the ComplianceTokenCMTAT standalone contract", async () => { + Object.assign(this, await loadFixture(etherAddresses)) + const cmtat = await deployComplianceTokenCMTAT( + this.forwarder.address, + this.admin.address, + this.deployerAddress + ); + + expect(await cmtat.name()).to.equal("Security Token"); + expect(await cmtat.symbol()).to.equal("ST"); + expect(await cmtat.getAdmin()).to.equal(this.admin.address); + }); +}) \ No newline at end of file diff --git a/test/testUtils.js b/test/testUtils.js new file mode 100644 index 0000000..0cbae6c --- /dev/null +++ b/test/testUtils.js @@ -0,0 +1,66 @@ +const {ethers } = require("hardhat"); + +async function etherAddresses () { + const [ + forwarder, + admin, + address1, + address2, + address3, + deployerAddress, + fakeRuleEngine, + ruleEngine, + attacker + ] = await ethers.getSigners() + return { + forwarder, + admin, + address1, + address2, + address3, + deployerAddress, + fakeRuleEngine, + ruleEngine, + attacker + } +} + + +async function deployComplianceTokenCMTAT (forwarderAddress, adminAddress, deployerAddress) { + const erc20Attributes = [ + "Security Token", // name + "ST", // symbol + 0 // decimalsIrrevocable (legacy) + ] + const terms = { + name: "Token Terms v2", + uri: "https://cmta.ch/standards/cmta-token-cmtat", + documentHash: ethers.keccak256(ethers.toUtf8Bytes("terms-v2")) + } + const extraInformationAttributes = [ + "1234567890", // ISIN or identifier as tokenId + terms, + "ComplianceTokenCMTAT smart contract" // information string + ] + const ComplianceTokenCMTAT = await ethers.deployContract( + "ComplianceTokenCMTAT", + [ + forwarderAddress, + adminAddress, + erc20Attributes, + extraInformationAttributes, + ethers.ZeroAddress, // snapshotEngine + ethers.ZeroAddress, // documentEngine + ethers.ZeroAddress // policyEngine + ], + deployerAddress + ) + + return ComplianceTokenCMTAT; +} + + +module.exports = { + etherAddresses, + deployComplianceTokenCMTAT +}; \ No newline at end of file From 6889ebdf7e2ac0d98bd695f8da9891427474da24 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Fri, 19 Dec 2025 12:03:16 +0000 Subject: [PATCH 04/57] Rename file to showcase standalone deployment, add example deployment scripts --- ...=> ComplianceTokenCMTATLiteStandalone.sol} | 4 +- ...sol => ComplianceTokenCMTATStandalone.sol} | 6 +-- scripts/deploy-lite.js | 52 +++++++++++++++++++ scripts/deploy-standard.js | 52 +++++++++++++++++++ test/standardDeployment.test.js | 4 +- test/testUtils.js | 12 ++--- 6 files changed, 117 insertions(+), 13 deletions(-) rename contracts/deployment/{ComplianceTokenCMTATLite.sol => ComplianceTokenCMTATLiteStandalone.sol} (92%) rename contracts/deployment/{ComplianceTokenCMTAT.sol => ComplianceTokenCMTATStandalone.sol} (90%) create mode 100644 scripts/deploy-lite.js create mode 100644 scripts/deploy-standard.js diff --git a/contracts/deployment/ComplianceTokenCMTATLite.sol b/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol similarity index 92% rename from contracts/deployment/ComplianceTokenCMTATLite.sol rename to contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol index 16fe92a..15a6a24 100644 --- a/contracts/deployment/ComplianceTokenCMTATLite.sol +++ b/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol @@ -12,9 +12,9 @@ import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/op /** * @title ComplianceTokenCMTATLite * @author Chainlink - * @notice Compliance Token contract with Chainlink ACE policy validation on CMTA transfers + * @notice Standalone Compliance Token contract with Chainlink ACE policy validation on CMTA transfers */ -contract ComplianceTokenCMTATLite is CCTCMTATBaseERC2771 { +contract ComplianceTokenCMTATLiteStandalone is CCTCMTATBaseERC2771 { /** * @notice Contract version for standalone deployment * @param forwarderIrrevocable address of the forwarder, required for the gasless support diff --git a/contracts/deployment/ComplianceTokenCMTAT.sol b/contracts/deployment/ComplianceTokenCMTATStandalone.sol similarity index 90% rename from contracts/deployment/ComplianceTokenCMTAT.sol rename to contracts/deployment/ComplianceTokenCMTATStandalone.sol index 68435eb..b05b5ee 100644 --- a/contracts/deployment/ComplianceTokenCMTAT.sol +++ b/contracts/deployment/ComplianceTokenCMTATStandalone.sol @@ -11,11 +11,11 @@ import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/op /** - * @title ComplianceTokenCMTAT + * @title ComplianceTokenCMTATStandalone * @author Chainlink - * @notice Compliance Token contract with Chainlink ACE policy validation on all public function (instead of RBAC) + * @notice Standalone ComplianceToken contract with Chainlink ACE policy validation on all public functions */ -contract ComplianceTokenCMTAT is CCTBaseERC2771 { +contract ComplianceTokenCMTATStandalone is CCTBaseERC2771 { /** * @notice Contract version for standalone deployment * @param forwarderIrrevocable address of the forwarder, required for the gasless support diff --git a/scripts/deploy-lite.js b/scripts/deploy-lite.js new file mode 100644 index 0000000..8cd2df0 --- /dev/null +++ b/scripts/deploy-lite.js @@ -0,0 +1,52 @@ +/** + * Script example - do not use it for production + */ +const { ethers } = require("hardhat"); +const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); + + +async function main() { + // To change + // Replace these with actual deployed contract addresses or deploy mocks before this + const forwarderIrrevocable = ZeroAddress; + const admin = "0x1000000000000000000000000000000000000001"; + const policyEngine = ZeroAddress; + const snapshotEngine = ZeroAddress; + const documentEngine = ZeroAddress; + const ERC20Attributes = { + name: "Security Token", + symbol: "ST", + decimalsIrrevocable: 0 // Compliant with CMTAT spec but can be different + }; + const terms = { + name: "Token Terms v1", + uri: "https://cmta.ch/standards/cmta-token-cmtat", + documentHash: keccak256(toUtf8Bytes("terms-v1")) + }; + const extraInformationAttributes = { + tokenId: "1234567890", // ISIN or identifier + terms: terms, + information: "CMTAT smart contract" + }; + + // Get contract factory and deploy + const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTATLiteStandalone"); + const cmtat = await CMTATStandalone.deploy( + forwarderIrrevocable, + admin, + ERC20Attributes, + extraInformationAttributes, + policyEngine, + snapshotEngine, + documentEngine + ); + + await cmtat.waitForDeployment(); + + console.log("ComplianceTokenCMTATLite deployed to:", await cmtat.getAddress()); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); \ No newline at end of file diff --git a/scripts/deploy-standard.js b/scripts/deploy-standard.js new file mode 100644 index 0000000..932fe94 --- /dev/null +++ b/scripts/deploy-standard.js @@ -0,0 +1,52 @@ +/** + * Script example - do not use it for production + */ +const { ethers } = require("hardhat"); +const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); + + +async function main() { + // To change + // Replace these with actual deployed contract addresses or deploy mocks before this + const forwarderIrrevocable = ZeroAddress; + const admin = "0x1000000000000000000000000000000000000001"; + const policyEngine = ZeroAddress; + const snapshotEngine = ZeroAddress; + const documentEngine = ZeroAddress; + const ERC20Attributes = { + name: "Security Token", + symbol: "ST", + decimalsIrrevocable: 0 // Compliant with CMTAT spec but can be different + }; + const terms = { + name: "Token Terms v2", + uri: "https://cmta.ch/standards/cmta-token-cmtat", + documentHash: keccak256(toUtf8Bytes("terms-v2")) + }; + const extraInformationAttributes = { + tokenId: "1234567890", // ISIN or identifier + terms: terms, + information: "CMTAT smart contract" + }; + + // Get contract factory and deploy + const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTAT"); + const cmtat = await CMTATStandalone.deploy( + forwarderIrrevocable, + admin, + ERC20Attributes, + extraInformationAttributes, + policyEngine, + snapshotEngine, + documentEngine + ); + + await cmtat.waitForDeployment(); + + console.log("ComplianceTokenCMTAT deployed to:", await cmtat.getAddress()); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); \ No newline at end of file diff --git a/test/standardDeployment.test.js b/test/standardDeployment.test.js index b1dc60e..f48bbb7 100644 --- a/test/standardDeployment.test.js +++ b/test/standardDeployment.test.js @@ -1,6 +1,6 @@ const {ethers} = require("hardhat"); const { expect } = require('chai') -const { etherAddresses, deployComplianceTokenCMTAT } = require("./testUtils.js"); +const { etherAddresses, deployComplianceTokenCMTATStandalone } = require("./testUtils.js"); const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') @@ -8,7 +8,7 @@ describe("ComplianceTokenCMTAT Standalone Deployment", () => { it("should deploy the ComplianceTokenCMTAT standalone contract", async () => { Object.assign(this, await loadFixture(etherAddresses)) - const cmtat = await deployComplianceTokenCMTAT( + const cmtat = await deployComplianceTokenCMTATStandalone( this.forwarder.address, this.admin.address, this.deployerAddress diff --git a/test/testUtils.js b/test/testUtils.js index 0cbae6c..f427ff6 100644 --- a/test/testUtils.js +++ b/test/testUtils.js @@ -26,7 +26,7 @@ async function etherAddresses () { } -async function deployComplianceTokenCMTAT (forwarderAddress, adminAddress, deployerAddress) { +async function deployComplianceTokenCMTATStandalone (forwarderAddress, adminAddress, deployerAddress) { const erc20Attributes = [ "Security Token", // name "ST", // symbol @@ -40,10 +40,10 @@ async function deployComplianceTokenCMTAT (forwarderAddress, adminAddress, deplo const extraInformationAttributes = [ "1234567890", // ISIN or identifier as tokenId terms, - "ComplianceTokenCMTAT smart contract" // information string + "ComplianceTokenCMTATStandalone smart contract" // information string ] - const ComplianceTokenCMTAT = await ethers.deployContract( - "ComplianceTokenCMTAT", + const ComplianceTokenCMTATStandalone = await ethers.deployContract( + "ComplianceTokenCMTATStandalone", [ forwarderAddress, adminAddress, @@ -56,11 +56,11 @@ async function deployComplianceTokenCMTAT (forwarderAddress, adminAddress, deplo deployerAddress ) - return ComplianceTokenCMTAT; + return ComplianceTokenCMTATStandalone; } module.exports = { etherAddresses, - deployComplianceTokenCMTAT + deployComplianceTokenCMTATStandalone }; \ No newline at end of file From e1f62d7832f08cda9055d635c748c7d130e7a0a3 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Fri, 19 Dec 2025 23:21:20 +0100 Subject: [PATCH 05/57] Add hardhat to package.json, update solidity version and config --- .../ComplianceTokenCMTATLiteStandalone.sol | 2 +- .../ComplianceTokenCMTATStandalone.sol | 2 +- hardhat.config.js | 10 +- package-lock.json | 9015 +++++++++++++---- package.json | 6 +- 5 files changed, 6876 insertions(+), 2159 deletions(-) diff --git a/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol b/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol index 15a6a24..90ddb9a 100644 --- a/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol +++ b/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.26; +pragma solidity ^0.8.20; import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; diff --git a/contracts/deployment/ComplianceTokenCMTATStandalone.sol b/contracts/deployment/ComplianceTokenCMTATStandalone.sol index b05b5ee..b9ac802 100644 --- a/contracts/deployment/ComplianceTokenCMTATStandalone.sol +++ b/contracts/deployment/ComplianceTokenCMTATStandalone.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: MPL-2.0 -pragma solidity 0.8.26; +pragma solidity ^0.8.20; import {CCTBaseERC2771} from "../modules/standard/CCTBaseERC2771.sol"; import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; diff --git a/hardhat.config.js b/hardhat.config.js index ecbd029..3adc7f2 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -2,14 +2,14 @@ require('@openzeppelin/hardhat-upgrades') /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { - solidity: { - version: "0.8.26", + solidity: { + version: '0.8.30', settings: { - viaIR: true, optimizer: { enabled: true, - runs: 1 - } + runs: 200 + }, + evmVersion: 'prague' } }, paths: { diff --git a/package-lock.json b/package-lock.json index eb3eeee..9a4919d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "cmtat-ace", "version": "1.0.0", - "lockfileVersion": 3, + "lockfileVersion": 2, "requires": true, "packages": { "": { @@ -15,7 +15,7 @@ "@openzeppelin/contracts-upgradeable": "5.5.0", "@openzeppelin/hardhat-upgrades": "^3.2.0", "@openzeppelin/upgrades-core": "^1.44.1", - "hardhat": "^2.24.0", + "hardhat": "^2.28.0", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.9" } @@ -25,7 +25,6 @@ "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@arbitrum/nitro-contracts": { @@ -34,7 +33,6 @@ "integrity": "sha512-4Tyk3XVHz+bm8UujUC78LYSw3xAxyYvBCxfEX4z3qE4/ww7Qck/rmce5gbHMzQjArEAzAP2YSfYIFuIFuRXtfg==", "dev": true, "hasInstallScript": true, - "license": "BUSL-1.1", "dependencies": { "@offchainlabs/upgrade-executor": "1.1.0-beta.0", "@openzeppelin/contracts": "4.5.0", @@ -46,22 +44,19 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz", "integrity": "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@arbitrum/nitro-contracts/node_modules/@openzeppelin/contracts-upgradeable": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@arbitrum/token-bridge-contracts": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@arbitrum/token-bridge-contracts/-/token-bridge-contracts-1.1.2.tgz", "integrity": "sha512-k7AZXiB2HFecJ1KfaDBqgOKe3Loo1ttGLC7hUOVB+0YrihIR6cYpJRuqKSKK4YCy+FF21AUDtaG3x57OFM667Q==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@arbitrum/nitro-contracts": "^1.0.0-beta.8", "@offchainlabs/upgrade-executor": "1.1.0-beta.0", @@ -76,22 +71,19 @@ "version": "4.8.3", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@arbitrum/token-bridge-contracts/node_modules/@openzeppelin/contracts-upgradeable": { "version": "4.8.3", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz", "integrity": "sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -101,19 +93,11 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -129,7 +113,6 @@ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -142,7 +125,6 @@ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -156,7 +138,6 @@ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -165,19 +146,11 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-crypto/sha256-js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -187,36 +160,20 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-crypto/util": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -228,7 +185,6 @@ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -241,7 +197,6 @@ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -255,7 +210,6 @@ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -264,24 +218,16 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.954.0.tgz", - "integrity": "sha512-psVZGa+kaTRfU7mPW0mOawPXgHvDOR0VdB/NOourwQ9Ug55HHeDneJ6pt9MvNeE5/AKkwm8avLHTB2W6hYV8ng==", + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.955.0.tgz", + "integrity": "sha512-pqA6Eo+JAJMze9/mr8BOSE6pognA6RyOc6htVrTCricZm8x6ak+babyOsg3ZULqqpBjLWNCHa3wNybCGQkMesQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.954.0", - "@aws-sdk/credential-provider-node": "3.954.0", + "@aws-sdk/credential-provider-node": "3.955.0", "@aws-sdk/middleware-host-header": "3.953.0", "@aws-sdk/middleware-logger": "3.953.0", "@aws-sdk/middleware-recursion-detection": "3.953.0", @@ -327,19 +273,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-lambda/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/client-sso": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.954.0.tgz", - "integrity": "sha512-FVyMAvlFhLK68DHWB1lSkCRTm25xl38bIZDd+jKt5+yDolCrG5+n9aIN8AA8jNO1HNGhZuMjSIQm9r5rGmJH8g==", + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.955.0.tgz", + "integrity": "sha512-+nym5boDFt2ksba0fElocMKxCFJbJcd31PI3502hoI1N5VK7HyxkQeBtQJ64JYomvw8eARjWWC13hkB0LtZILw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -384,19 +322,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/core": { "version": "3.954.0", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.954.0.tgz", "integrity": "sha512-5oYO5RP+mvCNXNj8XnF9jZo0EP0LTseYOJVNQYcii1D9DJqzHL3HJWurYh7cXxz7G7eDyvVYA01O9Xpt34TdoA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.953.0", "@aws-sdk/xml-builder": "3.953.0", @@ -416,19 +346,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/core/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.954.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.954.0.tgz", "integrity": "sha512-2HNkqBjfsvyoRuPAiFh86JBFMFyaCNhL4VyH6XqwTGKZffjG7hdBmzXPy7AT7G3oFh1k/1Zc27v0qxaKoK7mBA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.954.0", "@aws-sdk/types": "3.953.0", @@ -440,19 +362,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/credential-provider-http": { "version": "3.954.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.954.0.tgz", "integrity": "sha512-CrWD5300+NE1OYRnSVDxoG7G0b5cLIZb7yp+rNQ5Jq/kqnTmyJXpVAsivq+bQIDaGzPXhadzpAMIoo7K/aHaag==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.954.0", "@aws-sdk/types": "3.953.0", @@ -469,28 +383,20 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.954.0.tgz", - "integrity": "sha512-WAFD8pVwRSoBsuXcoD+s/hrdsP9Z0PNUedSgkOGExuJVAabpM2cIIMzYNsdHio9XFZUSqHkv8mF5mQXuIZvuzg==", + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.955.0.tgz", + "integrity": "sha512-90isLovxsPzaaSx3IIUZuxym6VXrsRetnQ3AuHr2kiTFk2pIzyIwmi+gDcUaLXQ5nNBoSj1Z/4+i1vhxa1n2DQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.954.0", "@aws-sdk/credential-provider-env": "3.954.0", "@aws-sdk/credential-provider-http": "3.954.0", - "@aws-sdk/credential-provider-login": "3.954.0", + "@aws-sdk/credential-provider-login": "3.955.0", "@aws-sdk/credential-provider-process": "3.954.0", - "@aws-sdk/credential-provider-sso": "3.954.0", - "@aws-sdk/credential-provider-web-identity": "3.954.0", - "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/credential-provider-sso": "3.955.0", + "@aws-sdk/credential-provider-web-identity": "3.955.0", + "@aws-sdk/nested-clients": "3.955.0", "@aws-sdk/types": "3.953.0", "@smithy/credential-provider-imds": "^4.2.6", "@smithy/property-provider": "^4.2.6", @@ -502,22 +408,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.954.0.tgz", - "integrity": "sha512-EYqaBWwdVbVK7prmsmgTWLPptoWREplPkFMFscOpVmseDvf/0IjYNbNLLtfuhy/6L7ZBGI9wat2k4u0MRivvxA==", + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.955.0.tgz", + "integrity": "sha512-xlkmSvg8oDN5LIxLAq3N1QWK8F8gUAsBWZlp1IX8Lr5XhcKI3GVarIIUcZrvCy1NjzCd/LDXYdNL6MRlNP4bAw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.954.0", - "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/nested-clients": "3.955.0", "@aws-sdk/types": "3.953.0", "@smithy/property-provider": "^4.2.6", "@smithy/protocol-http": "^5.3.6", @@ -529,26 +427,18 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.954.0.tgz", - "integrity": "sha512-UPBjw7Lnly5i+/rES8Z5U+nPaumzEUYOE/wrHkxyH6JjwFWn8w7R07fE5Z5cgYlIq1U1lQ7sxYwB3wHPpQ65Aw==", + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.955.0.tgz", + "integrity": "sha512-XIL4QB+dPOJA6DRTmYZL52wFcLTslb7V1ydS4FCNT2DVLhkO4ExkPP+pe5YmIpzt/Our1ugS+XxAs3e6BtyFjA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.954.0", "@aws-sdk/credential-provider-http": "3.954.0", - "@aws-sdk/credential-provider-ini": "3.954.0", + "@aws-sdk/credential-provider-ini": "3.955.0", "@aws-sdk/credential-provider-process": "3.954.0", - "@aws-sdk/credential-provider-sso": "3.954.0", - "@aws-sdk/credential-provider-web-identity": "3.954.0", + "@aws-sdk/credential-provider-sso": "3.955.0", + "@aws-sdk/credential-provider-web-identity": "3.955.0", "@aws-sdk/types": "3.953.0", "@smithy/credential-provider-imds": "^4.2.6", "@smithy/property-provider": "^4.2.6", @@ -560,19 +450,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.954.0", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.954.0.tgz", "integrity": "sha512-Y1/0O2LgbKM8iIgcVj/GNEQW6p90LVTCOzF2CI1pouoKqxmZ/1F7F66WHoa6XUOfKaCRj/R6nuMR3om9ThaM5A==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.954.0", "@aws-sdk/types": "3.953.0", @@ -585,23 +467,15 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.954.0.tgz", - "integrity": "sha512-UXxGfkp/plFRdyidMLvNul5zoLKmHhVQOCrD2OgR/lg9jNqNmJ7abF+Qu8abo902iDkhU21Qj4M398cx6l8Kng==", + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.955.0.tgz", + "integrity": "sha512-Y99KI73Fn8JnB4RY5Ls6j7rd5jmFFwnY9WLHIWeJdc+vfwL6Bb1uWKW3+m/B9+RC4Xoz2nQgtefBcdWq5Xx8iw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.954.0", + "@aws-sdk/client-sso": "3.955.0", "@aws-sdk/core": "3.954.0", - "@aws-sdk/token-providers": "3.954.0", + "@aws-sdk/token-providers": "3.955.0", "@aws-sdk/types": "3.953.0", "@smithy/property-provider": "^4.2.6", "@smithy/shared-ini-file-loader": "^4.4.1", @@ -612,22 +486,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.954.0.tgz", - "integrity": "sha512-XEyf1T08q1tG4zkTS4Dnf1cAQyrJUo/xlvi6XNpqGhY3bOmKUYE2h/K6eITIdytDL9VuCpWYQ6YRcIVtL29E0w==", + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.955.0.tgz", + "integrity": "sha512-+lFxkZ2Vz3qp/T68ZONKzWVTQvomTu7E6tts1dfAbEcDt62Y/nPCByq/C2hQj+TiN05HrUx+yTJaGHBklhkbqA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.954.0", - "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/nested-clients": "3.955.0", "@aws-sdk/types": "3.953.0", "@smithy/property-provider": "^4.2.6", "@smithy/shared-ini-file-loader": "^4.4.1", @@ -638,19 +504,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.953.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.953.0.tgz", "integrity": "sha512-jTGhfkONav+r4E6HLOrl5SzBqDmPByUYCkyB/c/3TVb8jX3wAZx8/q9bphKpCh+G5ARi3IdbSisgkZrJYqQ19Q==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.953.0", "@smithy/protocol-http": "^5.3.6", @@ -661,19 +519,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.953.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.953.0.tgz", "integrity": "sha512-PlWdVYgcuptkIC0ZKqVUhWNtSHXJSx7U9V8J7dJjRmsXC40X7zpEycvrkzDMJjeTDGcCceYbyYAg/4X1lkcIMw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.953.0", "@smithy/types": "^4.10.0", @@ -683,19 +533,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-logger/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.953.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.953.0.tgz", "integrity": "sha512-cmIJx0gWeesUKK4YwgE+VQL3mpACr3/J24fbwnc1Z5tntC86b+HQFzU5vsBDw6lLwyD46dBgWdsXFh1jL+ZaFw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.953.0", "@aws/lambda-invoke-store": "^0.2.2", @@ -707,19 +549,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/middleware-user-agent": { "version": "3.954.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.954.0.tgz", "integrity": "sha512-5PX8JDe3dB2+MqXeGIhmgFnm2rbVsSxhz+Xyuu1oxLtbOn+a9UDA+sNBufEBjt3UxWy5qwEEY1fxdbXXayjlGg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.954.0", "@aws-sdk/types": "3.953.0", @@ -733,19 +567,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.954.0.tgz", - "integrity": "sha512-JLUhf35fTQIDPLk6G5KPggL9tV//Hjhy6+N2zZeis76LuBRNhKDq8z1CFyKhjf00vXi/tDYdn9D7y9emI+5Y/g==", + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.955.0.tgz", + "integrity": "sha512-RBi6CQHbPF09kqXAoiEOOPkVnSoU5YppKoOt/cgsWfoMHwC+7itIrEv+yRD62h14jIjF3KngVIQIrBRbX3o3/Q==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -790,19 +616,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.953.0", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.953.0.tgz", "integrity": "sha512-5MJgnsc+HLO+le0EK1cy92yrC7kyhGZSpaq8PcQvKs9qtXCXT5Tb6tMdkr5Y07JxYsYOV1omWBynvL6PWh08tQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.953.0", "@smithy/config-resolver": "^4.4.4", @@ -814,22 +632,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/token-providers": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.954.0.tgz", - "integrity": "sha512-rDyN3oQQKMOJgyQ9/LNbh4fAGAj8ePMGOAQzSP/kyzizmViI6STpBW1o/VRqiTgMNi1bvA9ZasDtfrJqcVt0iA==", + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.955.0.tgz", + "integrity": "sha512-LVpWkxXvMPgZofP2Gc8XBfQhsyecBMVARDHWMvks6vPbCLSTM7dw6H1HI9qbGNCurYcyc2xBRAkEDhChQlbPPg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.954.0", - "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/nested-clients": "3.955.0", "@aws-sdk/types": "3.953.0", "@smithy/property-provider": "^4.2.6", "@smithy/shared-ini-file-loader": "^4.4.1", @@ -840,19 +650,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/types": { "version": "3.953.0", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.953.0.tgz", "integrity": "sha512-M9Iwg9kTyqTErI0vOTVVpcnTHWzS3VplQppy8MuL02EE+mJ0BIwpWfsaAPQW+/XnVpdNpWZTsHcNE29f1+hR8g==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.10.0", "tslib": "^2.6.2" @@ -861,19 +663,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/types/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.953.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.953.0.tgz", "integrity": "sha512-rjaS6jrFksopXvNg6YeN+D1lYwhcByORNlFuYesFvaQNtPOufbE5tJL4GJ3TMXyaY0uFR28N5BHHITPyWWfH/g==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.953.0", "@smithy/types": "^4.10.0", @@ -885,19 +679,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-endpoints/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.953.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.953.0.tgz", "integrity": "sha512-mPxK+I1LcrgC/RSa3G5AMAn8eN2Ay0VOgw8lSRmV1jCtO+iYvNeCqOdxoJUjOW6I5BA4niIRWqVORuRP07776Q==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -905,19 +691,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-locate-window/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.953.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.953.0.tgz", "integrity": "sha512-UF5NeqYesWuFao+u7LJvpV1SJCaLml5BtFZKUdTnNNMeN6jvV+dW/eQoFGpXF94RCqguX0XESmRuRRPQp+/rzQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.953.0", "@smithy/types": "^4.10.0", @@ -925,19 +703,11 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/util-user-agent-browser/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.954.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.954.0.tgz", "integrity": "sha512-fB5S5VOu7OFkeNzcblQlez4AjO5hgDFaa7phYt7716YWisY3RjAaQPlxgv+G3GltHHDJIfzEC5aRxdf62B9zMg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/middleware-user-agent": "3.954.0", "@aws-sdk/types": "3.953.0", @@ -957,36 +727,20 @@ } } }, - "node_modules/@aws-sdk/util-user-agent-node/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/util-utf8-browser": { "version": "3.259.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.3.1" } }, - "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws-sdk/xml-builder": { "version": "3.953.0", "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.953.0.tgz", "integrity": "sha512-Zmrj21jQ2OeOJGr9spPiN00aQvXa/WUqRXcTVENhrMt+OFoSOfDFpYhUj9NQ09QmQ8KMWFoWuWW6iKurNqLvAA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.10.0", "fast-xml-parser": "5.2.5", @@ -996,19 +750,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/xml-builder/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@aws/lambda-invoke-store": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=18.0.0" } @@ -1018,7 +764,6 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -1027,15 +772,13 @@ "version": "0.17.0", "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz", "integrity": "sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==", - "dev": true, - "license": "(Apache-2.0 WITH LLVM-exception)" + "dev": true }, "node_modules/@chainlink/contracts": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.3.0.tgz", "integrity": "sha512-Vk93nijTC5iRFW/L6FKUzeMuJy7k5dNzAtqlHpdreqtzL7efO/qXbYCkqjJFNXGurfOXVehHlehFoH4tWvSbfw==", "dev": true, - "license": "MIT", "dependencies": { "@arbitrum/nitro-contracts": "1.1.1", "@arbitrum/token-bridge-contracts": "1.1.2", @@ -1058,7 +801,6 @@ "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", "dev": true, - "license": "MIT", "dependencies": { "@eth-optimism/core-utils": "0.12.0", "@ethersproject/abstract-provider": "^5.7.0", @@ -1072,15 +814,13 @@ "version": "4.9.3", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@chainlink/contracts/node_modules/@openzeppelin/contracts-upgradeable": { "version": "4.9.3", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@chainlink/contracts/node_modules/ethers": { "version": "5.8.0", @@ -1097,7 +837,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "peer": true, "dependencies": { "@ethersproject/abi": "5.8.0", @@ -1137,7 +876,6 @@ "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.14.tgz", "integrity": "sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/config": "^3.1.2", "@changesets/get-version-range-type": "^0.4.0", @@ -1159,7 +897,6 @@ "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/errors": "^0.2.0", "@changesets/get-dependents-graph": "^2.1.3", @@ -1174,7 +911,6 @@ "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/types": "^6.1.0" } @@ -1184,7 +920,6 @@ "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.5.2.tgz", "integrity": "sha512-HeGeDl8HaIGj9fQHo/tv5XKQ2SNEi9+9yl1Bss1jttPqeiASRXhfi0A2wv8yFKCp07kR1gpOI5ge6+CWNm1jPw==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/get-github-info": "^0.7.0", "@changesets/types": "^6.1.0", @@ -1196,7 +931,6 @@ "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.12.tgz", "integrity": "sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/apply-release-plan": "^7.0.8", "@changesets/assemble-release-plan": "^6.0.5", @@ -1236,7 +970,6 @@ "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.2.tgz", "integrity": "sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/errors": "^0.2.0", "@changesets/get-dependents-graph": "^2.1.3", @@ -1252,7 +985,6 @@ "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", "dev": true, - "license": "MIT", "dependencies": { "extendable-error": "^0.1.5" } @@ -1262,7 +994,6 @@ "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", @@ -1275,7 +1006,6 @@ "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.7.0.tgz", "integrity": "sha512-+i67Bmhfj9V4KfDeS1+Tz3iF32btKZB2AAx+cYMqDSRFP7r3/ZdGbjCo+c6qkyViN9ygDuBjzageuPGJtKGe5A==", "dev": true, - "license": "MIT", "dependencies": { "dataloader": "^1.4.0", "node-fetch": "^2.5.0" @@ -1286,7 +1016,6 @@ "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.14.tgz", "integrity": "sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/assemble-release-plan": "^6.0.9", "@changesets/config": "^3.1.2", @@ -1300,15 +1029,13 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@changesets/git": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/errors": "^0.2.0", "@manypkg/get-packages": "^1.1.3", @@ -1322,7 +1049,6 @@ "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^1.1.0" } @@ -1332,7 +1058,6 @@ "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.2.tgz", "integrity": "sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/types": "^6.1.0", "js-yaml": "^4.1.1" @@ -1343,7 +1068,6 @@ "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/errors": "^0.2.0", "@changesets/types": "^6.1.0", @@ -1356,7 +1080,6 @@ "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.6.tgz", "integrity": "sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/git": "^3.0.4", "@changesets/logger": "^0.1.1", @@ -1372,7 +1095,6 @@ "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3" @@ -1382,15 +1104,13 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@changesets/write": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.2.tgz", "integrity": "sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==", "dev": true, - "license": "MIT", "dependencies": { "@changesets/types": "^6.0.0", "fs-extra": "^7.0.1", @@ -1403,33 +1123,16 @@ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@eth-optimism/core-utils": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", "integrity": "sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==", "dev": true, - "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", @@ -1454,7 +1157,6 @@ "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", "dev": true, - "license": "MPL-2.0", "bin": { "rlp": "bin/rlp.cjs" }, @@ -1467,7 +1169,6 @@ "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", "dev": true, - "license": "MPL-2.0", "dependencies": { "@ethereumjs/rlp": "^5.0.2", "ethereum-cryptography": "^2.2.1" @@ -1481,7 +1182,6 @@ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dev": true, - "license": "MIT", "dependencies": { "@noble/hashes": "1.4.0" }, @@ -1494,7 +1194,6 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 16" }, @@ -1507,7 +1206,6 @@ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dev": true, - "license": "MIT", "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -1530,7 +1228,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", @@ -1558,7 +1255,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", @@ -1584,7 +1280,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", @@ -1608,7 +1303,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", @@ -1632,7 +1326,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0" } @@ -1652,7 +1345,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/properties": "^5.8.0" @@ -1673,7 +1365,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", @@ -1695,7 +1386,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.8.0" } @@ -1715,7 +1405,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.8.0" } @@ -1735,7 +1424,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.8.0", "@ethersproject/abstract-provider": "^5.8.0", @@ -1764,7 +1452,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", @@ -1792,7 +1479,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/basex": "^5.8.0", @@ -1823,7 +1509,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", @@ -1844,8 +1529,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@ethersproject/keccak256": { "version": "5.8.0", @@ -1862,7 +1546,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "js-sha3": "0.8.0" @@ -1882,8 +1565,7 @@ "type": "individual", "url": "https://www.buymeacoffee.com/ricmoo" } - ], - "license": "MIT" + ] }, "node_modules/@ethersproject/networks": { "version": "5.8.0", @@ -1900,7 +1582,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.8.0" } @@ -1920,7 +1601,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/sha2": "^5.8.0" @@ -1941,7 +1621,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.8.0" } @@ -1961,7 +1640,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", @@ -1985,6 +1663,27 @@ "ws": "8.18.0" } }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/@ethersproject/random": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", @@ -2000,7 +1699,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" @@ -2021,7 +1719,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" @@ -2042,7 +1739,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", @@ -2064,7 +1760,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", @@ -2089,7 +1784,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", @@ -2114,7 +1808,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", @@ -2136,7 +1829,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", @@ -2164,7 +1856,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/constants": "^5.8.0", @@ -2186,7 +1877,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", @@ -2220,7 +1910,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/base64": "^5.8.0", "@ethersproject/bytes": "^5.8.0", @@ -2244,7 +1933,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/hash": "^5.8.0", @@ -2258,51 +1946,15 @@ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@manypkg/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.5.5", "@types/node": "^12.7.1", @@ -2310,19 +1962,11 @@ "fs-extra": "^8.1.0" } }, - "node_modules/@manypkg/find-root/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@manypkg/find-root/node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -2337,7 +1981,6 @@ "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.5.5", "@changesets/types": "^4.0.1", @@ -2351,15 +1994,13 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@manypkg/get-packages/node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -2370,29 +2011,26 @@ } }, "node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "@noble/hashes": "1.7.2" - }, - "engines": { - "node": "^14.21.3 || >=16" + "@noble/hashes": "1.3.2" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "dev": true, - "license": "MIT", + "peer": true, "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 16" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -2408,15 +2046,13 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT" + ] }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2430,7 +2066,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -2440,7 +2075,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2450,90 +2084,82 @@ } }, "node_modules/@nomicfoundation/edr": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.16.tgz", - "integrity": "sha512-bBL/nHmQwL1WCveALwg01VhJcpVVklJyunG1d/bhJbHgbjzAn6kohVJc7A6gFZegw+Rx38vdxpBkeCDjAEprzw==", + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.17.tgz", + "integrity": "sha512-Y8Kwqd5JpBmI/Kst6NJ/bZ81FeJea9J6WEwoSRTZnEvwfqW9dk9PI8zJs2UJpOACL1fXEPvN+doETbxT9EhwXA==", "dev": true, - "license": "MIT", "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.16", - "@nomicfoundation/edr-darwin-x64": "0.12.0-next.16", - "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.16", - "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.16", - "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.16", - "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.16", - "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.16" + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.17", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.17", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.17", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.17", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.17", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.17", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.17" }, "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.16.tgz", - "integrity": "sha512-no/8BPVBzVxDGGbDba0zsAxQmVNIq6SLjKzzhCxVKt4tatArXa6+24mr4jXJEmhVBvTNpQsNBO+MMpuEDVaTzQ==", + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.17.tgz", + "integrity": "sha512-gI9/9ysLeAid0+VSTBeutxOJ0/Rrh00niGkGL9+4lR577igDY+v55XGN0oBMST49ILS0f12J6ZY90LG8sxPXmQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.16.tgz", - "integrity": "sha512-tf36YbcC6po3XYRbi+v0gjwzqg1MvyRqVUujNMXPHgjNWATXNRNOLyjwt2qDn+RD15qtzk70SHVnz9n9mPWzwg==", + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.17.tgz", + "integrity": "sha512-zSZtwf584RkIyb8awELDt7ctskogH0p4pmqOC4vhykc8ODOv2XLuG1IgeE4WgYhWGZOufbCtgLfpJQrWqN6mmw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.16.tgz", - "integrity": "sha512-Kr6t9icKSaKtPVbb0TjUcbn3XHqXOGIn+KjKKSSpm6542OkL0HyOi06amh6/8CNke9Gf6Lwion8UJ0aGQhnFwA==", + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.17.tgz", + "integrity": "sha512-WjdfgV6B7gT5Q0NXtSIWyeK8gzaJX5HK6/jclYVHarWuEtS1LFgePYgMjK8rmm7IRTkM9RsE/PCuQEP1nrSsuA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.16.tgz", - "integrity": "sha512-HaStgfxctSg5PYF+6ooDICL1O59KrgM4XEUsIqoRrjrQax9HnMBXcB8eAj+0O52FWiO9FlchBni2dzh4RjQR2g==", + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.17.tgz", + "integrity": "sha512-26rObKhhCDb9JkZbToyr7JVZo4tSVAFvzoJSJVmvpOl0LOHrfFsgVQu2n/8cNkwMAqulPubKL2E0jdnmEoZjWA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.16.tgz", - "integrity": "sha512-8JPTxEZkwOPTgnN4uTWut9ze9R8rp7+T4IfmsKK9i+lDtdbJIxkrFY275YHG2BEYLd7Y5jTa/I4nC74ZpTAvpA==", + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.17.tgz", + "integrity": "sha512-dPkHScIf/CU6h6k3k4HNUnQyQcVSLKanviHCAcs5HkviiJPxvVtOMMvtNBxoIvKZRxGFxf2eutcqQW4ZV1wRQQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.16.tgz", - "integrity": "sha512-KugTrq3iHukbG64DuCYg8uPgiBtrrtX4oZSLba5sjocp0Ul6WWI1FeP1Qule+vClUrHSpJ+wR1G6SE7G0lyS/Q==", + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.17.tgz", + "integrity": "sha512-5Ixe/bpyWZxC3AjIb8EomAOK44ajemBVx/lZRHZiWSBlwQpbSWriYAtKjKcReQQPwuYVjnFpAD2AtuCvseIjHw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.12.0-next.16", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.16.tgz", - "integrity": "sha512-Idy0ZjurxElfSmepUKXh6QdptLbW5vUNeIaydvqNogWoTbkJIM6miqZd9lXUy1TYxY7G4Rx5O50c52xc4pFwXQ==", + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.17.tgz", + "integrity": "sha512-29YlvdgofSdXG1mUzIuH4kMXu1lmVc1hvYWUGWEH59L+LaakdhfJ/Wu5izeclKkrTh729Amtk/Hk1m29kFOO8A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 20" } @@ -2543,7 +2169,6 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.0.tgz", "integrity": "sha512-GPhBNafh1fCnVD9Y7BYvoLnblnvfcq3j8YDbO1gGe/1nOFWzGmV7gFu5DkwFXF+IpYsS+t96o9qc/mPu3V3Vfw==", "dev": true, - "license": "MIT", "dependencies": { "@types/chai-as-promised": "^7.1.3", "chai-as-promised": "^7.1.1", @@ -2558,11 +2183,10 @@ } }, "node_modules/@nomicfoundation/hardhat-ethers": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.2.tgz", - "integrity": "sha512-7xEaz2X8p47qWIAqtV2z03MmusheHm8bvY2mDlxo9JiT2BgSx59GSdv5+mzwOvsuKDbTij7oqDnwFyYOlHREEQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.3.tgz", + "integrity": "sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "debug": "^4.1.1", @@ -2570,7 +2194,7 @@ }, "peerDependencies": { "ethers": "^6.14.0", - "hardhat": "^2.26.0" + "hardhat": "^2.28.0" } }, "node_modules/@nomicfoundation/hardhat-network-helpers": { @@ -2578,7 +2202,6 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz", "integrity": "sha512-p7HaUVDbLj7ikFivQVNhnfMHUBgiHYMwQWvGn9AriieuopGOELIrwj2KjyM2a6z70zai5YKO264Vwz+3UFJZPQ==", "dev": true, - "license": "MIT", "dependencies": { "ethereumjs-util": "^7.1.4" }, @@ -2586,62 +2209,11 @@ "hardhat": "^2.26.0" } }, - "node_modules/@nomicfoundation/hardhat-verify": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.3.tgz", - "integrity": "sha512-danbGjPp2WBhLkJdQy9/ARM3WQIK+7vwzE0urNem1qZJjh9f54Kf5f1xuQv8DvqewUAkuPxVt/7q4Grz5WjqSg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "debug": "^4.1.1", - "lodash.clonedeep": "^4.5.0", - "picocolors": "^1.1.0", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "peerDependencies": { - "hardhat": "^2.26.0" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@nomicfoundation/slang": { "version": "0.18.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.18.3.tgz", "integrity": "sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ==", "dev": true, - "license": "MIT", "dependencies": { "@bytecodealliance/preview2-shim": "0.17.0" } @@ -2651,7 +2223,6 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12" }, @@ -2670,7 +2241,6 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -2681,7 +2251,6 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -2692,7 +2261,6 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -2703,7 +2271,6 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -2714,7 +2281,6 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -2725,7 +2291,6 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -2736,7 +2301,6 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -2747,7 +2311,6 @@ "resolved": "https://registry.npmjs.org/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz", "integrity": "sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw==", "dev": true, - "license": "Apache 2.0", "dependencies": { "@openzeppelin/contracts": "4.7.3", "@openzeppelin/contracts-upgradeable": "4.7.3" @@ -2757,29 +2320,25 @@ "version": "4.7.3", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@offchainlabs/upgrade-executor/node_modules/@openzeppelin/contracts-upgradeable": { "version": "4.7.3", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@openzeppelin/contracts": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.5.0.tgz", "integrity": "sha512-R8hq4zmKKWP2c7OxeRgAcjZwvF5W0Qq2OIX7degrtdM52Q9xYr4MLJdUAVPKGUewNJ1qo+M6YiZLLnNUnjP/gg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@openzeppelin/contracts-upgradeable": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.5.0.tgz", "integrity": "sha512-Va5hKG5oaK0EE5bXTVWugcGimMHazxL+SL523dH6WVbGiuLXwuWr9oxtLyPHQSVGtgmlIgtKNR5V+OUpCIUwFQ==", "dev": true, - "license": "MIT", "peerDependencies": { "@openzeppelin/contracts": "5.5.0" } @@ -2789,7 +2348,6 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-2.7.0.tgz", "integrity": "sha512-J5IpvbFfdIJM4IadBcXfhCXVdX2yEpaZtRR1ecq87d8CdkmmEpniYfef/yVlG98yekvu125LaIRg0yXQOt9Bdg==", "dev": true, - "license": "MIT", "dependencies": { "@aws-sdk/client-lambda": "^3.563.0", "amazon-cognito-identity-js": "^6.3.6", @@ -2801,7 +2359,6 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-2.7.0.tgz", "integrity": "sha512-YOHZmnHmM1y6uSqXWGfk2/5/ae4zZJE6xG92yFEAIOy8vqh1dxznWMsoCcAXRXTCWc8RdCDpFdMfEy4SBTyYtg==", "dev": true, - "license": "MIT", "dependencies": { "@openzeppelin/defender-sdk-base-client": "^2.7.0", "axios": "^1.7.4", @@ -2813,7 +2370,6 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-2.7.0.tgz", "integrity": "sha512-4CYWPa9+kSjojE5KS7kRmP161qsBATdp97TCrzyDdGoVahj0GyqgafRL9AAjm0eHZOM1c7EIYEpbvYRtFi8vyA==", "dev": true, - "license": "MIT", "dependencies": { "@openzeppelin/defender-sdk-base-client": "^2.7.0", "axios": "^1.7.4", @@ -2825,7 +2381,6 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.9.1.tgz", "integrity": "sha512-pSDjlOnIpP+PqaJVe144dK6VVKZw2v6YQusyt0OOLiCsl+WUzfo4D0kylax7zjrOxqy41EK2ipQeIF4T+cCn2A==", "dev": true, - "license": "MIT", "dependencies": { "@openzeppelin/defender-sdk-base-client": "^2.1.0", "@openzeppelin/defender-sdk-deploy-client": "^2.1.0", @@ -2852,22 +2407,11 @@ } } }, - "node_modules/@openzeppelin/hardhat-upgrades/node_modules/undici": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", - "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, "node_modules/@openzeppelin/upgrades-core": { "version": "1.44.2", "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.44.2.tgz", "integrity": "sha512-m6iorjyhPK9ow5/trNs7qsBC/SOzJCO51pvvAF2W9nOiZ1t0RtCd+rlRmRmlWTv4M33V0wzIUeamJ2BPbzgUXA==", "dev": true, - "license": "MIT", "dependencies": { "@nomicfoundation/slang": "^0.18.3", "bignumber.js": "^9.1.2", @@ -2889,15 +2433,13 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/@scroll-tech/contracts/-/contracts-0.1.0.tgz", "integrity": "sha512-aBbDOc3WB/WveZdpJYcrfvMYMz7ZTEiW8M9XMJLba8p9FAR5KGYB/cV+8+EUsq3MKt7C1BfR+WnXoTVdvwIY6w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@scure/base": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", "dev": true, - "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -2907,7 +2449,6 @@ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dev": true, - "license": "MIT", "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -2922,7 +2463,6 @@ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dev": true, - "license": "MIT", "dependencies": { "@noble/hashes": "1.4.0" }, @@ -2935,7 +2475,6 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 16" }, @@ -2948,7 +2487,6 @@ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, - "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -2958,7 +2496,6 @@ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dev": true, - "license": "MIT", "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -2972,7 +2509,6 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 16" }, @@ -2985,7 +2521,6 @@ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, - "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -2995,7 +2530,6 @@ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -3007,12 +2541,17 @@ "node": ">=6" } }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@sentry/hub": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", @@ -3022,12 +2561,17 @@ "node": ">=6" } }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@sentry/minimal": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", @@ -3037,12 +2581,17 @@ "node": ">=6" } }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@sentry/node": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -3058,12 +2607,17 @@ "node": ">=6" } }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@sentry/tracing": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", "dev": true, - "license": "MIT", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -3075,12 +2629,17 @@ "node": ">=6" } }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@sentry/types": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=6" } @@ -3090,7 +2649,6 @@ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" @@ -3099,66 +2657,55 @@ "node": ">=6" } }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@smithy/abort-controller": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.6.tgz", - "integrity": "sha512-P7JD4J+wxHMpGxqIg6SHno2tPkZbBUBLbPpR5/T1DEUvw/mEaINBMaPFZNM7lA+ToSCZ36j6nMHa+5kej+fhGg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.7.tgz", + "integrity": "sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/abort-controller/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/config-resolver": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.4.tgz", - "integrity": "sha512-s3U5ChS21DwU54kMmZ0UJumoS5cg0+rGVZvN6f5Lp6EbAVi0ZyP+qDSHdewfmXKUgNK1j3z45JyzulkDukrjAA==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.5.tgz", + "integrity": "sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.6", - "@smithy/types": "^4.10.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.6", - "@smithy/util-middleware": "^4.2.6", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/config-resolver/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/core": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.19.0.tgz", - "integrity": "sha512-Y9oHXpBcXQgYHOcAEmxjkDilUbSTkgKjoHYed3WaYUH8jngq8lPWDBSpjHblJ9uOgBdy5mh3pzebrScDdYr29w==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.20.0.tgz", + "integrity": "sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.2.7", - "@smithy/protocol-http": "^5.3.6", - "@smithy/types": "^4.10.0", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.6", - "@smithy/util-stream": "^4.5.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", "@smithy/util-utf8": "^4.2.0", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" @@ -3167,46 +2714,30 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/core/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.6.tgz", - "integrity": "sha512-xBmawExyTzOjbhzkZwg+vVm/khg28kG+rj2sbGlULjFd1jI70sv/cbpaR0Ev4Yfd6CpDUDRMe64cTqR//wAOyA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.7.tgz", + "integrity": "sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.6", - "@smithy/property-provider": "^4.2.6", - "@smithy/types": "^4.10.0", - "@smithy/url-parser": "^4.2.6", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/credential-provider-imds/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/eventstream-codec": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.6.tgz", - "integrity": "sha512-OZfsI+YRG26XZik/jKMMg37acnBSbUiK/8nETW3uM3mLj+0tMmFXdHQw1e5WEd/IHN8BGOh3te91SNDe2o4RHg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.7.tgz", + "integrity": "sha512-DrpkEoM3j9cBBWhufqBwnbbn+3nf1N9FP6xuVJ+e220jbactKuQgaZwjwP5CP1t+O94brm2JgVMD2atMGX3xIQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" }, @@ -3214,110 +2745,70 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-codec/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.6.tgz", - "integrity": "sha512-6OiaAaEbLB6dEkRbQyNzFSJv5HDvly3Mc6q/qcPd2uS/g3szR8wAIkh7UndAFKfMypNSTuZ6eCBmgCLR5LacTg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.7.tgz", + "integrity": "sha512-ujzPk8seYoDBmABDE5YqlhQZAXLOrtxtJLrbhHMKjBoG5b4dK4i6/mEU+6/7yXIAkqOO8sJ6YxZl+h0QQ1IJ7g==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.6", - "@smithy/types": "^4.10.0", + "@smithy/eventstream-serde-universal": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-browser/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.6.tgz", - "integrity": "sha512-xP5YXbOVRVN8A4pDnSUkEUsL9fYFU6VNhxo8tgr13YnMbf3Pn4xVr+hSyLVjS1Frfi1Uk03ET5Bwml4+0CeYEw==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.7.tgz", + "integrity": "sha512-x7BtAiIPSaNaWuzm24Q/mtSkv+BrISO/fmheiJ39PKRNH3RmH2Hph/bUKSOBOBC9unqfIYDhKTHwpyZycLGPVQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/eventstream-serde-node": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.6.tgz", - "integrity": "sha512-jhH7nJuaOpnTFcuZpWK9dqb6Ge2yGi1okTo0W6wkJrfwAm2vwmO74tF1v07JmrSyHBcKLQATEexclJw9K1Vj7w==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.7.tgz", + "integrity": "sha512-roySCtHC5+pQq5lK4be1fZ/WR6s/AxnPaLfCODIPArtN2du8s5Ot4mKVK3pPtijL/L654ws592JHJ1PbZFF6+A==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.6", - "@smithy/types": "^4.10.0", + "@smithy/eventstream-serde-universal": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-node/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.6.tgz", - "integrity": "sha512-olIfZ230B64TvPD6b0tPvrEp2eB0FkyL3KvDlqF4RVmIc/kn3orzXnV6DTQdOOW5UU+M5zKY3/BU47X420/oPw==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.7.tgz", + "integrity": "sha512-QVD+g3+icFkThoy4r8wVFZMsIP08taHVKjE6Jpmz8h5CgX/kk6pTODq5cht0OMtcapUx+xrPzUTQdA+TmO0m1g==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.2.6", - "@smithy/types": "^4.10.0", + "@smithy/eventstream-codec": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/eventstream-serde-universal/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.7.tgz", - "integrity": "sha512-fcVap4QwqmzQwQK9QU3keeEpCzTjnP9NJ171vI7GnD7nbkAIcP9biZhDUx88uRH9BabSsQDS0unUps88uZvFIQ==", + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.8.tgz", + "integrity": "sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.6", - "@smithy/querystring-builder": "^4.2.6", - "@smithy/types": "^4.10.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, @@ -3325,21 +2816,13 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/fetch-http-handler/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/hash-node": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.6.tgz", - "integrity": "sha512-k3Dy9VNR37wfMh2/1RHkFf/e0rMyN0pjY0FdyY6ItJRjENYyVPRMwad6ZR1S9HFm6tTuIOd9pqKBmtJ4VHxvxg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.7.tgz", + "integrity": "sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" @@ -3348,40 +2831,24 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/hash-node/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/invalid-dependency": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.6.tgz", - "integrity": "sha512-E4t/V/q2T46RY21fpfznd1iSLTvCXKNKo4zJ1QuEFN4SE9gKfu2vb6bgq35LpufkQ+SETWIC7ZAf2GGvTlBaMQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.7.tgz", + "integrity": "sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/invalid-dependency/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/is-array-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3389,76 +2856,52 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/is-array-buffer/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/middleware-content-length": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.6.tgz", - "integrity": "sha512-0cjqjyfj+Gls30ntq45SsBtqF3dfJQCeqQPyGz58Pk8OgrAr5YiB7ZvDzjCA94p4r6DCI4qLm7FKobqBjf515w==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.7.tgz", + "integrity": "sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.6", - "@smithy/types": "^4.10.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-content-length/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.0.tgz", - "integrity": "sha512-M6qWfUNny6NFNy8amrCGIb9TfOMUkHVtg9bHtEFGRgfH7A7AtPpn/fcrToGPjVDK1ECuMVvqGQOXcZxmu9K+7A==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.1.tgz", + "integrity": "sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.19.0", - "@smithy/middleware-serde": "^4.2.7", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", - "@smithy/url-parser": "^4.2.6", - "@smithy/util-middleware": "^4.2.6", + "@smithy/core": "^3.20.0", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-middleware": "^4.2.7", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-endpoint/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.16", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.16.tgz", - "integrity": "sha512-XPpNhNRzm3vhYm7YCsyw3AtmWggJbg1wNGAoqb7NBYr5XA5isMRv14jgbYyUV6IvbTBFZQdf2QpeW43LrRdStQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/service-error-classification": "^4.2.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", - "@smithy/util-middleware": "^4.2.6", - "@smithy/util-retry": "^4.2.6", + "version": "4.4.17", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.17.tgz", + "integrity": "sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==", + "dev": true, + "dependencies": { + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/service-error-classification": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, @@ -3466,153 +2909,97 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/middleware-serde": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.7.tgz", - "integrity": "sha512-PFMVHVPgtFECeu4iZ+4SX6VOQT0+dIpm4jSPLLL6JLSkp9RohGqKBKD0cbiXdeIFS08Forp0UHI6kc0gIHenSA==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.8.tgz", + "integrity": "sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.6", - "@smithy/types": "^4.10.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-serde/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/middleware-stack": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.6.tgz", - "integrity": "sha512-JSbALU3G+JS4kyBZPqnJ3hxIYwOVRV7r9GNQMS6j5VsQDo5+Es5nddLfr9TQlxZLNHPvKSh+XSB0OuWGfSWFcA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.7.tgz", + "integrity": "sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-stack/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/node-config-provider": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.6.tgz", - "integrity": "sha512-fYEyL59Qe82Ha1p97YQTMEQPJYmBS+ux76foqluaTVWoG9Px5J53w6NvXZNE3wP7lIicLDF7Vj1Em18XTX7fsA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.7.tgz", + "integrity": "sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/node-config-provider/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/node-http-handler": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.6.tgz", - "integrity": "sha512-Gsb9jf4ido5BhPfani4ggyrKDd3ZK+vTFWmUaZeFg5G3E5nhFmqiTzAIbHqmPs1sARuJawDiGMGR/nY+Gw6+aQ==", + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.7.tgz", + "integrity": "sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/querystring-builder": "^4.2.6", - "@smithy/types": "^4.10.0", + "@smithy/abort-controller": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/node-http-handler/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/property-provider": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.6.tgz", - "integrity": "sha512-a/tGSLPtaia2krbRdwR4xbZKO8lU67DjMk/jfY4QKt4PRlKML+2tL/gmAuhNdFDioO6wOq0sXkfnddNFH9mNUA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.7.tgz", + "integrity": "sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/property-provider/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/protocol-http": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.6.tgz", - "integrity": "sha512-qLRZzP2+PqhE3OSwvY2jpBbP0WKTZ9opTsn+6IWYI0SKVpbG+imcfNxXPq9fj5XeaUTr7odpsNpK6dmoiM1gJQ==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.7.tgz", + "integrity": "sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/protocol-http/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/querystring-builder": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.6.tgz", - "integrity": "sha512-MeM9fTAiD3HvoInK/aA8mgJaKQDvm8N0dKy6EiFaCfgpovQr4CaOkJC28XqlSRABM+sHdSQXbC8NZ0DShBMHqg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.7.tgz", + "integrity": "sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, @@ -3620,80 +3007,55 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-builder/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/querystring-parser": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.6.tgz", - "integrity": "sha512-YmWxl32SQRw/kIRccSOxzS/Ib8/b5/f9ex0r5PR40jRJg8X1wgM3KrR2In+8zvOGVhRSXgvyQpw9yOSlmfmSnA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.7.tgz", + "integrity": "sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/querystring-parser/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/service-error-classification": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.6.tgz", - "integrity": "sha512-Q73XBrzJlGTut2nf5RglSntHKgAG0+KiTJdO5QQblLfr4TdliGwIAha1iZIjwisc3rA5ulzqwwsYC6xrclxVQg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.7.tgz", + "integrity": "sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0" + "@smithy/types": "^4.11.0" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.1.tgz", - "integrity": "sha512-tph+oQYPbpN6NamF030hx1gb5YN2Plog+GLaRHpoEDwp8+ZPG26rIJvStG9hkWzN2HBn3HcWg0sHeB0tmkYzqA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.2.tgz", + "integrity": "sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/shared-ini-file-loader/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/signature-v4": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.6.tgz", - "integrity": "sha512-P1TXDHuQMadTMTOBv4oElZMURU4uyEhxhHfn+qOc2iofW9Rd4sZtBGx58Lzk112rIGVEYZT8eUMK4NftpewpRA==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.7.tgz", + "integrity": "sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.6", - "@smithy/types": "^4.10.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.6", + "@smithy/util-middleware": "^4.2.7", "@smithy/util-uri-escape": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" @@ -3702,45 +3064,29 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/signature-v4/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/smithy-client": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.1.tgz", - "integrity": "sha512-1ovWdxzYprhq+mWqiGZlt3kF69LJthuQcfY9BIyHx9MywTFKzFapluku1QXoaBB43GCsLDxNqS+1v30ure69AA==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.2.tgz", + "integrity": "sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.19.0", - "@smithy/middleware-endpoint": "^4.4.0", - "@smithy/middleware-stack": "^4.2.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/types": "^4.10.0", - "@smithy/util-stream": "^4.5.7", + "@smithy/core": "^3.20.0", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-stream": "^4.5.8", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/smithy-client/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/types": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.10.0.tgz", - "integrity": "sha512-K9mY7V/f3Ul+/Gz4LJANZ3vJ/yiBIwCyxe0sPT4vNJK63Srvd+Yk1IzP0t+nE7XFSpIGtzR71yljtnqpUTYFlQ==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.11.0.tgz", + "integrity": "sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3748,41 +3094,25 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/types/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/url-parser": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.6.tgz", - "integrity": "sha512-tVoyzJ2vXp4R3/aeV4EQjBDmCuWxRa8eo3KybL7Xv4wEM16nObYh7H1sNfcuLWHAAAzb0RVyxUz1S3sGj4X+Tg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.7.tgz", + "integrity": "sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^4.2.6", - "@smithy/types": "^4.10.0", + "@smithy/querystring-parser": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/url-parser/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-base64": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-utf8": "^4.2.0", @@ -3792,19 +3122,11 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-base64/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-body-length-browser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3812,19 +3134,11 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-body-length-browser/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-body-length-node": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3832,19 +3146,11 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-body-length-node/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-buffer-from": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" @@ -3853,19 +3159,11 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-buffer-from/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-config-provider": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3873,90 +3171,58 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-config-provider/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.15", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.15.tgz", - "integrity": "sha512-LiZQVAg/oO8kueX4c+oMls5njaD2cRLXRfcjlTYjhIqmwHnCwkQO5B3dMQH0c5PACILxGAQf6Mxsq7CjlDc76A==", + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.16.tgz", + "integrity": "sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.18", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.18.tgz", - "integrity": "sha512-Kw2J+KzYm9C9Z9nY6+W0tEnoZOofstVCMTshli9jhQbQCy64rueGfKzPfuFBnVUqZD9JobxTh2DzHmPkp/Va/Q==", + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.19.tgz", + "integrity": "sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.4.4", - "@smithy/credential-provider-imds": "^4.2.6", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/property-provider": "^4.2.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-endpoints": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.6.tgz", - "integrity": "sha512-v60VNM2+mPvgHCBXEfMCYrQ0RepP6u6xvbAkMenfe4Mi872CqNkJzgcnQL837e8NdeDxBgrWQRTluKq5Lqdhfg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.7.tgz", + "integrity": "sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.6", - "@smithy/types": "^4.10.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-endpoints/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-hex-encoding": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3964,66 +3230,42 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-hex-encoding/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-middleware": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.6.tgz", - "integrity": "sha512-qrvXUkxBSAFomM3/OEMuDVwjh4wtqK8D2uDZPShzIqOylPst6gor2Cdp6+XrH4dyksAWq/bE2aSDYBTTnj0Rxg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.7.tgz", + "integrity": "sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-middleware/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-retry": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.6.tgz", - "integrity": "sha512-x7CeDQLPQ9cb6xN7fRJEjlP9NyGW/YeXWc4j/RUhg4I+H60F0PEeRc2c/z3rm9zmsdiMFzpV/rT+4UHW6KM1SA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.7.tgz", + "integrity": "sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^4.2.6", - "@smithy/types": "^4.10.0", + "@smithy/service-error-classification": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-retry/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-stream": { - "version": "4.5.7", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.7.tgz", - "integrity": "sha512-Uuy4S5Aj4oF6k1z+i2OtIBJUns4mlg29Ph4S+CqjR+f4XXpSFVgTCYLzMszHJTicYDBxKFtwq2/QSEDSS5l02A==", + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.8.tgz", + "integrity": "sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.3.7", - "@smithy/node-http-handler": "^4.4.6", - "@smithy/types": "^4.10.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/types": "^4.11.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-hex-encoding": "^4.2.0", @@ -4034,19 +3276,11 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-stream/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-uri-escape": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -4054,19 +3288,11 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-uri-escape/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-utf8": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" @@ -4075,41 +3301,25 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/util-utf8/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/util-waiter": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.6.tgz", - "integrity": "sha512-xU9HwUSik9UUCJmm530yvBy0AwlQFICveKmqvaaTukKkXEAhyiBdHtSrhPrH3rH+uz0ykyaE3LdgsX86C6mDCQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.7.tgz", + "integrity": "sha512-vHJFXi9b7kUEpHWUCY3Twl+9NPOZvQ0SAi+Ewtn48mbiJk4JY9MZmKQjGB4SCvVb9WPiSphZJYY6RIbs+grrzw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.6", - "@smithy/types": "^4.10.0", + "@smithy/abort-controller": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/util-waiter/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/@smithy/uuid": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -4117,72 +3327,39 @@ "node": ">=18.0.0" } }, - "node_modules/@smithy/uuid/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", - "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } }, "node_modules/@types/bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/chai": { - "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, - "license": "MIT" + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } }, "node_modules/@types/chai-as-promised": { "version": "7.1.8", "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", "dev": true, - "license": "MIT", "dependencies": { "@types/chai": "*" } @@ -4192,37 +3369,36 @@ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, "node_modules/@types/form-data": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "24.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.2.tgz", - "integrity": "sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true }, "node_modules/@types/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4231,15 +3407,13 @@ "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/secp256k1": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4248,14 +3422,13 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "license": "BSD-2-Clause" + "dev": true }, "node_modules/@zksync/contracts": { "name": "era-contracts", "version": "0.1.0", "resolved": "git+ssh://git@github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9", - "integrity": "sha512-KhgPVqd/MgV/ICUEsQf1uyL321GNPqsyHSAPMCaa9vW94fbuQK6RwMWoyQOPlZP17cQD8tzLNCSXqz73652kow==", + "integrity": "sha512-Uke6C3HTDonp/sqP4SlNxU40YL9TK1ICCubcmEBryGQoZCa0z9oc3GSUZ1WBAHQ9HhLiHnpqpayFNmq9fZkK7Q==", "dev": true, "workspaces": { "packages": [ @@ -4269,42 +3442,11 @@ ] } }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.3.0" } @@ -4314,7 +3456,6 @@ "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/agent-base": { @@ -4322,7 +3463,6 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "4" }, @@ -4335,7 +3475,6 @@ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4344,31 +3483,11 @@ "node": ">=8" } }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/amazon-cognito-identity-js": { "version": "6.3.16", "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.16.tgz", "integrity": "sha512-HPGSBGD6Q36t99puWh0LnptxO/4icnk2kqIQ9cTJ2tFQo5NMUnWQIgtrTAk8nm+caqUbjDzXzG56GBjI2tS6jQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-js": "1.2.2", "buffer": "4.9.2", @@ -4382,7 +3501,6 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^1.2.2", "@aws-sdk/types": "^3.1.0", @@ -4394,19 +3512,23 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.1.0", "@aws-sdk/util-utf8-browser": "^3.0.0", "tslib": "^1.11.1" } }, + "node_modules/amazon-cognito-identity-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.1.0" } @@ -4416,7 +3538,6 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -4426,7 +3547,6 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -4442,7 +3562,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -4452,7 +3571,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4467,15 +3585,13 @@ "version": "0.5.0-alpha.4", "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true, - "license": "BSD-3-Clause" + "dev": true }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4484,28 +3600,17 @@ "node": ">= 8" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" + "dev": true }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -4515,7 +3620,6 @@ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4524,29 +3628,15 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/async-retry": { @@ -4554,34 +3644,21 @@ "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", "dev": true, - "license": "MIT", "dependencies": { "retry": "0.13.1" } }, - "node_modules/async-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 4.0.0" } @@ -4591,7 +3668,6 @@ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, - "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -4607,7 +3683,6 @@ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "dev": true, - "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", @@ -4618,15 +3693,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/base-x": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" } @@ -4649,22 +3722,19 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/better-path-resolve": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", "dev": true, - "license": "MIT", "dependencies": { "is-windows": "^1.0.0" }, @@ -4677,7 +3747,6 @@ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -4687,7 +3756,6 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -4699,29 +3767,25 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/bn.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/bowser": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -4744,7 +3808,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4757,7 +3820,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -4767,7 +3829,6 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -4779,22 +3840,19 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -4809,7 +3867,6 @@ "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dev": true, - "license": "MIT", "dependencies": { "base-x": "^3.0.2" } @@ -4819,7 +3876,6 @@ "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "dev": true, - "license": "MIT", "dependencies": { "bs58": "^4.0.0", "create-hash": "^1.1.0", @@ -4831,7 +3887,6 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, - "license": "MIT", "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -4842,29 +3897,19 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/buffer/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/bufio": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.2.3.tgz", "integrity": "sha512-5Tt66bRzYUSlVZatc0E92uDenreJ+DpTBmSAUwL4VSxJn3e6cUyYwx+PoqML0GRZatgA/VX8ybhxItF8InZgqA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -4874,7 +3919,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -4884,7 +3928,6 @@ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -4903,7 +3946,6 @@ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -4917,7 +3959,6 @@ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -4934,7 +3975,6 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4946,15 +3986,13 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true, - "license": "Apache-2.0" + "dev": true }, "node_modules/cbor": { "version": "10.0.11", "resolved": "https://registry.npmjs.org/cbor/-/cbor-10.0.11.tgz", "integrity": "sha512-vIwORDd/WyB8Nc23o2zNN5RrtFGlR6Fca61TtjkUXueI3Jf2DOZDl1zsshvBntZ3wZHBM9ztjnkXSmzQDaq3WA==", "dev": true, - "license": "MIT", "dependencies": { "nofilter": "^3.0.2" }, @@ -4967,7 +4005,6 @@ "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -4986,7 +4023,6 @@ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", "dev": true, - "license": "WTFPL", "dependencies": { "check-error": "^1.0.2" }, @@ -4994,12 +4030,20 @@ "chai": ">= 2.1.2 < 6" } }, + "node_modules/chai/node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5015,15 +4059,13 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": "*" } @@ -5033,7 +4075,6 @@ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -5046,7 +4087,6 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, - "license": "MIT", "dependencies": { "readdirp": "^4.0.1" }, @@ -5068,7 +4108,6 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], - "license": "MIT", "engines": { "node": ">=8" } @@ -5078,7 +4117,6 @@ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", @@ -5093,7 +4131,6 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -5103,7 +4140,6 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -5116,7 +4152,6 @@ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, - "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -5132,7 +4167,6 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -5144,7 +4178,6 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5156,15 +4189,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.1.90" } @@ -5174,7 +4205,6 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -5186,15 +4216,13 @@ "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12" } @@ -5203,15 +4231,13 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", @@ -5221,7 +4247,6 @@ "engines": [ "node >= 0.8" ], - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -5229,19 +4254,11 @@ "typedarray": "^0.0.6" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5256,15 +4273,13 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/concat-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -5274,7 +4289,6 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5283,15 +4297,13 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -5305,7 +4317,6 @@ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -5315,21 +4326,11 @@ "sha.js": "^2.4.8" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/cross-spawn": { "version": "6.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, - "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -5346,7 +4347,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } @@ -5356,7 +4356,6 @@ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": "*" } @@ -5365,15 +4364,13 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==", - "dev": true, - "license": "BSD-3-Clause" + "dev": true }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -5391,7 +4388,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -5404,7 +4400,6 @@ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, - "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -5417,7 +4412,6 @@ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -5435,7 +4429,6 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -5445,7 +4438,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5455,7 +4447,6 @@ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -5465,7 +4456,6 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -5475,7 +4465,6 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -5488,7 +4477,6 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=10" } @@ -5498,7 +4486,6 @@ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -5513,7 +4500,6 @@ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, - "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -5528,22 +4514,19 @@ "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -5557,7 +4540,6 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -5567,7 +4549,6 @@ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5577,7 +4558,6 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5587,7 +4567,6 @@ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -5600,7 +4579,6 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -5616,7 +4594,6 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -5626,7 +4603,6 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -5639,7 +4615,6 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -5653,7 +4628,6 @@ "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", "dev": true, - "license": "MIT", "dependencies": { "@solidity-parser/parser": "^0.14.0", "axios": "^1.5.1", @@ -5688,15 +4662,13 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT" + ] }, "node_modules/eth-gas-reporter/node_modules/@scure/base": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, - "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -5712,7 +4684,6 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@noble/secp256k1": "~1.7.0", @@ -5730,28 +4701,16 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@scure/base": "~1.1.0" } }, - "node_modules/eth-gas-reporter/node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, "node_modules/eth-gas-reporter/node_modules/ansi-regex": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -5761,7 +4720,6 @@ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", "dev": true, - "license": "MIT", "dependencies": { "object-assign": "^4.1.0", "string-width": "^2.1.1" @@ -5778,7 +4736,6 @@ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "dev": true, - "license": "MIT", "dependencies": { "@noble/hashes": "1.2.0", "@noble/secp256k1": "1.7.1", @@ -5801,7 +4758,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abi": "5.8.0", "@ethersproject/abstract-provider": "5.8.0", @@ -5840,7 +4796,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -5850,7 +4805,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, - "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -5864,7 +4818,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -5877,7 +4830,6 @@ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -5901,7 +4853,6 @@ "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, - "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -5928,7 +4879,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "peer": true, "dependencies": { "@adraffy/ens-normalize": "1.10.1", @@ -5943,40 +4893,11 @@ "node": ">=14.0.0" } }, - "node_modules/ethers/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethers/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/ethers/node_modules/@types/node": { "version": "22.7.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "undici-types": "~6.19.2" @@ -5987,46 +4908,13 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true, - "license": "0BSD", - "peer": true - }, - "node_modules/ethers/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT", "peer": true }, - "node_modules/ethers/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -6036,15 +4924,13 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, - "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -6058,24 +4944,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true + "dev": true }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -6087,25 +4962,6 @@ "node": ">=8.6.0" } }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause", - "optional": true, - "peer": true - }, "node_modules/fast-xml-parser": { "version": "5.2.5", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", @@ -6117,7 +4973,6 @@ "url": "https://github.com/sponsors/NaturalIntelligence" } ], - "license": "MIT", "dependencies": { "strnum": "^2.1.0" }, @@ -6130,7 +4985,6 @@ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -6140,7 +4994,6 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6153,7 +5006,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -6167,7 +5019,6 @@ "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "micromatch": "^4.0.2" } @@ -6177,7 +5028,6 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -6193,7 +5043,6 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -6208,7 +5057,6 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.2.7" }, @@ -6224,7 +5072,6 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -6240,15 +5087,13 @@ "version": "1.19.3", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -6262,15 +5107,13 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -6278,7 +5121,6 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -6292,7 +5134,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6302,7 +5143,6 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -6312,7 +5152,6 @@ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -6322,7 +5161,6 @@ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -6347,7 +5185,6 @@ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -6357,7 +5194,6 @@ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, - "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -6372,7 +5208,6 @@ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6392,7 +5227,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -6405,7 +5239,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6418,7 +5251,6 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -6439,7 +5271,6 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6451,19 +5282,17 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/hardhat": { - "version": "2.27.2", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.27.2.tgz", - "integrity": "sha512-2N51AWD3Hg9T+4+A1zmJ70RkJgHzK+JYASrRtSmD3nVsoceYrFxwIJHUucw5fuy7Z9x9JTSMGO5dgCYe7MX8FQ==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.0.tgz", + "integrity": "sha512-A3yBISI18EcnY2IR7Ny2xZF33Q3qH01yrWapeWbyGOiJm/386SasWjbHRHYgUlZ3YWJETIMh7wYfMUaXrofTDQ==", "dev": true, - "license": "MIT", "dependencies": { "@ethereumjs/util": "^9.1.0", "@ethersproject/abi": "^5.1.2", - "@nomicfoundation/edr": "0.12.0-next.16", + "@nomicfoundation/edr": "0.12.0-next.17", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "adm-zip": "^0.4.16", @@ -6522,7 +5351,6 @@ "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.1.tgz", "integrity": "sha512-/PPQQbUMgW6ERzk8M0/DA8/v2TEM9xRRAnF9qKPNMYF6FX5DFWcnxBsQvtp8uBz+vy7rmLyV9Elti2wmmhgkbg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.0.0", "cli-table3": "^0.6.0", @@ -6537,7 +5365,6 @@ "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", "dev": true, - "license": "MIT", "dependencies": { "array-uniq": "1.0.3", "eth-gas-reporter": "^0.2.25", @@ -6557,15 +5384,13 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "license": "MIT" + ] }, "node_modules/hardhat/node_modules/@scure/base": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, - "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -6581,7 +5406,6 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@noble/secp256k1": "~1.7.0", @@ -6599,7 +5423,6 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@scure/base": "~1.1.0" @@ -6609,15 +5432,13 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/hardhat/node_modules/ethereum-cryptography": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "dev": true, - "license": "MIT", "dependencies": { "@noble/hashes": "1.2.0", "@noble/secp256k1": "1.7.1", @@ -6630,7 +5451,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -6647,7 +5467,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -6663,7 +5482,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -6679,7 +5497,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -6695,17 +5512,27 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, + "node_modules/hardhat/node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/hardhat/node_modules/ws": { "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -6727,7 +5554,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6737,7 +5563,6 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -6750,7 +5575,6 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6763,7 +5587,6 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -6779,7 +5602,6 @@ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "^2.3.8", @@ -6790,19 +5612,11 @@ "node": ">= 0.8" } }, - "node_modules/hash-base/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/hash-base/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6817,15 +5631,13 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/hash-base/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -6834,15 +5646,13 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -6853,7 +5663,6 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -6866,7 +5675,6 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "bin": { "he": "bin/he" } @@ -6876,7 +5684,6 @@ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, - "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -6888,7 +5695,6 @@ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", "dev": true, - "license": "MIT", "dependencies": { "caseless": "^0.12.0", "concat-stream": "^1.6.2", @@ -6904,7 +5710,6 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", @@ -6925,7 +5730,6 @@ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^10.0.3" } @@ -6934,15 +5738,13 @@ "version": "10.17.60", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -6955,15 +5757,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -6989,15 +5789,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } @@ -7006,15 +5804,13 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7025,7 +5821,6 @@ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7035,15 +5830,13 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/io-ts": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", "dev": true, - "license": "MIT", "dependencies": { "fp-ts": "^1.0.0" } @@ -7053,7 +5846,6 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7066,7 +5858,6 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7079,7 +5870,6 @@ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, - "license": "MIT", "dependencies": { "ci-info": "^2.0.0" }, @@ -7091,15 +5881,13 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -7115,7 +5903,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7125,7 +5912,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7135,7 +5921,6 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -7148,7 +5933,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -7158,7 +5942,6 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7168,7 +5951,6 @@ "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", "dev": true, - "license": "MIT", "dependencies": { "better-path-resolve": "1.0.0" }, @@ -7181,7 +5963,6 @@ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, - "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" }, @@ -7197,7 +5978,6 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -7210,7 +5990,6 @@ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7220,7 +5999,6 @@ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, - "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -7229,25 +6007,22 @@ } }, "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/isomorphic-unfetch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", "dev": true, - "license": "MIT", "dependencies": { "node-fetch": "^2.6.1", "unfetch": "^4.2.0" @@ -7257,22 +6032,19 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -7280,21 +6052,11 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/json-stream-stringify": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", "dev": true, - "license": "MIT", "engines": { "node": ">=7.10.1" } @@ -7304,7 +6066,6 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -7315,7 +6076,6 @@ "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -7330,7 +6090,6 @@ "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.11" } @@ -7340,7 +6099,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -7352,17 +6110,7 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true + "dev": true }, "node_modules/lodash.isequal": { "version": "4.5.0", @@ -7370,31 +6118,19 @@ "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", "dev": true, - "license": "MIT", "peer": true }, "node_modules/lodash.startcase": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -7411,7 +6147,6 @@ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } @@ -7420,31 +6155,19 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true + "dev": true }, "node_modules/markdown-table": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -7454,7 +6177,6 @@ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, - "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -7475,7 +6197,6 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -7485,33 +6206,57 @@ "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", "dev": true, - "license": "MIT", "dependencies": { "@noble/curves": "~1.8.1", "@noble/hashes": "~1.7.1", "micro-packed": "~0.7.2" } }, - "node_modules/micro-packed": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", - "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", + "node_modules/micro-eth-signer/node_modules/@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", "dev": true, - "license": "MIT", "dependencies": { - "@scure/base": "~1.2.5" + "@noble/hashes": "1.7.2" + }, + "engines": { + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { + "node_modules/micro-eth-signer/node_modules/@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "dev": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/micro-packed": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", + "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", + "dev": true, + "dependencies": { + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" }, @@ -7524,7 +6269,6 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7534,7 +6278,6 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -7546,22 +6289,19 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7577,7 +6317,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7587,7 +6326,6 @@ "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", "dev": true, - "license": "MIT", "dependencies": { "obliterator": "^2.0.0" } @@ -7597,7 +6335,6 @@ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -7633,7 +6370,6 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -7658,7 +6394,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7675,7 +6410,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -7691,7 +6425,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7704,7 +6437,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -7720,7 +6452,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -7736,7 +6467,6 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -7749,7 +6479,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7765,7 +6494,6 @@ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -7774,29 +6502,25 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -7817,7 +6541,6 @@ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "dev": true, - "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -7829,7 +6552,6 @@ "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.19" } @@ -7839,7 +6561,6 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7849,7 +6570,6 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7859,7 +6579,6 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7871,15 +6590,13 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "dependencies": { "wrappy": "1" } @@ -7889,7 +6606,6 @@ "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, - "license": "MIT", "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -7905,15 +6621,13 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7922,15 +6636,13 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/p-filter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, - "license": "MIT", "dependencies": { "p-map": "^2.0.0" }, @@ -7943,7 +6655,6 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -7953,7 +6664,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -7969,7 +6679,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -7982,7 +6691,6 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, - "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -7998,7 +6706,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -8008,7 +6715,6 @@ "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", "dev": true, - "license": "MIT", "dependencies": { "quansync": "^0.2.7" } @@ -8024,7 +6730,6 @@ "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", "dev": true, - "license": "MIT", "dependencies": { "@yarnpkg/lockfile": "^1.1.0", "chalk": "^4.1.2", @@ -8054,7 +6759,6 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, - "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -8070,7 +6774,6 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, - "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -8083,7 +6786,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } @@ -8093,7 +6795,6 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -8103,7 +6804,6 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -8113,7 +6813,6 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -8123,7 +6822,6 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8133,7 +6831,6 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -8142,15 +6839,13 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -8160,7 +6855,6 @@ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -8170,7 +6864,6 @@ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", "dev": true, - "license": "MIT", "dependencies": { "create-hash": "^1.2.0", "create-hmac": "^1.1.7", @@ -8187,15 +6880,13 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -8208,7 +6899,6 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -8218,7 +6908,6 @@ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -8228,7 +6917,6 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -8243,15 +6931,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dev": true, - "license": "MIT", "dependencies": { "asap": "~2.0.6" } @@ -8261,26 +6947,32 @@ "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, + "node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" }, @@ -8305,8 +6997,7 @@ "type": "individual", "url": "https://github.com/sponsors/sxzz" } - ], - "license": "MIT" + ] }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -8326,15 +7017,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -8344,7 +7033,6 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", @@ -8360,7 +7048,6 @@ "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.5", "js-yaml": "^3.6.1", @@ -8376,7 +7063,6 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -8386,7 +7072,6 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -8400,7 +7085,6 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -8415,7 +7099,6 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 14.18.0" }, @@ -8429,7 +7112,6 @@ "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", "dev": true, - "license": "MIT", "dependencies": { "req-from": "^2.0.0" }, @@ -8442,7 +7124,6 @@ "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", "dev": true, - "license": "MIT", "dependencies": { "resolve-from": "^3.0.0" }, @@ -8455,7 +7136,6 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -8465,19 +7145,6 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -8487,7 +7154,6 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, - "license": "MIT", "dependencies": { "path-parse": "^1.0.6" }, @@ -8500,17 +7166,15 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } @@ -8520,7 +7184,6 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -8532,7 +7195,6 @@ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -8545,7 +7207,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8557,7 +7218,6 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8578,7 +7238,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8591,7 +7250,6 @@ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", "dev": true, - "license": "MIT", "dependencies": { "hash-base": "^3.1.2", "inherits": "^2.0.4" @@ -8605,7 +7263,6 @@ "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "dev": true, - "license": "MPL-2.0", "dependencies": { "bn.js": "^5.2.0" }, @@ -8632,7 +7289,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -8655,52 +7311,40 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/secp256k1": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", - "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { - "elliptic": "^6.5.7", - "node-addon-api": "^5.0.0", + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=10.0.0" } }, - "node_modules/secp256k1/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "dev": true, - "license": "MIT" - }, "node_modules/semver": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -8713,7 +7357,6 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -8723,7 +7366,6 @@ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -8740,22 +7382,19 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/sha.js": { "version": "2.4.12", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "dev": true, - "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1", @@ -8776,7 +7415,6 @@ "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "charenc": ">= 0.0.1", "crypt": ">= 0.0.1" @@ -8790,7 +7428,6 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -8803,7 +7440,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8813,7 +7449,6 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -8833,7 +7468,6 @@ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -8850,7 +7484,6 @@ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -8869,7 +7502,6 @@ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -8888,45 +7520,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, "node_modules/solc": { "version": "0.8.26", "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", "dev": true, - "license": "MIT", "dependencies": { "command-exists": "^1.2.8", "commander": "^8.1.0", @@ -8948,7 +7557,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } @@ -8957,15 +7565,13 @@ "version": "0.4.61", "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.61.tgz", "integrity": "sha512-OYBJYcYyG7gLV0VuXl9CUrvgJXjV/v0XnR4+1YomVe3q+QyENQXJJxAEASUz4vN6lMAl+C8RSRSr5MBAz09f6w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -8975,7 +7581,6 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -8986,7 +7591,6 @@ "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", "dev": true, - "license": "SEE LICENSE IN LICENSE", "dependencies": { "cross-spawn": "^7.0.5", "signal-exit": "^4.0.1" @@ -8997,7 +7601,6 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -9012,7 +7615,6 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -9022,7 +7624,6 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -9035,7 +7636,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -9045,7 +7645,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC", "engines": { "node": ">=14" }, @@ -9058,7 +7657,6 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -9073,15 +7671,13 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" + "dev": true }, "node_modules/stacktrace-parser": { "version": "0.1.11", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.7.1" }, @@ -9094,7 +7690,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -9104,7 +7699,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -9114,7 +7708,6 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -9124,7 +7717,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9139,7 +7731,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -9152,7 +7743,6 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -9162,7 +7752,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -9180,15 +7769,13 @@ "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" } - ], - "license": "MIT" + ] }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9201,7 +7788,6 @@ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", "dev": true, - "license": "MIT", "dependencies": { "http-response-object": "^3.0.1", "sync-rpc": "^1.2.1", @@ -9216,36 +7802,15 @@ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", "dev": true, - "license": "MIT", "dependencies": { "get-port": "^3.1.0" } }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/term-size": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -9258,7 +7823,6 @@ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", "dev": true, - "license": "MIT", "dependencies": { "@types/concat-stream": "^1.6.0", "@types/form-data": "0.0.33", @@ -9280,15 +7844,13 @@ "version": "8.10.66", "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/then-request/node_modules/form-data": { "version": "2.5.5", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -9306,7 +7868,6 @@ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, - "license": "MIT", "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" @@ -9323,7 +7884,6 @@ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.0.0" }, @@ -9341,7 +7901,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -9354,7 +7913,6 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -9367,7 +7925,6 @@ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", "dev": true, - "license": "MIT", "dependencies": { "isarray": "^2.0.5", "safe-buffer": "^5.2.1", @@ -9377,12 +7934,17 @@ "node": ">= 0.4" } }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -9395,7 +7957,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6" } @@ -9404,87 +7965,25 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.3.1" - } + "dev": true }, "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true }, "node_modules/tsort": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/type-detect": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -9494,7 +7993,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -9507,7 +8005,6 @@ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -9521,58 +8018,35 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } + "dev": true }, "node_modules/undici": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", - "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", + "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", "dev": true, - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, "engines": { - "node": ">=14.0" + "node": ">=18.17" } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, - "license": "MIT" + "peer": true }, "node_modules/unfetch": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -9582,7 +8056,6 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -9591,41 +8064,28 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" + "dev": true }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -9636,7 +8096,6 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -9649,7 +8108,6 @@ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -9671,7 +8129,6 @@ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, - "license": "MIT", "dependencies": { "string-width": "^4.0.0" }, @@ -9683,15 +8140,13 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true, - "license": "Apache-2.0" + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9708,15 +8163,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, - "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -9738,7 +8192,6 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } @@ -9748,7 +8201,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 6" } @@ -9758,7 +8210,6 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -9777,7 +8228,6 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } @@ -9787,7 +8237,6 @@ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -9798,24 +8247,11 @@ "node": ">=10" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -9823,5 +8259,6286 @@ "url": "https://github.com/sponsors/sindresorhus" } } + }, + "dependencies": { + "@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true, + "peer": true + }, + "@arbitrum/nitro-contracts": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-1.1.1.tgz", + "integrity": "sha512-4Tyk3XVHz+bm8UujUC78LYSw3xAxyYvBCxfEX4z3qE4/ww7Qck/rmce5gbHMzQjArEAzAP2YSfYIFuIFuRXtfg==", + "dev": true, + "requires": { + "@offchainlabs/upgrade-executor": "1.1.0-beta.0", + "@openzeppelin/contracts": "4.5.0", + "@openzeppelin/contracts-upgradeable": "4.5.2", + "patch-package": "^6.4.7" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz", + "integrity": "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==", + "dev": true + }, + "@openzeppelin/contracts-upgradeable": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", + "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==", + "dev": true + } + } + }, + "@arbitrum/token-bridge-contracts": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@arbitrum/token-bridge-contracts/-/token-bridge-contracts-1.1.2.tgz", + "integrity": "sha512-k7AZXiB2HFecJ1KfaDBqgOKe3Loo1ttGLC7hUOVB+0YrihIR6cYpJRuqKSKK4YCy+FF21AUDtaG3x57OFM667Q==", + "dev": true, + "requires": { + "@arbitrum/nitro-contracts": "^1.0.0-beta.8", + "@offchainlabs/upgrade-executor": "1.1.0-beta.0", + "@openzeppelin/contracts": "4.8.3", + "@openzeppelin/contracts-upgradeable": "4.8.3", + "@openzeppelin/upgrades-core": "^1.24.1" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", + "dev": true + }, + "@openzeppelin/contracts-upgradeable": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz", + "integrity": "sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg==", + "dev": true + } + } + }, + "@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "dev": true, + "requires": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dev": true, + "requires": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "requires": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } + } + } + }, + "@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dev": true, + "requires": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "requires": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } + } + } + }, + "@aws-sdk/client-lambda": { + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.955.0.tgz", + "integrity": "sha512-pqA6Eo+JAJMze9/mr8BOSE6pognA6RyOc6htVrTCricZm8x6ak+babyOsg3ZULqqpBjLWNCHa3wNybCGQkMesQ==", + "dev": true, + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/credential-provider-node": "3.955.0", + "@aws-sdk/middleware-host-header": "3.953.0", + "@aws-sdk/middleware-logger": "3.953.0", + "@aws-sdk/middleware-recursion-detection": "3.953.0", + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/region-config-resolver": "3.953.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@aws-sdk/util-user-agent-browser": "3.953.0", + "@aws-sdk/util-user-agent-node": "3.954.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/core": "^3.19.0", + "@smithy/eventstream-serde-browser": "^4.2.6", + "@smithy/eventstream-serde-config-resolver": "^4.3.6", + "@smithy/eventstream-serde-node": "^4.2.6", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/hash-node": "^4.2.6", + "@smithy/invalid-dependency": "^4.2.6", + "@smithy/middleware-content-length": "^4.2.6", + "@smithy/middleware-endpoint": "^4.4.0", + "@smithy/middleware-retry": "^4.4.16", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/middleware-stack": "^4.2.6", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.15", + "@smithy/util-defaults-mode-node": "^4.2.18", + "@smithy/util-endpoints": "^3.2.6", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-retry": "^4.2.6", + "@smithy/util-stream": "^4.5.7", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.6", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/client-sso": { + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.955.0.tgz", + "integrity": "sha512-+nym5boDFt2ksba0fElocMKxCFJbJcd31PI3502hoI1N5VK7HyxkQeBtQJ64JYomvw8eARjWWC13hkB0LtZILw==", + "dev": true, + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/middleware-host-header": "3.953.0", + "@aws-sdk/middleware-logger": "3.953.0", + "@aws-sdk/middleware-recursion-detection": "3.953.0", + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/region-config-resolver": "3.953.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@aws-sdk/util-user-agent-browser": "3.953.0", + "@aws-sdk/util-user-agent-node": "3.954.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/core": "^3.19.0", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/hash-node": "^4.2.6", + "@smithy/invalid-dependency": "^4.2.6", + "@smithy/middleware-content-length": "^4.2.6", + "@smithy/middleware-endpoint": "^4.4.0", + "@smithy/middleware-retry": "^4.4.16", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/middleware-stack": "^4.2.6", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.15", + "@smithy/util-defaults-mode-node": "^4.2.18", + "@smithy/util-endpoints": "^3.2.6", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-retry": "^4.2.6", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/core": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.954.0.tgz", + "integrity": "sha512-5oYO5RP+mvCNXNj8XnF9jZo0EP0LTseYOJVNQYcii1D9DJqzHL3HJWurYh7cXxz7G7eDyvVYA01O9Xpt34TdoA==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.953.0", + "@aws-sdk/xml-builder": "3.953.0", + "@smithy/core": "^3.19.0", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/signature-v4": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.954.0.tgz", + "integrity": "sha512-2HNkqBjfsvyoRuPAiFh86JBFMFyaCNhL4VyH6XqwTGKZffjG7hdBmzXPy7AT7G3oFh1k/1Zc27v0qxaKoK7mBA==", + "dev": true, + "requires": { + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-http": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.954.0.tgz", + "integrity": "sha512-CrWD5300+NE1OYRnSVDxoG7G0b5cLIZb7yp+rNQ5Jq/kqnTmyJXpVAsivq+bQIDaGzPXhadzpAMIoo7K/aHaag==", + "dev": true, + "requires": { + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/util-stream": "^4.5.7", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.955.0.tgz", + "integrity": "sha512-90isLovxsPzaaSx3IIUZuxym6VXrsRetnQ3AuHr2kiTFk2pIzyIwmi+gDcUaLXQ5nNBoSj1Z/4+i1vhxa1n2DQ==", + "dev": true, + "requires": { + "@aws-sdk/core": "3.954.0", + "@aws-sdk/credential-provider-env": "3.954.0", + "@aws-sdk/credential-provider-http": "3.954.0", + "@aws-sdk/credential-provider-login": "3.955.0", + "@aws-sdk/credential-provider-process": "3.954.0", + "@aws-sdk/credential-provider-sso": "3.955.0", + "@aws-sdk/credential-provider-web-identity": "3.955.0", + "@aws-sdk/nested-clients": "3.955.0", + "@aws-sdk/types": "3.953.0", + "@smithy/credential-provider-imds": "^4.2.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-login": { + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.955.0.tgz", + "integrity": "sha512-xlkmSvg8oDN5LIxLAq3N1QWK8F8gUAsBWZlp1IX8Lr5XhcKI3GVarIIUcZrvCy1NjzCd/LDXYdNL6MRlNP4bAw==", + "dev": true, + "requires": { + "@aws-sdk/core": "3.954.0", + "@aws-sdk/nested-clients": "3.955.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.955.0.tgz", + "integrity": "sha512-XIL4QB+dPOJA6DRTmYZL52wFcLTslb7V1ydS4FCNT2DVLhkO4ExkPP+pe5YmIpzt/Our1ugS+XxAs3e6BtyFjA==", + "dev": true, + "requires": { + "@aws-sdk/credential-provider-env": "3.954.0", + "@aws-sdk/credential-provider-http": "3.954.0", + "@aws-sdk/credential-provider-ini": "3.955.0", + "@aws-sdk/credential-provider-process": "3.954.0", + "@aws-sdk/credential-provider-sso": "3.955.0", + "@aws-sdk/credential-provider-web-identity": "3.955.0", + "@aws-sdk/types": "3.953.0", + "@smithy/credential-provider-imds": "^4.2.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.954.0.tgz", + "integrity": "sha512-Y1/0O2LgbKM8iIgcVj/GNEQW6p90LVTCOzF2CI1pouoKqxmZ/1F7F66WHoa6XUOfKaCRj/R6nuMR3om9ThaM5A==", + "dev": true, + "requires": { + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.955.0.tgz", + "integrity": "sha512-Y99KI73Fn8JnB4RY5Ls6j7rd5jmFFwnY9WLHIWeJdc+vfwL6Bb1uWKW3+m/B9+RC4Xoz2nQgtefBcdWq5Xx8iw==", + "dev": true, + "requires": { + "@aws-sdk/client-sso": "3.955.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/token-providers": "3.955.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.955.0.tgz", + "integrity": "sha512-+lFxkZ2Vz3qp/T68ZONKzWVTQvomTu7E6tts1dfAbEcDt62Y/nPCByq/C2hQj+TiN05HrUx+yTJaGHBklhkbqA==", + "dev": true, + "requires": { + "@aws-sdk/core": "3.954.0", + "@aws-sdk/nested-clients": "3.955.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.953.0.tgz", + "integrity": "sha512-jTGhfkONav+r4E6HLOrl5SzBqDmPByUYCkyB/c/3TVb8jX3wAZx8/q9bphKpCh+G5ARi3IdbSisgkZrJYqQ19Q==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.953.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.953.0.tgz", + "integrity": "sha512-PlWdVYgcuptkIC0ZKqVUhWNtSHXJSx7U9V8J7dJjRmsXC40X7zpEycvrkzDMJjeTDGcCceYbyYAg/4X1lkcIMw==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.953.0", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.953.0.tgz", + "integrity": "sha512-cmIJx0gWeesUKK4YwgE+VQL3mpACr3/J24fbwnc1Z5tntC86b+HQFzU5vsBDw6lLwyD46dBgWdsXFh1jL+ZaFw==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.953.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.954.0.tgz", + "integrity": "sha512-5PX8JDe3dB2+MqXeGIhmgFnm2rbVsSxhz+Xyuu1oxLtbOn+a9UDA+sNBufEBjt3UxWy5qwEEY1fxdbXXayjlGg==", + "dev": true, + "requires": { + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@smithy/core": "^3.19.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/nested-clients": { + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.955.0.tgz", + "integrity": "sha512-RBi6CQHbPF09kqXAoiEOOPkVnSoU5YppKoOt/cgsWfoMHwC+7itIrEv+yRD62h14jIjF3KngVIQIrBRbX3o3/Q==", + "dev": true, + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/middleware-host-header": "3.953.0", + "@aws-sdk/middleware-logger": "3.953.0", + "@aws-sdk/middleware-recursion-detection": "3.953.0", + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/region-config-resolver": "3.953.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@aws-sdk/util-user-agent-browser": "3.953.0", + "@aws-sdk/util-user-agent-node": "3.954.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/core": "^3.19.0", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/hash-node": "^4.2.6", + "@smithy/invalid-dependency": "^4.2.6", + "@smithy/middleware-content-length": "^4.2.6", + "@smithy/middleware-endpoint": "^4.4.0", + "@smithy/middleware-retry": "^4.4.16", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/middleware-stack": "^4.2.6", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.15", + "@smithy/util-defaults-mode-node": "^4.2.18", + "@smithy/util-endpoints": "^3.2.6", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-retry": "^4.2.6", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/region-config-resolver": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.953.0.tgz", + "integrity": "sha512-5MJgnsc+HLO+le0EK1cy92yrC7kyhGZSpaq8PcQvKs9qtXCXT5Tb6tMdkr5Y07JxYsYOV1omWBynvL6PWh08tQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.953.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/token-providers": { + "version": "3.955.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.955.0.tgz", + "integrity": "sha512-LVpWkxXvMPgZofP2Gc8XBfQhsyecBMVARDHWMvks6vPbCLSTM7dw6H1HI9qbGNCurYcyc2xBRAkEDhChQlbPPg==", + "dev": true, + "requires": { + "@aws-sdk/core": "3.954.0", + "@aws-sdk/nested-clients": "3.955.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/types": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.953.0.tgz", + "integrity": "sha512-M9Iwg9kTyqTErI0vOTVVpcnTHWzS3VplQppy8MuL02EE+mJ0BIwpWfsaAPQW+/XnVpdNpWZTsHcNE29f1+hR8g==", + "dev": true, + "requires": { + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-endpoints": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.953.0.tgz", + "integrity": "sha512-rjaS6jrFksopXvNg6YeN+D1lYwhcByORNlFuYesFvaQNtPOufbE5tJL4GJ3TMXyaY0uFR28N5BHHITPyWWfH/g==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.953.0", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "@smithy/util-endpoints": "^3.2.6", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-locate-window": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.953.0.tgz", + "integrity": "sha512-mPxK+I1LcrgC/RSa3G5AMAn8eN2Ay0VOgw8lSRmV1jCtO+iYvNeCqOdxoJUjOW6I5BA4niIRWqVORuRP07776Q==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.953.0.tgz", + "integrity": "sha512-UF5NeqYesWuFao+u7LJvpV1SJCaLml5BtFZKUdTnNNMeN6jvV+dW/eQoFGpXF94RCqguX0XESmRuRRPQp+/rzQ==", + "dev": true, + "requires": { + "@aws-sdk/types": "3.953.0", + "@smithy/types": "^4.10.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.954.0.tgz", + "integrity": "sha512-fB5S5VOu7OFkeNzcblQlez4AjO5hgDFaa7phYt7716YWisY3RjAaQPlxgv+G3GltHHDJIfzEC5aRxdf62B9zMg==", + "dev": true, + "requires": { + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/types": "^4.10.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dev": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/xml-builder": { + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.953.0.tgz", + "integrity": "sha512-Zmrj21jQ2OeOJGr9spPiN00aQvXa/WUqRXcTVENhrMt+OFoSOfDFpYhUj9NQ09QmQ8KMWFoWuWW6iKurNqLvAA==", + "dev": true, + "requires": { + "@smithy/types": "^4.10.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + } + }, + "@aws/lambda-invoke-store": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", + "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", + "dev": true + }, + "@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true + }, + "@bytecodealliance/preview2-shim": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz", + "integrity": "sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==", + "dev": true + }, + "@chainlink/contracts": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.3.0.tgz", + "integrity": "sha512-Vk93nijTC5iRFW/L6FKUzeMuJy7k5dNzAtqlHpdreqtzL7efO/qXbYCkqjJFNXGurfOXVehHlehFoH4tWvSbfw==", + "dev": true, + "requires": { + "@arbitrum/nitro-contracts": "1.1.1", + "@arbitrum/token-bridge-contracts": "1.1.2", + "@changesets/changelog-github": "^0.5.0", + "@changesets/cli": "~2.27.8", + "@eth-optimism/contracts": "0.6.0", + "@openzeppelin/contracts": "4.9.3", + "@openzeppelin/contracts-upgradeable": "4.9.3", + "@scroll-tech/contracts": "0.1.0", + "@zksync/contracts": "git+https://github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9", + "semver": "^7.6.3" + }, + "dependencies": { + "@eth-optimism/contracts": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", + "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", + "dev": true, + "requires": { + "@eth-optimism/core-utils": "0.12.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0" + } + }, + "@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==", + "dev": true + }, + "@openzeppelin/contracts-upgradeable": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", + "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==", + "dev": true + }, + "ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "dev": true, + "peer": true, + "requires": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + } + } + }, + "@changesets/apply-release-plan": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.14.tgz", + "integrity": "sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==", + "dev": true, + "requires": { + "@changesets/config": "^3.1.2", + "@changesets/get-version-range-type": "^0.4.0", + "@changesets/git": "^3.0.4", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" + } + }, + "@changesets/assemble-release-plan": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", + "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", + "dev": true, + "requires": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.3", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "semver": "^7.5.3" + } + }, + "@changesets/changelog-git": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", + "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", + "dev": true, + "requires": { + "@changesets/types": "^6.1.0" + } + }, + "@changesets/changelog-github": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.5.2.tgz", + "integrity": "sha512-HeGeDl8HaIGj9fQHo/tv5XKQ2SNEi9+9yl1Bss1jttPqeiASRXhfi0A2wv8yFKCp07kR1gpOI5ge6+CWNm1jPw==", + "dev": true, + "requires": { + "@changesets/get-github-info": "^0.7.0", + "@changesets/types": "^6.1.0", + "dotenv": "^8.1.0" + } + }, + "@changesets/cli": { + "version": "2.27.12", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.12.tgz", + "integrity": "sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==", + "dev": true, + "requires": { + "@changesets/apply-release-plan": "^7.0.8", + "@changesets/assemble-release-plan": "^6.0.5", + "@changesets/changelog-git": "^0.2.0", + "@changesets/config": "^3.0.5", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/get-release-plan": "^4.0.6", + "@changesets/git": "^3.0.2", + "@changesets/logger": "^0.1.1", + "@changesets/pre": "^2.0.1", + "@changesets/read": "^0.6.2", + "@changesets/should-skip-package": "^0.1.1", + "@changesets/types": "^6.0.0", + "@changesets/write": "^0.3.2", + "@manypkg/get-packages": "^1.1.3", + "ansi-colors": "^4.1.3", + "ci-info": "^3.7.0", + "enquirer": "^2.4.1", + "external-editor": "^3.1.0", + "fs-extra": "^7.0.1", + "mri": "^1.2.0", + "p-limit": "^2.2.0", + "package-manager-detector": "^0.2.0", + "picocolors": "^1.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "spawndamnit": "^3.0.1", + "term-size": "^2.1.0" + } + }, + "@changesets/config": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.2.tgz", + "integrity": "sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==", + "dev": true, + "requires": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.3", + "@changesets/logger": "^0.1.1", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1", + "micromatch": "^4.0.8" + } + }, + "@changesets/errors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", + "dev": true, + "requires": { + "extendable-error": "^0.1.5" + } + }, + "@changesets/get-dependents-graph": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", + "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", + "dev": true, + "requires": { + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "picocolors": "^1.1.0", + "semver": "^7.5.3" + } + }, + "@changesets/get-github-info": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.7.0.tgz", + "integrity": "sha512-+i67Bmhfj9V4KfDeS1+Tz3iF32btKZB2AAx+cYMqDSRFP7r3/ZdGbjCo+c6qkyViN9ygDuBjzageuPGJtKGe5A==", + "dev": true, + "requires": { + "dataloader": "^1.4.0", + "node-fetch": "^2.5.0" + } + }, + "@changesets/get-release-plan": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.14.tgz", + "integrity": "sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==", + "dev": true, + "requires": { + "@changesets/assemble-release-plan": "^6.0.9", + "@changesets/config": "^3.1.2", + "@changesets/pre": "^2.0.2", + "@changesets/read": "^0.6.6", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "@changesets/get-version-range-type": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", + "dev": true + }, + "@changesets/git": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", + "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", + "dev": true, + "requires": { + "@changesets/errors": "^0.2.0", + "@manypkg/get-packages": "^1.1.3", + "is-subdir": "^1.1.1", + "micromatch": "^4.0.8", + "spawndamnit": "^3.0.1" + } + }, + "@changesets/logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", + "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", + "dev": true, + "requires": { + "picocolors": "^1.1.0" + } + }, + "@changesets/parse": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.2.tgz", + "integrity": "sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==", + "dev": true, + "requires": { + "@changesets/types": "^6.1.0", + "js-yaml": "^4.1.1" + } + }, + "@changesets/pre": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", + "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", + "dev": true, + "requires": { + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1" + } + }, + "@changesets/read": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.6.tgz", + "integrity": "sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==", + "dev": true, + "requires": { + "@changesets/git": "^3.0.4", + "@changesets/logger": "^0.1.1", + "@changesets/parse": "^0.4.2", + "@changesets/types": "^6.1.0", + "fs-extra": "^7.0.1", + "p-filter": "^2.1.0", + "picocolors": "^1.1.0" + } + }, + "@changesets/should-skip-package": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", + "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", + "dev": true, + "requires": { + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "@changesets/types": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", + "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", + "dev": true + }, + "@changesets/write": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.2.tgz", + "integrity": "sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==", + "dev": true, + "requires": { + "@changesets/types": "^6.0.0", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "prettier": "^2.7.1" + } + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true + }, + "@eth-optimism/core-utils": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", + "integrity": "sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==", + "dev": true, + "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/providers": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bufio": "^1.0.7", + "chai": "^4.3.4" + } + }, + "@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "dev": true + }, + "@ethereumjs/util": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", + "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", + "dev": true, + "requires": { + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "dependencies": { + "@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "requires": { + "@noble/hashes": "1.4.0" + } + }, + "@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true + }, + "ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "requires": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + } + } + }, + "@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "dev": true, + "requires": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "dev": true, + "requires": { + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "dev": true, + "requires": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "dev": true, + "requires": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + }, + "dependencies": { + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true + } + } + }, + "@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "dev": true + }, + "@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "dev": true, + "requires": { + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "dev": true, + "requires": { + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + }, + "dependencies": { + "ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "requires": {} + } + } + }, + "@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "dev": true, + "requires": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "dev": true, + "requires": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "dev": true, + "requires": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true + }, + "@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" + }, + "dependencies": { + "@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, + "peer": true, + "requires": { + "@noble/hashes": "1.3.2" + } + }, + "@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "peer": true + }, + "@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nomicfoundation/edr": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.17.tgz", + "integrity": "sha512-Y8Kwqd5JpBmI/Kst6NJ/bZ81FeJea9J6WEwoSRTZnEvwfqW9dk9PI8zJs2UJpOACL1fXEPvN+doETbxT9EhwXA==", + "dev": true, + "requires": { + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.17", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.17", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.17", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.17", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.17", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.17", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.17" + } + }, + "@nomicfoundation/edr-darwin-arm64": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.17.tgz", + "integrity": "sha512-gI9/9ysLeAid0+VSTBeutxOJ0/Rrh00niGkGL9+4lR577igDY+v55XGN0oBMST49ILS0f12J6ZY90LG8sxPXmQ==", + "dev": true + }, + "@nomicfoundation/edr-darwin-x64": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.17.tgz", + "integrity": "sha512-zSZtwf584RkIyb8awELDt7ctskogH0p4pmqOC4vhykc8ODOv2XLuG1IgeE4WgYhWGZOufbCtgLfpJQrWqN6mmw==", + "dev": true + }, + "@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.17.tgz", + "integrity": "sha512-WjdfgV6B7gT5Q0NXtSIWyeK8gzaJX5HK6/jclYVHarWuEtS1LFgePYgMjK8rmm7IRTkM9RsE/PCuQEP1nrSsuA==", + "dev": true + }, + "@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.17.tgz", + "integrity": "sha512-26rObKhhCDb9JkZbToyr7JVZo4tSVAFvzoJSJVmvpOl0LOHrfFsgVQu2n/8cNkwMAqulPubKL2E0jdnmEoZjWA==", + "dev": true + }, + "@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.17.tgz", + "integrity": "sha512-dPkHScIf/CU6h6k3k4HNUnQyQcVSLKanviHCAcs5HkviiJPxvVtOMMvtNBxoIvKZRxGFxf2eutcqQW4ZV1wRQQ==", + "dev": true + }, + "@nomicfoundation/edr-linux-x64-musl": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.17.tgz", + "integrity": "sha512-5Ixe/bpyWZxC3AjIb8EomAOK44ajemBVx/lZRHZiWSBlwQpbSWriYAtKjKcReQQPwuYVjnFpAD2AtuCvseIjHw==", + "dev": true + }, + "@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.12.0-next.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.17.tgz", + "integrity": "sha512-29YlvdgofSdXG1mUzIuH4kMXu1lmVc1hvYWUGWEH59L+LaakdhfJ/Wu5izeclKkrTh729Amtk/Hk1m29kFOO8A==", + "dev": true + }, + "@nomicfoundation/hardhat-chai-matchers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.0.tgz", + "integrity": "sha512-GPhBNafh1fCnVD9Y7BYvoLnblnvfcq3j8YDbO1gGe/1nOFWzGmV7gFu5DkwFXF+IpYsS+t96o9qc/mPu3V3Vfw==", + "dev": true, + "requires": { + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + } + }, + "@nomicfoundation/hardhat-ethers": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.3.tgz", + "integrity": "sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==", + "dev": true, + "peer": true, + "requires": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + } + }, + "@nomicfoundation/hardhat-network-helpers": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz", + "integrity": "sha512-p7HaUVDbLj7ikFivQVNhnfMHUBgiHYMwQWvGn9AriieuopGOELIrwj2KjyM2a6z70zai5YKO264Vwz+3UFJZPQ==", + "dev": true, + "requires": { + "ethereumjs-util": "^7.1.4" + } + }, + "@nomicfoundation/slang": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.18.3.tgz", + "integrity": "sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ==", + "dev": true, + "requires": { + "@bytecodealliance/preview2-shim": "0.17.0" + } + }, + "@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "dev": true, + "requires": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + } + }, + "@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", + "dev": true, + "optional": true + }, + "@offchainlabs/upgrade-executor": { + "version": "1.1.0-beta.0", + "resolved": "https://registry.npmjs.org/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz", + "integrity": "sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw==", + "dev": true, + "requires": { + "@openzeppelin/contracts": "4.7.3", + "@openzeppelin/contracts-upgradeable": "4.7.3" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", + "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", + "dev": true + }, + "@openzeppelin/contracts-upgradeable": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==", + "dev": true + } + } + }, + "@openzeppelin/contracts": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.5.0.tgz", + "integrity": "sha512-R8hq4zmKKWP2c7OxeRgAcjZwvF5W0Qq2OIX7degrtdM52Q9xYr4MLJdUAVPKGUewNJ1qo+M6YiZLLnNUnjP/gg==", + "dev": true + }, + "@openzeppelin/contracts-upgradeable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.5.0.tgz", + "integrity": "sha512-Va5hKG5oaK0EE5bXTVWugcGimMHazxL+SL523dH6WVbGiuLXwuWr9oxtLyPHQSVGtgmlIgtKNR5V+OUpCIUwFQ==", + "dev": true, + "requires": {} + }, + "@openzeppelin/defender-sdk-base-client": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-2.7.0.tgz", + "integrity": "sha512-J5IpvbFfdIJM4IadBcXfhCXVdX2yEpaZtRR1ecq87d8CdkmmEpniYfef/yVlG98yekvu125LaIRg0yXQOt9Bdg==", + "dev": true, + "requires": { + "@aws-sdk/client-lambda": "^3.563.0", + "amazon-cognito-identity-js": "^6.3.6", + "async-retry": "^1.3.3" + } + }, + "@openzeppelin/defender-sdk-deploy-client": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-2.7.0.tgz", + "integrity": "sha512-YOHZmnHmM1y6uSqXWGfk2/5/ae4zZJE6xG92yFEAIOy8vqh1dxznWMsoCcAXRXTCWc8RdCDpFdMfEy4SBTyYtg==", + "dev": true, + "requires": { + "@openzeppelin/defender-sdk-base-client": "^2.7.0", + "axios": "^1.7.4", + "lodash": "^4.17.21" + } + }, + "@openzeppelin/defender-sdk-network-client": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-2.7.0.tgz", + "integrity": "sha512-4CYWPa9+kSjojE5KS7kRmP161qsBATdp97TCrzyDdGoVahj0GyqgafRL9AAjm0eHZOM1c7EIYEpbvYRtFi8vyA==", + "dev": true, + "requires": { + "@openzeppelin/defender-sdk-base-client": "^2.7.0", + "axios": "^1.7.4", + "lodash": "^4.17.21" + } + }, + "@openzeppelin/hardhat-upgrades": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.9.1.tgz", + "integrity": "sha512-pSDjlOnIpP+PqaJVe144dK6VVKZw2v6YQusyt0OOLiCsl+WUzfo4D0kylax7zjrOxqy41EK2ipQeIF4T+cCn2A==", + "dev": true, + "requires": { + "@openzeppelin/defender-sdk-base-client": "^2.1.0", + "@openzeppelin/defender-sdk-deploy-client": "^2.1.0", + "@openzeppelin/defender-sdk-network-client": "^2.1.0", + "@openzeppelin/upgrades-core": "^1.41.0", + "chalk": "^4.1.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.1.5", + "proper-lockfile": "^4.1.1", + "undici": "^6.11.1" + } + }, + "@openzeppelin/upgrades-core": { + "version": "1.44.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.44.2.tgz", + "integrity": "sha512-m6iorjyhPK9ow5/trNs7qsBC/SOzJCO51pvvAF2W9nOiZ1t0RtCd+rlRmRmlWTv4M33V0wzIUeamJ2BPbzgUXA==", + "dev": true, + "requires": { + "@nomicfoundation/slang": "^0.18.3", + "bignumber.js": "^9.1.2", + "cbor": "^10.0.0", + "chalk": "^4.1.0", + "compare-versions": "^6.0.0", + "debug": "^4.1.1", + "ethereumjs-util": "^7.0.3", + "minimatch": "^9.0.5", + "minimist": "^1.2.7", + "proper-lockfile": "^4.1.1", + "solidity-ast": "^0.4.60" + } + }, + "@scroll-tech/contracts": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@scroll-tech/contracts/-/contracts-0.1.0.tgz", + "integrity": "sha512-aBbDOc3WB/WveZdpJYcrfvMYMz7ZTEiW8M9XMJLba8p9FAR5KGYB/cV+8+EUsq3MKt7C1BfR+WnXoTVdvwIY6w==", + "dev": true + }, + "@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "dev": true + }, + "@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, + "requires": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "dependencies": { + "@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "requires": { + "@noble/hashes": "1.4.0" + } + }, + "@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true + }, + "@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true + } + } + }, + "@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, + "requires": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true + }, + "@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true + } + } + }, + "@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "requires": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true + }, + "@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@smithy/abort-controller": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.7.tgz", + "integrity": "sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/config-resolver": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.5.tgz", + "integrity": "sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==", + "dev": true, + "requires": { + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "tslib": "^2.6.2" + } + }, + "@smithy/core": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.20.0.tgz", + "integrity": "sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==", + "dev": true, + "requires": { + "@smithy/middleware-serde": "^4.2.8", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/credential-provider-imds": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.7.tgz", + "integrity": "sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==", + "dev": true, + "requires": { + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "tslib": "^2.6.2" + } + }, + "@smithy/eventstream-codec": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.7.tgz", + "integrity": "sha512-DrpkEoM3j9cBBWhufqBwnbbn+3nf1N9FP6xuVJ+e220jbactKuQgaZwjwP5CP1t+O94brm2JgVMD2atMGX3xIQ==", + "dev": true, + "requires": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.11.0", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/eventstream-serde-browser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.7.tgz", + "integrity": "sha512-ujzPk8seYoDBmABDE5YqlhQZAXLOrtxtJLrbhHMKjBoG5b4dK4i6/mEU+6/7yXIAkqOO8sJ6YxZl+h0QQ1IJ7g==", + "dev": true, + "requires": { + "@smithy/eventstream-serde-universal": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/eventstream-serde-config-resolver": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.7.tgz", + "integrity": "sha512-x7BtAiIPSaNaWuzm24Q/mtSkv+BrISO/fmheiJ39PKRNH3RmH2Hph/bUKSOBOBC9unqfIYDhKTHwpyZycLGPVQ==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/eventstream-serde-node": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.7.tgz", + "integrity": "sha512-roySCtHC5+pQq5lK4be1fZ/WR6s/AxnPaLfCODIPArtN2du8s5Ot4mKVK3pPtijL/L654ws592JHJ1PbZFF6+A==", + "dev": true, + "requires": { + "@smithy/eventstream-serde-universal": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/eventstream-serde-universal": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.7.tgz", + "integrity": "sha512-QVD+g3+icFkThoy4r8wVFZMsIP08taHVKjE6Jpmz8h5CgX/kk6pTODq5cht0OMtcapUx+xrPzUTQdA+TmO0m1g==", + "dev": true, + "requires": { + "@smithy/eventstream-codec": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/fetch-http-handler": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.8.tgz", + "integrity": "sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==", + "dev": true, + "requires": { + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + } + }, + "@smithy/hash-node": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.7.tgz", + "integrity": "sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/invalid-dependency": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.7.tgz", + "integrity": "sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-content-length": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.7.tgz", + "integrity": "sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==", + "dev": true, + "requires": { + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-endpoint": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.1.tgz", + "integrity": "sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==", + "dev": true, + "requires": { + "@smithy/core": "^3.20.0", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-middleware": "^4.2.7", + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-retry": { + "version": "4.4.17", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.17.tgz", + "integrity": "sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==", + "dev": true, + "requires": { + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/service-error-classification": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-serde": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.8.tgz", + "integrity": "sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==", + "dev": true, + "requires": { + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-stack": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.7.tgz", + "integrity": "sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/node-config-provider": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.7.tgz", + "integrity": "sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==", + "dev": true, + "requires": { + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/node-http-handler": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.7.tgz", + "integrity": "sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==", + "dev": true, + "requires": { + "@smithy/abort-controller": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/property-provider": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.7.tgz", + "integrity": "sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/protocol-http": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.7.tgz", + "integrity": "sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/querystring-builder": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.7.tgz", + "integrity": "sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/querystring-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.7.tgz", + "integrity": "sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/service-error-classification": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.7.tgz", + "integrity": "sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0" + } + }, + "@smithy/shared-ini-file-loader": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.2.tgz", + "integrity": "sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/signature-v4": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.7.tgz", + "integrity": "sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==", + "dev": true, + "requires": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/smithy-client": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.2.tgz", + "integrity": "sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==", + "dev": true, + "requires": { + "@smithy/core": "^3.20.0", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-stream": "^4.5.8", + "tslib": "^2.6.2" + } + }, + "@smithy/types": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.11.0.tgz", + "integrity": "sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/url-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.7.tgz", + "integrity": "sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==", + "dev": true, + "requires": { + "@smithy/querystring-parser": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "requires": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "dev": true, + "requires": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-defaults-mode-browser": { + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.16.tgz", + "integrity": "sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==", + "dev": true, + "requires": { + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-defaults-mode-node": { + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.19.tgz", + "integrity": "sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==", + "dev": true, + "requires": { + "@smithy/config-resolver": "^4.4.5", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-endpoints": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.7.tgz", + "integrity": "sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==", + "dev": true, + "requires": { + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-middleware": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.7.tgz", + "integrity": "sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==", + "dev": true, + "requires": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-retry": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.7.tgz", + "integrity": "sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==", + "dev": true, + "requires": { + "@smithy/service-error-classification": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-stream": { + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.8.tgz", + "integrity": "sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==", + "dev": true, + "requires": { + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/types": "^4.11.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "dev": true, + "requires": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-waiter": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.7.tgz", + "integrity": "sha512-vHJFXi9b7kUEpHWUCY3Twl+9NPOZvQ0SAi+Ewtn48mbiJk4JY9MZmKQjGB4SCvVb9WPiSphZJYY6RIbs+grrzw==", + "dev": true, + "requires": { + "@smithy/abort-controller": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "requires": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "@types/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "requires": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "@types/chai-as-promised": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true + }, + "@types/secp256k1": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", + "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "@zksync/contracts": { + "version": "git+ssh://git@github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9", + "integrity": "sha512-Uke6C3HTDonp/sqP4SlNxU40YL9TK1ICCubcmEBryGQoZCa0z9oc3GSUZ1WBAHQ9HhLiHnpqpayFNmq9fZkK7Q==", + "dev": true, + "from": "@zksync/contracts@git+https://github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9" + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true + }, + "aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true, + "peer": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "amazon-cognito-identity-js": { + "version": "6.3.16", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.16.tgz", + "integrity": "sha512-HPGSBGD6Q36t99puWh0LnptxO/4icnk2kqIQ9cTJ2tFQo5NMUnWQIgtrTAk8nm+caqUbjDzXzG56GBjI2tS6jQ==", + "dev": true, + "requires": { + "@aws-crypto/sha256-js": "1.2.2", + "buffer": "4.9.2", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" + }, + "dependencies": { + "@aws-crypto/sha256-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", + "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", + "dev": true, + "requires": { + "@aws-crypto/util": "^1.2.2", + "@aws-sdk/types": "^3.1.0", + "tslib": "^1.11.1" + } + }, + "@aws-crypto/util": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", + "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", + "dev": true, + "requires": { + "@aws-sdk/types": "^3.1.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true + }, + "async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "requires": { + "retry": "0.13.1" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "axios": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "dev": true + }, + "better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dev": true, + "requires": { + "is-windows": "^1.0.0" + } + }, + "bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true + }, + "bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "dev": true + }, + "bowser": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", + "dev": true + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "bufio": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.2.3.tgz", + "integrity": "sha512-5Tt66bRzYUSlVZatc0E92uDenreJ+DpTBmSAUwL4VSxJn3e6cUyYwx+PoqML0GRZatgA/VX8ybhxItF8InZgqA==", + "dev": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "cbor": { + "version": "10.0.11", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-10.0.11.tgz", + "integrity": "sha512-vIwORDd/WyB8Nc23o2zNN5RrtFGlR6Fca61TtjkUXueI3Jf2DOZDl1zsshvBntZ3wZHBM9ztjnkXSmzQDaq3WA==", + "dev": true, + "requires": { + "nofilter": "^3.0.2" + } + }, + "chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "dependencies": { + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + } + } + }, + "chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "dev": true, + "requires": { + "check-error": "^1.0.2" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true + }, + "check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" + } + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "requires": { + "readdirp": "^4.0.1" + } + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true + }, + "dataloader": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", + "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==", + "dev": true + }, + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "eth-gas-reporter": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "dev": true, + "requires": { + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true + }, + "@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true + }, + "@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "requires": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "requires": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "requires": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "dev": true, + "requires": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "ethers": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", + "dev": true, + "peer": true, + "requires": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "dependencies": { + "@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, + "peer": true, + "requires": { + "undici-types": "~6.19.2" + } + }, + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "peer": true + } + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "dev": true + }, + "fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + } + }, + "fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "dev": true, + "requires": { + "strnum": "^2.1.0" + } + }, + "fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "requires": { + "micromatch": "^4.0.2" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true + }, + "for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "requires": { + "is-callable": "^1.2.7" + } + }, + "form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + } + }, + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "dependencies": { + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "hardhat": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.0.tgz", + "integrity": "sha512-A3yBISI18EcnY2IR7Ny2xZF33Q3qH01yrWapeWbyGOiJm/386SasWjbHRHYgUlZ3YWJETIMh7wYfMUaXrofTDQ==", + "dev": true, + "requires": { + "@ethereumjs/util": "^9.1.0", + "@ethersproject/abi": "^5.1.2", + "@nomicfoundation/edr": "0.12.0-next.17", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "find-up": "^5.0.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "micro-eth-signer": "^0.14.0", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "picocolors": "^1.1.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.6", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true + }, + "@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true + }, + "@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "requires": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "requires": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "requires": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "dev": true, + "requires": { + "@fastify/busboy": "^2.0.0" + } + }, + "ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "requires": {} + } + } + }, + "hardhat-contract-sizer": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.1.tgz", + "integrity": "sha512-/PPQQbUMgW6ERzk8M0/DA8/v2TEM9xRRAnF9qKPNMYF6FX5DFWcnxBsQvtp8uBz+vy7rmLyV9Elti2wmmhgkbg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "cli-table3": "^0.6.0", + "strip-ansi": "^6.0.0" + } + }, + "hardhat-gas-reporter": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", + "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", + "dev": true, + "requires": { + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + } + }, + "http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "requires": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + } + }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "requires": { + "@types/node": "^10.0.3" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true + } + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-id": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", + "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true + }, + "immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "requires": { + "fp-ts": "^1.0.0" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + } + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", + "dev": true, + "requires": { + "better-path-resolve": "1.0.0" + } + }, + "is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.16" + } + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "dev": true, + "requires": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "dev": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, + "js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "dev": true, + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true, + "peer": true + }, + "lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "requires": { + "get-func-name": "^2.0.1" + } + }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, + "markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true + }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micro-eth-signer": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", + "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", + "dev": true, + "requires": { + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "micro-packed": "~0.7.2" + }, + "dependencies": { + "@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "dev": true, + "requires": { + "@noble/hashes": "1.7.2" + } + }, + "@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "dev": true + } + } + }, + "micro-packed": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", + "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", + "dev": true, + "requires": { + "@scure/base": "~1.2.5" + } + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "requires": { + "obliterator": "^2.0.0" + } + }, + "mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "dependencies": { + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true + }, + "nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true + }, + "obliterator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "outdent": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", + "dev": true + }, + "p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "requires": { + "p-map": "^2.0.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-manager-detector": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "dev": true, + "requires": { + "quansync": "^0.2.7" + } + }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, + "patch-package": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", + "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", + "dev": true, + "requires": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^1.10.2" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + } + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", + "dev": true, + "requires": { + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" + } + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true + }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, + "requires": { + "asap": "~2.0.6" + } + }, + "proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "requires": { + "side-channel": "^1.1.0" + } + }, + "quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "requires": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + } + }, + "read-yaml-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.5", + "js-yaml": "^3.6.1", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true + }, + "req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "dev": true, + "requires": { + "req-from": "^2.0.0" + } + }, + "req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "ripemd160": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "dev": true, + "requires": { + "hash-base": "^3.1.2", + "inherits": "^2.0.4" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dev": true, + "requires": { + "bn.js": "^5.2.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "dev": true, + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + } + }, + "sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", + "dev": true, + "requires": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "dev": true, + "requires": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "solidity-ast": { + "version": "0.4.61", + "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.61.tgz", + "integrity": "sha512-OYBJYcYyG7gLV0VuXl9CUrvgJXjV/v0XnR4+1YomVe3q+QyENQXJJxAEASUz4vN6lMAl+C8RSRSr5MBAz09f6w==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spawndamnit": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", + "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.5", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "stacktrace-parser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "dev": true, + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true + } + } + }, + "statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "requires": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "requires": { + "get-port": "^3.1.0" + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "requires": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true + }, + "form-data": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + } + } + } + }, + "tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "requires": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "dependencies": { + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true + } + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "dev": true, + "requires": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true + }, + "type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "undici": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", + "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", + "dev": true + }, + "undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "peer": true + }, + "unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } } } diff --git a/package.json b/package.json index b9fc357..58f40cc 100644 --- a/package.json +++ b/package.json @@ -13,14 +13,14 @@ "homepage": "https://github.com/CMTA/CMTAT-ACE#readme", "devDependencies": { "@chainlink/contracts": "1.3.0", - "hardhat-contract-sizer": "^2.10.0", - "hardhat-gas-reporter": "^1.0.9", "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", "@nomicfoundation/hardhat-network-helpers": "^1.1.2", "@openzeppelin/contracts": "5.5.0", "@openzeppelin/contracts-upgradeable": "5.5.0", "@openzeppelin/hardhat-upgrades": "^3.2.0", "@openzeppelin/upgrades-core": "^1.44.1", - "hardhat": "^2.24.0" + "hardhat": "^2.28.0", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-gas-reporter": "^1.0.9" } } From 5a658b6b004589a9a65829b53f48363afe274eca Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Mon, 19 Jan 2026 15:18:54 +0100 Subject: [PATCH 06/57] test works --- .../ComplianceTokenCMTATUpgradeable.sol | 27 ++++++++ .../modules/lite/CCTCMTATBasePolicyEngine.sol | 3 +- contracts/modules/standard/CCTCommon.sol | 2 +- contracts/test/PolicyEngineImport.sol | 5 ++ hardhat.config.js | 30 ++++++--- test/standardDeployment.test.js | 5 +- test/standardDeploymentUpgradeable.test.js | 35 ++++++++++ test/testUtils.js | 66 ++++++++++++++++++- 8 files changed, 159 insertions(+), 14 deletions(-) create mode 100644 contracts/deployment/ComplianceTokenCMTATUpgradeable.sol create mode 100644 contracts/test/PolicyEngineImport.sol create mode 100644 test/standardDeploymentUpgradeable.test.js diff --git a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol new file mode 100644 index 0000000..f1bc677 --- /dev/null +++ b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol @@ -0,0 +1,27 @@ +//SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {CCTBaseERC2771} from "../modules/standard/CCTBaseERC2771.sol"; +import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; +import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; +import {ISnapshotEngine} from "../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; +import {IERC1643} from "../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; +import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; + + +/** + * @title ComplianceTokenCMTATStandalone + * @author Chainlink + * @notice Standalone ComplianceToken contract with Chainlink ACE policy validation on all public functions + */ +contract ComplianceTokenCMTATUpgradeable is CCTBaseERC2771 { + /** + * @notice Contract version for standalone deployment + * @param forwarderIrrevocable address of the forwarder, required for the gasless support + */ + /// @custom:oz-upgrades-unsafe-allow constructor + constructor( + address forwarderIrrevocable + ) ERC2771Module(forwarderIrrevocable) {} +} \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index 6bb51bf..19fc08a 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -100,7 +100,8 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModuleP __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_, snapshotEngine_, documentEngine_); /* Chainlink-ACE policy module */ - __PolicyProtected_init(admin, policyEngine_); + //__PolicyProtected_init_unchained(policyEngine_); + //__PolicyProtected_init(admin, policyEngine_); } /* diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index e91151d..697b5b9 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -59,7 +59,7 @@ abstract contract CCTCommon is function __CCT_commonModules_init_unchained(address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationModuleAttributes_, ISnapshotEngine snapshotEngine_, IERC1643 documentEngine_, address policyEngine ) internal virtual onlyInitializing { - __PolicyProtected_init(admin, policyEngine); + __PolicyProtected_init_unchained(policyEngine); __CCTERC20Module_init_unchained(ERC20Attributes_.name, ERC20Attributes_.symbol); diff --git a/contracts/test/PolicyEngineImport.sol b/contracts/test/PolicyEngineImport.sol new file mode 100644 index 0000000..3aa4da8 --- /dev/null +++ b/contracts/test/PolicyEngineImport.sol @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.26; + +// Import PolicyEngine to make it available for Hardhat compilation and testing +import {PolicyEngine} from "../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyEngine.sol"; diff --git a/hardhat.config.js b/hardhat.config.js index 3adc7f2..01f68f0 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -2,15 +2,29 @@ require('@openzeppelin/hardhat-upgrades') /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { - solidity: { - version: '0.8.30', - settings: { - optimizer: { - enabled: true, - runs: 200 + solidity: { + compilers: [ + { + version: '0.8.30', + settings: { + optimizer: { + enabled: true, + runs: 200 + }, + evmVersion: 'prague' + } }, - evmVersion: 'prague' - } + { + version: '0.8.26', + settings: { + optimizer: { + enabled: true, + runs: 200 + }, + evmVersion: 'cancun' + } + } + ] }, paths: { sources: "./contracts", diff --git a/test/standardDeployment.test.js b/test/standardDeployment.test.js index f48bbb7..9eef771 100644 --- a/test/standardDeployment.test.js +++ b/test/standardDeployment.test.js @@ -4,10 +4,10 @@ const { etherAddresses, deployComplianceTokenCMTATStandalone } = require("./test const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') -describe("ComplianceTokenCMTAT Standalone Deployment", () => { +describe("ComplianceTokenCMTAT Upgradable Deployment", () => { it("should deploy the ComplianceTokenCMTAT standalone contract", async () => { - Object.assign(this, await loadFixture(etherAddresses)) + /*Object.assign(this, await loadFixture(etherAddresses)) const cmtat = await deployComplianceTokenCMTATStandalone( this.forwarder.address, this.admin.address, @@ -17,5 +17,6 @@ describe("ComplianceTokenCMTAT Standalone Deployment", () => { expect(await cmtat.name()).to.equal("Security Token"); expect(await cmtat.symbol()).to.equal("ST"); expect(await cmtat.getAdmin()).to.equal(this.admin.address); + */ }); }) \ No newline at end of file diff --git a/test/standardDeploymentUpgradeable.test.js b/test/standardDeploymentUpgradeable.test.js new file mode 100644 index 0000000..2a84f07 --- /dev/null +++ b/test/standardDeploymentUpgradeable.test.js @@ -0,0 +1,35 @@ +const {ethers, upgrades} = require("hardhat"); +const { expect } = require('chai') +const { etherAddresses, deployComplianceTokenCMTATUpgradeable, deployPolicyEngine } = require("./testUtils.js"); +const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') + +describe("ComplianceTokenCMTAT Upgradeable Deployment", () => { + + it("should deploy the ComplianceTokenCMTAT standalone contract", async () => { + Object.assign(this, await loadFixture(etherAddresses)) + + /*const cmtat = await deployComplianceTokenCMTATUpgradeable( + this.forwarder.address, + this.admin.address, + this.admin.address + ); + expect(await cmtat.name()).to.equal("Security Token"); + expect(await cmtat.symbol()).to.equal("ST"); + expect(await cmtat.getCCIPAdmin()).to.equal(this.admin.address);*/ + }); + + it("should deploy PolicyEngine and ComplianceTokenCMTAT with policy engine configured", async () => { + Object.assign(this, await loadFixture(etherAddresses)) + const policyEngine = await deployPolicyEngine(true, this.admin.address); + // expect(await policyEngine.getAddress()).to.be.properAddress; + + // Deploy ComplianceTokenCMTAT with the PolicyEngine + const cmtat = await deployComplianceTokenCMTATUpgradeable(this.forwarder.address, this.admin.address, this.admin.address, await policyEngine.getAddress()) + + await cmtat.connect(this.admin).attach(policyEngine) + expect(await cmtat.name()).to.equal("Security Token"); + expect(await cmtat.symbol()).to.equal("ST"); + expect(await cmtat.getPolicyEngine()).to.equal(await policyEngine.getAddress()); + }); +}) + diff --git a/test/testUtils.js b/test/testUtils.js index f427ff6..3c14151 100644 --- a/test/testUtils.js +++ b/test/testUtils.js @@ -1,4 +1,4 @@ -const {ethers } = require("hardhat"); +const {ethers, upgrades } = require("hardhat"); async function etherAddresses () { const [ @@ -59,8 +59,70 @@ async function deployComplianceTokenCMTATStandalone (forwarderAddress, adminAddr return ComplianceTokenCMTATStandalone; } +async function deployComplianceTokenCMTATUpgradeable (forwarderAddress, adminAddress, deployerAddress, policyEngine) { + const ETHERS_CMTAT_PROXY_FACTORY = await ethers.getContractFactory( + 'ComplianceTokenCMTATUpgradeable' + ) + const erc20Attributes = [ + "Security Token", // name + "ST", // symbol + 0 // decimalsIrrevocable (legacy) + ] + const terms = { + name: "Token Terms v2", + uri: "https://cmta.ch/standards/cmta-token-cmtat", + documentHash: ethers.keccak256(ethers.toUtf8Bytes("terms-v2")) + } + const extraInformationAttributes = [ + "1234567890", // ISIN or identifier as tokenId + terms, + "ComplianceTokenCMTATUpgradeable smart contract" // information string + ] + const ComplianceTokenCMTATUpgradeable = await upgrades.deployProxy( + ETHERS_CMTAT_PROXY_FACTORY, + [ + adminAddress, + erc20Attributes, + extraInformationAttributes, + ethers.ZeroAddress, // snapshotEngine + ethers.ZeroAddress, // documentEngine + policyEngine // policyEngine + ], + { + initializer: 'initialize', + constructorArgs: [forwarderAddress], + from: deployerAddress, + unsafeAllow: ['missing-initializer','missing-initializer', 'constructor'] + } + ) + + return ComplianceTokenCMTATUpgradeable; +} + +/** + * Deploy PolicyEngine through upgrades.deployProxy (ERC1967 proxy pattern) + * @param {boolean} defaultAllow - The default policy result (true = allow, false = reject) + * @param {string} initialOwner - The address of the initial owner + * @returns {Promise} The deployed PolicyEngine proxy instance + */ +async function deployPolicyEngine(defaultAllow, initialOwner) { + const PolicyEngineFactory = await ethers.getContractFactory("PolicyEngine"); + + const policyEngine = await upgrades.deployProxy( + PolicyEngineFactory, + [defaultAllow, initialOwner], + { + initializer: 'initialize', + unsafeAllow: ['constructor'] + } + ); + + return policyEngine; +} module.exports = { etherAddresses, - deployComplianceTokenCMTATStandalone + deployComplianceTokenCMTATStandalone, + deployComplianceTokenCMTATUpgradeable, + deployPolicyEngine }; \ No newline at end of file From d04ddf831749744effa30143697c5e8d652be1ae Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:21:24 +0100 Subject: [PATCH 07/57] Update CMTAT to v3.2.0-rc0, remove duplicate modules, update test --- README.md | 4 + .../ComplianceTokenCMTATLiteStandalone.sol | 7 - .../ComplianceTokenCMTATStandalone.sol | 10 - .../ComplianceTokenCMTATUpgradeable.sol | 4 - .../modules/lite/CCTCMTATBasePolicyEngine.sol | 39 +-- contracts/modules/standard/CCTCommon.sol | 308 +++++++++++++----- .../engines/CCTDocumentEngineModule.sol | 103 ------ .../engines/CCTSnapshotEngineModule.sol | 84 ----- .../modules/standard/erc20/CCTBurnModule.sol | 85 ----- .../modules/standard/erc20/CCTERC20Module.sol | 81 ----- .../modules/standard/erc20/CCTMintModule.sol | 83 ----- .../extensions/CCTCrossChainModule.sol | 103 ------ .../extensions/CCTEnforcementModule.sol | 103 ------ .../extensions/CCTExtraInformationModule.sol | 148 --------- .../modules/standard/extensions/CCTModule.sol | 60 ---- submodules/CMTAT | 2 +- test/standardDeploymentUpgradeable.test.js | 3 +- test/testUtils.js | 16 +- 18 files changed, 258 insertions(+), 985 deletions(-) delete mode 100644 contracts/modules/standard/engines/CCTDocumentEngineModule.sol delete mode 100644 contracts/modules/standard/engines/CCTSnapshotEngineModule.sol delete mode 100644 contracts/modules/standard/erc20/CCTBurnModule.sol delete mode 100644 contracts/modules/standard/erc20/CCTERC20Module.sol delete mode 100644 contracts/modules/standard/erc20/CCTMintModule.sol delete mode 100644 contracts/modules/standard/extensions/CCTCrossChainModule.sol delete mode 100644 contracts/modules/standard/extensions/CCTEnforcementModule.sol delete mode 100644 contracts/modules/standard/extensions/CCTExtraInformationModule.sol delete mode 100644 contracts/modules/standard/extensions/CCTModule.sol diff --git a/README.md b/README.md index 124f5fb..45b61c9 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,10 @@ ## Deployment versions* Two versions are available; *lite* version which substitutes RuleEngine with Chainlink ACE PolicyEngine, and *standard* version, which uses PolicyEngine to protect all external functions instead of OpenZepplin role-based AccessControl. +## Library + +- CMTAT [v3.2.0-rc0](https://github.com/CMTA/CMTAT/releases/tag/v3.2.0-rc0) + ## Initialize submodules ```shell git submodule update diff --git a/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol b/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol index 90ddb9a..6a69dda 100644 --- a/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol +++ b/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol @@ -4,9 +4,6 @@ pragma solidity ^0.8.20; import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; -import {ISnapshotEngine} from "../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; -import {IERC1643} from "../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; /** @@ -31,8 +28,6 @@ contract ComplianceTokenCMTATLiteStandalone is CCTCMTATBaseERC2771 { address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - ISnapshotEngine snapshotEngine_, - IERC1643 documentEngine_, address policyEngine_ ) ERC2771Module(forwarderIrrevocable) { // Initialize the contract to avoid front-running @@ -40,8 +35,6 @@ contract ComplianceTokenCMTATLiteStandalone is CCTCMTATBaseERC2771 { admin, ERC20Attributes_, extraInformationAttributes_, - snapshotEngine_, - documentEngine_, policyEngine_ ); } diff --git a/contracts/deployment/ComplianceTokenCMTATStandalone.sol b/contracts/deployment/ComplianceTokenCMTATStandalone.sol index b9ac802..00d2584 100644 --- a/contracts/deployment/ComplianceTokenCMTATStandalone.sol +++ b/contracts/deployment/ComplianceTokenCMTATStandalone.sol @@ -4,9 +4,6 @@ pragma solidity ^0.8.20; import {CCTBaseERC2771} from "../modules/standard/CCTBaseERC2771.sol"; import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; -import {ISnapshotEngine} from "../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; -import {IERC1643} from "../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; @@ -19,7 +16,6 @@ contract ComplianceTokenCMTATStandalone is CCTBaseERC2771 { /** * @notice Contract version for standalone deployment * @param forwarderIrrevocable address of the forwarder, required for the gasless support - * @param admin address of the admin of contract (Access Control) * @param ERC20Attributes_ ERC20 name, symbol and decimals * @param extraInformationAttributes_ tokenId, terms, information * @param snapshotEngine_ address of the snapshot engine @@ -29,20 +25,14 @@ contract ComplianceTokenCMTATStandalone is CCTBaseERC2771 { /// @custom:oz-upgrades-unsafe-allow constructor constructor( address forwarderIrrevocable, - address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - ISnapshotEngine snapshotEngine_, - IERC1643 documentEngine_, address policyEngine_ ) ERC2771Module(forwarderIrrevocable) { // Initialize the contract to avoid front-running initialize( - admin, ERC20Attributes_, extraInformationAttributes_, - snapshotEngine_, - documentEngine_, policyEngine_ ); } diff --git a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol index f1bc677..5cdf6d3 100644 --- a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol +++ b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol @@ -3,10 +3,6 @@ pragma solidity ^0.8.20; import {CCTBaseERC2771} from "../modules/standard/CCTBaseERC2771.sol"; -import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; -import {ISnapshotEngine} from "../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; -import {IERC1643} from "../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index 19fc08a..cf59560 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.20; -import {CMTATBaseCommon} from "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol"; +import {CMTATBaseCommon, CMTATBaseAccessControl} from "../../../submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol"; import {PolicyProtected} from "../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; @@ -12,12 +12,13 @@ import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/tokenizat import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; import {PauseModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol"; import {EnforcementModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol"; +import {IERC7943FungibleTransferError} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol"; // Extensions import {ERC20EnforcementModule, ERC20EnforcementModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; -import {Errors} from "../../../submodules/CMTAT/contracts/libraries/Errors.sol"; -abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModulePolicyEngine { + +abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, ValidationModulePolicyEngine, IERC7943FungibleTransferError { /*////////////////////////////////////////////////////////////// INITIALIZER FUNCTION @@ -30,8 +31,6 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModuleP * @param ERC20Attributes_ ERC20 name, symbol and decimals * @param extraInformationAttributes_ tokenId, terms, information * @param policyEngine_ address of the policy engine - * @param snapshotEngine_ address of the snapshot engine - * @param documentEngine_ address of the document engine * @dev * If you override the public function initialize, * call inside directly the internal function, not the public one which is protected by the initializer modifier @@ -40,16 +39,12 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModuleP address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - ISnapshotEngine snapshotEngine_, - IERC1643 documentEngine_, address policyEngine_ ) public virtual initializer { _initialize( admin, ERC20Attributes_, extraInformationAttributes_, - snapshotEngine_, - documentEngine_, policyEngine_ ); } @@ -61,16 +56,12 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModuleP address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - ISnapshotEngine snapshotEngine_, - IERC1643 documentEngine_, address policyEngine_ ) internal virtual onlyInitializing{ __CMTAT_init( admin, ERC20Attributes_, extraInformationAttributes_, - snapshotEngine_, - documentEngine_, policyEngine_ ); } @@ -82,8 +73,6 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModuleP address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - ISnapshotEngine snapshotEngine_, - IERC1643 documentEngine_, address policyEngine_ ) internal virtual onlyInitializing { /* OpenZeppelin library */ @@ -97,7 +86,7 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModuleP __CMTAT_openzeppelin_init_unchained(ERC20Attributes_); /* Wrapper modules */ - __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_, snapshotEngine_, documentEngine_); + __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_); /* Chainlink-ACE policy module */ //__PolicyProtected_init_unchained(policyEngine_); @@ -115,8 +104,8 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModuleP /* * @dev CMTAT wrapper modules */ - function __CMTAT_modules_init_unchained(address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, ICMTATConstructor.Engine memory engines_) internal virtual onlyInitializing { - __CMTAT_commonModules_init_unchained(admin,ERC20Attributes_, extraInformationAttributes_, engines_.snapshotEngine, engines_.documentEngine); + function __CMTAT_modules_init_unchained(address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_) internal virtual onlyInitializing { + __CMTAT_commonModules_init_unchained(admin,ERC20Attributes_, extraInformationAttributes_); } /*////////////////////////////////////////////////////////////// @@ -130,9 +119,10 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModuleP address to, uint256 value ) public virtual override (ValidationModulePolicyEngine) view returns (bool) { - if(!ERC20EnforcementModuleInternal._checkActiveBalance(from, value)){ + (bool isValid, ) = ERC20EnforcementModuleInternal._checkActiveBalance(from, value); + if(!isValid){ return false; - } else { + } else { return ValidationModulePolicyEngine.canTransfer(from, to, value); } } @@ -146,7 +136,8 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModuleP address to, uint256 value ) public virtual override (ValidationModulePolicyEngine) view returns (bool) { - if(!ERC20EnforcementModuleInternal._checkActiveBalance(from, value)){ + (bool isValid, ) = ERC20EnforcementModuleInternal._checkActiveBalance(from, value); + if(!isValid){ return false; } else { return ValidationModulePolicyEngine.canTransferFrom(spender, from, to, value); @@ -165,11 +156,11 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseCommon, ValidationModuleP /* ==== Transfer/mint/burn restriction ==== */ function _checkTransferred(address spender, address from, address to, uint256 value) internal virtual override(CMTATBaseCommon) { CMTATBaseCommon._checkTransferred(spender, from, to, value); - require(ValidationModulePolicyEngine._transferred(spender, from, to, value), Errors.CMTAT_InvalidTransfer(from, to, value)); + require(ValidationModulePolicyEngine._transferred(spender, from, to, value), ERC7943CannotTransfer(from, to, value)); } - function supportsInterface(bytes4 interfaceId) public view virtual override(CMTATBaseCommon, PolicyProtected) returns (bool) { - return CMTATBaseCommon.supportsInterface(interfaceId) || PolicyProtected.supportsInterface(interfaceId); + function supportsInterface(bytes4 interfaceId) public view virtual override(CMTATBaseAccessControl, PolicyProtected) returns (bool) { + return CMTATBaseAccessControl.supportsInterface(interfaceId) || PolicyProtected.supportsInterface(interfaceId); } } \ No newline at end of file diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index 697b5b9..7099fed 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -2,132 +2,288 @@ pragma solidity ^0.8.20; +/* ==== OpenZeppelin === */ +import { IERC165 } from "@openzeppelin/contracts/interfaces/IERC165.sol"; +import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; + +/* ==== CMTAT === */ +import {CMTATBaseCommon} from "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol"; +/* = Base = */ +/* = Core = */ +import {ERC20BurnModule, ERC20BurnModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol"; +import {ERC20MintModule, ERC20MintModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol"; import {VersionModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol"; -import {CCTERC20Module} from "./erc20/CCTERC20Module.sol"; -import {CCTSnapshotEngineModule} from "./engines/CCTSnapshotEngineModule.sol"; -import {CCTEnforcementModule} from "./extensions/CCTEnforcementModule.sol"; -import {CCTDocumentEngineModule, IERC1643} from "./engines/CCTDocumentEngineModule.sol"; -import {CCTExtraInformationModule} from "./extensions/CCTExtraInformationModule.sol"; -import {IBurnMintERC20} from "../../../submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol"; +import {ERC20BaseModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol"; +/* = Option & Extension = */ +import {ERC20CrossChainModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol"; +import {CCIPModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol"; +import {ExtraInformationModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol"; +import {ERC20EnforcementModule, ERC20EnforcementModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; +import {DocumentEngineModule, IERC1643} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol"; +import {SnapshotEngineModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol"; +/* = Interface = */ import {IERC5679} from "../../../submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol"; +import {IBurnMintERC20} from "../../../submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; -import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +/* ==== Chainlink ACE === */ import {PolicyProtected} from "../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; -import {CCTCrossChainModule} from "./extensions/CCTCrossChainModule.sol"; - - abstract contract CCTCommon is - CCTERC20Module, - CCTCrossChainModule, - CCTEnforcementModule, - VersionModule, - CCTSnapshotEngineModule, - CCTDocumentEngineModule, - CCTExtraInformationModule, - IBurnMintERC20 + ERC20CrossChainModule, + PolicyProtected, + CMTATBaseCommon, + CCIPModule { function initialize( - address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - ISnapshotEngine snapshotEngine_, - IERC1643 documentEngine_, address policyEngine ) public virtual initializer { - _initialize(admin, ERC20Attributes_, extraInformationAttributes_, snapshotEngine_, documentEngine_, policyEngine); + _initialize( + ERC20Attributes_, + extraInformationAttributes_, + policyEngine + ); } function _initialize( - address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - ISnapshotEngine snapshotEngine_, - IERC1643 documentEngine_, address policyEngine ) internal virtual onlyInitializing { - __CCT_commonModules_init_unchained( - admin, + __CMTAT_init( ERC20Attributes_, extraInformationAttributes_, - snapshotEngine_, - documentEngine_, policyEngine ); } - function __CCT_commonModules_init_unchained(address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationModuleAttributes_, - ISnapshotEngine snapshotEngine_, IERC1643 documentEngine_, address policyEngine - ) internal virtual onlyInitializing { - __PolicyProtected_init_unchained(policyEngine); - __CCTERC20Module_init_unchained(ERC20Attributes_.name, ERC20Attributes_.symbol); - - __CCTExtraInformationModule_init_unchained(ExtraInformationModuleAttributes_.tokenId, ExtraInformationModuleAttributes_.terms, ExtraInformationModuleAttributes_.information); - __CCTSnapshotEngineModule_init_unchained(snapshotEngine_); - __CCTDocumentEngineModule_init_unchained(documentEngine_); + /** + * @dev calls the different initialize functions from the different modules + */ + function __CMTAT_init( + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationAttributes_, + address policyEngine + ) internal virtual onlyInitializing { + /* OpenZeppelin library */ + // OZ init_unchained functions are called firstly due to inheritance + __Context_init_unchained(); + + // AccessControlUpgradeable inherits from ERC165Upgradeable + __ERC165_init_unchained(); + + // Openzeppelin + __CMTAT_openzeppelin_init_unchained(ERC20Attributes_); + + __PolicyProtected_init_unchained(policyEngine); + + /* Wrapper modules */ + __CMTAT_modules_init_unchained(ERC20Attributes_, ExtraInformationAttributes_ ); + } + + /* + * @dev OpenZeppelin + */ + function __CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes memory ERC20Attributes_) internal virtual onlyInitializing { + // Note that the Openzeppelin functions name() and symbol() are overriden in ERC20BaseModule + __ERC20_init_unchained(ERC20Attributes_.name, ERC20Attributes_.symbol); + } + + + + /* + * @dev CMTAT wrapper modules + */ + function __CMTAT_modules_init_unchained(ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_) internal virtual onlyInitializing { + __CMTAT_commonModules_init_unchained(ERC20Attributes_, extraInformationAttributes_); + } + + function __CMTAT_commonModules_init_unchained(ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationModuleAttributes_) internal virtual onlyInitializing { + // Core + __ERC20BaseModule_init_unchained(ERC20Attributes_.decimalsIrrevocable, ERC20Attributes_.name, ERC20Attributes_.symbol); + /* Extensions */ + __ExtraInformationModule_init_unchained(ExtraInformationModuleAttributes_.tokenId, ExtraInformationModuleAttributes_.terms, ExtraInformationModuleAttributes_.information); } /*////////////////////////////////////////////////////////////// PUBLIC/EXTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ + /* ============ State Functions ============ */ + function transfer(address to, uint256 value) public virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (bool) { + return CMTATBaseCommon.transfer(to, value); + } + /* + * @inheritdoc ERC20BaseModule + */ + function transferFrom( + address from, + address to, + uint256 value + ) + public + virtual + override(ERC20Upgradeable, CMTATBaseCommon) + returns (bool) + { + return CMTATBaseCommon.transferFrom(from, to, value); + } + + /* ============ View functions ============ */ + + /** + * @inheritdoc CMTATBaseCommon + */ + function decimals() + public + view + virtual + override(ERC20Upgradeable, CMTATBaseCommon) + returns (uint8) + { + return CMTATBaseCommon.decimals(); + } + + + /** + * @inheritdoc CMTATBaseCommon + */ + function name() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) { + return CMTATBaseCommon.name(); + } + + /** + * @inheritdoc CMTATBaseCommon + */ + function symbol() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) { + return CMTATBaseCommon.symbol(); + } + function supportsInterface(bytes4 _interfaceId) public view virtual override( - CCTCrossChainModule, + IERC165, + ERC20CrossChainModule, PolicyProtected ) returns (bool) { return - CCTCrossChainModule.supportsInterface(_interfaceId) || + ERC20CrossChainModule.supportsInterface(_interfaceId) || PolicyProtected.supportsInterface(_interfaceId); } + /* ==== Mint and Burn Operations ==== */ + /** + * @dev Check if the mint is valid + */ + function _mintOverride(address account, uint256 value) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { + CMTATBaseCommon._mintOverride(account, value); + } - - /*////////////////////////////////////////////////////////////// - Functions requiring several modules - //////////////////////////////////////////////////////////////*/ + /** + * @dev Check if the burn is valid + */ + function _burnOverride(address account, uint256 value) internal virtual override(CMTATBaseCommon, ERC20BurnModuleInternal) { + CMTATBaseCommon._burnOverride(account, value); + } /** - * @inheritdoc IBurnMintERC20 - * @dev - * - The access control is managed by the functions burn (ERC20BurnModule) and mint (ERC20MintModule) - * - Input validation is also managed by the functions burn and mint - * - You can mint more tokens than burnt + * @dev Check if a minter transfer is valid */ - function burnAndMint(address from, address to, uint256 amountToBurn, uint256 amountToMint, bytes calldata data) public virtual override(IBurnMintERC20) { - burn(from, amountToBurn, data); - mint(to, amountToMint, data); + function _minterTransferOverride(address from, address to, uint256 value) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { + CMTATBaseCommon._minterTransferOverride(from, to, value); } - /*////////////////////////////////////////////////////////////// - INTERNAL/PRIVATE FUNCTIONS - //////////////////////////////////////////////////////////////*/ - /** - * @dev we don't check the transfer validity here - */ + /* ==== Access Control Functions ==== */ + + /** + * @custom:access-control + * - the caller must have the `DEFAULT_ADMIN_ROLE`. + */ + function _authorizeERC20AttributeManagement() internal virtual override(ERC20BaseModule) runPolicy{} + + /** + * @custom:access-control + * - the caller must have the `MINTER_ROLE`. + */ + function _authorizeMint() internal virtual override(ERC20MintModule) runPolicy{} + + /** + * @custom:access-control + * - The caller must have the `BURNER_ROLE`. + */ + function _authorizeBurn() internal virtual override(ERC20BurnModule) runPolicy{} + + /** + * @custom:access-control + * - the caller must have the `DOCUMENT_ROLE`. + */ + function _authorizeDocumentManagement() internal virtual override(DocumentEngineModule) runPolicy{} + + /** + * @custom:access-control + * - the caller must have the `EXTRA_INFORMATION_ROLE`. + */ + function _authorizeExtraInfoManagement() internal virtual override(ExtraInformationModule) runPolicy{} + + /** + * @custom:access-control + * - the caller must have the `ERC20ENFORCER_ROLE`. + */ + function _authorizeERC20Enforcer() internal virtual override(ERC20EnforcementModule) runPolicy{} + + /** + * @custom:access-control + * - the caller must have the `DEFAULT_ADMIN_ROLE`. + */ + function _authorizeForcedTransfer() internal virtual override(ERC20EnforcementModule) runPolicy{} + + /** + * @custom:access-control + * - the caller must have the `SNAPSHOOTER_ROLE`. + */ + function _authorizeSnapshots() internal virtual override(SnapshotEngineModule) runPolicy{} + + + /** + * @custom:access-control + * - the caller must have the `DEFAULT_ADMIN_ROLE`. + */ + function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) runPolicy {} + + /** + * @dev + * A cross-chain bridge could call the OpenZeppelin function `renounceRole` to lose their privileges (CROSS_CHAIN_ROLE) + * While it is not intended,this has no other effect than depriving the bridge of burn/mint tokens + * An attacker could use this to disrupt minting/burning if they can get the bridge to execute calls. + * However, in this case, the bridge should still be considered compromised and not used again. + * @custom:access-control + * - the caller must have the `CROSS_CHAIN_ROLE`. + */ + function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) runPolicy {} + + + /** + * @custom:access-control + * - the caller must have the `BURNER_FROM_ROLE`. + * - We don't allow token holder to burn their own tokens if they don't have this role. + */ + function _authorizeBurnFrom() internal virtual override(ERC20CrossChainModule) runPolicy{} + + /** + * @custom:access-control + * - the caller must have the `BURNER_FROM_ROLE`. + * - We don't allow token holder to burn their own tokens if they don't have this role. + */ + function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) runPolicy{} + + /* ==== ERC-20 OpenZeppelin ==== */ function _update( address from, address to, uint256 amount - ) internal virtual override(ERC20Upgradeable) { - // We check here the address of the snapshotEngine here because we don't want to read balance/totalSupply if there is no Snapshot Engine - ISnapshotEngine snapshotEngineLocal = snapshotEngine(); - - if(address(snapshotEngineLocal) != address(0)){ - uint256 fromBalanceBefore = balanceOf(from); - uint256 toBalanceBefore = balanceOf(to); - uint256 totalSupplyBefore = totalSupply(); - - // We perform the update here (CEI pattern) - ERC20Upgradeable._update(from, to, amount); - - // Required to use the balance before the update - snapshotEngineLocal.operateOnTransfer(from, to, fromBalanceBefore, toBalanceBefore, totalSupplyBefore); - } else { - // Update without snapshot call - ERC20Upgradeable._update(from, to, amount); - } + ) internal virtual override(ERC20Upgradeable, CMTATBaseCommon) { + return CMTATBaseCommon._update(from, to, amount); } } \ No newline at end of file diff --git a/contracts/modules/standard/engines/CCTDocumentEngineModule.sol b/contracts/modules/standard/engines/CCTDocumentEngineModule.sol deleted file mode 100644 index b3d55f3..0000000 --- a/contracts/modules/standard/engines/CCTDocumentEngineModule.sol +++ /dev/null @@ -1,103 +0,0 @@ -// SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - -import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; -import {IERC1643, IDocumentEngine} from "../../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol"; -import {IDocumentEngineModule} from "../../../../submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol"; -import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; - -/** - * @title Document module (ERC1643) - * @dev - * - * Retrieve documents from a documentEngine - */ -abstract contract CCTDocumentEngineModule is Initializable, IDocumentEngineModule, PolicyProtected { - - // keccak256(abi.encode(uint256(keccak256("CMTAT.storage.DocumentEngineModule")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 private constant DocumentEngineModuleStorageLocation = 0xbd0905600c85d707dc53eba2e146c1c2527cd32ac3ff6b86846155151b3e2700; - /* ==== ERC-7201 State Variables === */ - struct DocumentEngineModuleStorage { - IERC1643 _documentEngine; - } - - /* ============ Initializer Function ============ */ - /** - * @dev - * - * - set a DocumentEngine if address different from zero - * - */ - function __CCTDocumentEngineModule_init_unchained(IERC1643 documentEngine_) - internal virtual onlyInitializing { - if (address(documentEngine_) != address (0)) { - DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage(); - _setDocumentEngine($, documentEngine_); - } - } - - /*////////////////////////////////////////////////////////////// - PUBLIC/EXTERNAL FUNCTIONS - //////////////////////////////////////////////////////////////*/ - /** - * @inheritdoc IDocumentEngineModule - */ - function documentEngine() public view virtual override(IDocumentEngineModule) returns (IERC1643 documentEngine_) { - DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage(); - return $._documentEngine; - } - - /** - * @inheritdoc IERC1643 - */ - function getDocument(string memory name) public view virtual override(IERC1643) returns (Document memory document){ - DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage(); - if(address($._documentEngine) != address(0)){ - return $._documentEngine.getDocument(name); - } else{ - return Document("", 0x0, 0); - } - } - - /** - * @inheritdoc IERC1643 - */ - function getAllDocuments() public view virtual override(IERC1643) returns (string[] memory documentNames_){ - DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage(); - if(address($._documentEngine) != address(0)){ - documentNames_ = $._documentEngine.getAllDocuments(); - } - } - - /* ============ Restricted Functions ============ */ - - /** - * @inheritdoc IDocumentEngineModule - */ - function setDocumentEngine( - IERC1643 documentEngine_ - ) public virtual override(IDocumentEngineModule) runPolicy { - DocumentEngineModuleStorage storage $ = _getDocumentEngineModuleStorage(); - require($._documentEngine != documentEngine_, CMTAT_DocumentEngineModule_SameValue()); - _setDocumentEngine($, documentEngine_); - } - - - /*////////////////////////////////////////////////////////////// - INTERNAL/PRIVATE FUNCTIONS - //////////////////////////////////////////////////////////////*/ - function _setDocumentEngine( - DocumentEngineModuleStorage storage $, IERC1643 documentEngine_ - ) internal virtual { - $._documentEngine = documentEngine_; - emit DocumentEngine(documentEngine_); - } - - /* ============ ERC-7201 ============ */ - function _getDocumentEngineModuleStorage() private pure returns (DocumentEngineModuleStorage storage $) { - assembly { - $.slot := DocumentEngineModuleStorageLocation - } - } -} diff --git a/contracts/modules/standard/engines/CCTSnapshotEngineModule.sol b/contracts/modules/standard/engines/CCTSnapshotEngineModule.sol deleted file mode 100644 index 345d23c..0000000 --- a/contracts/modules/standard/engines/CCTSnapshotEngineModule.sol +++ /dev/null @@ -1,84 +0,0 @@ -// SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - -import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; -import {ISnapshotEngine, ISnapshotEngineModule} from "../../../../submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol"; -import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; - - -abstract contract CCTSnapshotEngineModule is Initializable, ISnapshotEngineModule, PolicyProtected { - - /* ============ ERC-7201 ============ */ - // keccak256(abi.encode(uint256(keccak256("CMTAT.storage.SnapshotEngineModule")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 private constant SnapshotEngineModuleStorageLocation = 0x1387b97dfab601d3023cb57858a6be29329babb05c85597ddbe4926c1193a900; - /* ==== ERC-7201 State Variables === */ - struct SnapshotEngineModuleStorage { - ISnapshotEngine _snapshotEngine; - } - - /* ============ Initializer Function ============ */ - /** - * @dev - * - * - The grant to the admin role is done by AccessControlDefaultAdminRules - * - The control of the zero address is done by AccessControlDefaultAdminRules - * - */ - function __CCTSnapshotEngineModule_init_unchained(ISnapshotEngine snapshotEngine_) - internal virtual onlyInitializing { - if (address(snapshotEngine_) != address (0)) { - SnapshotEngineModuleStorage storage $ = _getSnapshotEngineModuleStorage(); - _setSnapshotEngine($, snapshotEngine_); - } - } - - - /*////////////////////////////////////////////////////////////// - PUBLIC/EXTERNAL FUNCTIONS - //////////////////////////////////////////////////////////////*/ - - /* ============ State Restricted Functions ============ */ - /** - * @inheritdoc ISnapshotEngineModule - * @custom:access-control - * - The caller must have the `SNAPSHOOTER_ROLE`. - */ - function setSnapshotEngine( - ISnapshotEngine snapshotEngine_ - ) public virtual override(ISnapshotEngineModule) runPolicy { - SnapshotEngineModuleStorage storage $ = _getSnapshotEngineModuleStorage(); - require($._snapshotEngine != snapshotEngine_, CMTAT_SnapshotModule_SameValue()); - _setSnapshotEngine($, snapshotEngine_); - } - - - /* ============ View functions ============ */ - - /** - * @inheritdoc ISnapshotEngineModule - */ - function snapshotEngine() public view virtual override(ISnapshotEngineModule) returns (ISnapshotEngine) { - SnapshotEngineModuleStorage storage $ = _getSnapshotEngineModuleStorage(); - return $._snapshotEngine; - } - /*////////////////////////////////////////////////////////////// - INTERNAL/PRIVATE FUNCTIONS - //////////////////////////////////////////////////////////////*/ - - function _setSnapshotEngine( - SnapshotEngineModuleStorage storage $, ISnapshotEngine snapshotEngine_ - ) internal virtual { - $._snapshotEngine = snapshotEngine_; - emit SnapshotEngine(snapshotEngine_); - } - - /* ============ ERC-7201 ============ */ - function _getSnapshotEngineModuleStorage() private pure returns (SnapshotEngineModuleStorage storage $) { - assembly { - $.slot := SnapshotEngineModuleStorageLocation - } - } - - -} diff --git a/contracts/modules/standard/erc20/CCTBurnModule.sol b/contracts/modules/standard/erc20/CCTBurnModule.sol deleted file mode 100644 index a482b0c..0000000 --- a/contracts/modules/standard/erc20/CCTBurnModule.sol +++ /dev/null @@ -1,85 +0,0 @@ -// SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - -import {ERC20BurnModuleInternal} from "../../../../submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol"; -import {IBurnBatchERC20} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol"; -import {IERC3643Burn} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol"; -import {IERC7551Burn, IERC5679Burn} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol"; -import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; - - -abstract contract CCTBurnModule is ERC20BurnModuleInternal, IBurnBatchERC20, IERC3643Burn, IERC7551Burn, PolicyProtected { - - /*////////////////////////////////////////////////////////////// - PUBLIC/EXTERNAL FUNCTIONS - //////////////////////////////////////////////////////////////*/ - - /** - * @dev - * @inheritdoc IERC7551Burn - * @custom:access-control - * - the caller must have the `BURNER_ROLE`. - */ - function burn( - address account, - uint256 value, - bytes calldata data - ) public virtual override(IERC5679Burn) runPolicy { - _burn(account, value, data); - } - - /** - * @inheritdoc IERC3643Burn - * @custom:access-control - * - the caller must have the `BURNER_ROLE`. - */ - function burn( - address account, - uint256 value - ) public virtual override(IERC3643Burn) runPolicy { - _burn(account, value,""); - } - - /** - * - * @inheritdoc IBurnBatchERC20 - * @custom:access-control - * - the caller must have the `BURNER_ROLE`. - */ - function batchBurn( - address[] calldata accounts, - uint256[] calldata values, - bytes memory data - ) public virtual override(IBurnBatchERC20) runPolicy { - _batchBurn(accounts, values); - emit BatchBurn(_msgSender(),accounts, values, data ); - } - - /** - * - * @inheritdoc IERC3643Burn - * @custom:access-control - * - the caller must have the `BURNER_ROLE`. - */ - function batchBurn( - address[] calldata accounts, - uint256[] calldata values - ) public virtual override (IERC3643Burn) runPolicy { - _batchBurn(accounts, values); - emit BatchBurn(_msgSender(),accounts, values, "" ); - } - - /*////////////////////////////////////////////////////////////// - INTERNAL/PRIVATE FUNCTIONS - //////////////////////////////////////////////////////////////*/ - - function _burn( - address account, - uint256 value, - bytes memory data - ) internal virtual { - _burnOverride(account, value); - emit Burn(_msgSender(), account, value, data); - } -} \ No newline at end of file diff --git a/contracts/modules/standard/erc20/CCTERC20Module.sol b/contracts/modules/standard/erc20/CCTERC20Module.sol deleted file mode 100644 index f699e32..0000000 --- a/contracts/modules/standard/erc20/CCTERC20Module.sol +++ /dev/null @@ -1,81 +0,0 @@ -// SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - - -import {CCTMintModule} from "./CCTMintModule.sol"; -import {CCTBurnModule} from "./CCTBurnModule.sol"; -import {IERC20Allowance} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol"; -import {IERC20BatchBalance} from "../../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; -import {IERC3643ERC20Base} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol"; -import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; -import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; - - -abstract contract CCTERC20Module is CCTMintModule, CCTBurnModule, IERC20Allowance, IERC3643ERC20Base, IERC20BatchBalance { - // This is a placeholder for the actual implementation of the CCTERC20Module. - /* ============ Events ============ */ - event Name(string indexed newNameIndexed, string newName); - event Symbol(string indexed newSymbolIndexed, string newSymbol); - - // Copy from ERC20 as these are private variables and are not inherited - // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ERC20")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 public constant CCTERC20StorageLocation = 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00; - - function _getCCTERC20Storage() private pure returns (ERC20Storage storage $) { - assembly { - $.slot := CCTERC20StorageLocation - } - } - - /* ============ Initializer Function ============ */ - /** - * @dev Initializers: Sets the values for decimals. - * - * this value is immutable: it can only be set once during - * construction/initialization. - */ - function __CCTERC20Module_init_unchained( - string memory name_, - string memory symbol_ - ) internal virtual onlyInitializing { - __ERC20_init_unchained(name_, symbol_); - } - /*////////////////////////////////////////////////////////////// - PUBLIC/EXTERNAL FUNCTIONS - //////////////////////////////////////////////////////////////*/ - - - /* ============ Custom functions ============ */ - /* ======== State Functions ======= */ - /** - * @inheritdoc IERC3643ERC20Base - * @dev - */ - function setName(string calldata name_) public virtual override(IERC3643ERC20Base) runPolicy{ - ERC20Storage storage $ = _getCCTERC20Storage(); - $._name = name_; - emit Name(name_, name_); - } - - /** - * @inheritdoc IERC3643ERC20Base - */ - function setSymbol(string calldata symbol_) public virtual override(IERC3643ERC20Base) runPolicy { - ERC20Storage storage $ = _getCCTERC20Storage(); - $._symbol = symbol_; - emit Symbol(symbol_, symbol_); - } - /* ======== View functions ======= */ - /** - * @inheritdoc IERC20BatchBalance - */ - function batchBalanceOf(address[] calldata addresses) public view virtual - override(IERC20BatchBalance) returns(uint256[] memory balances , uint256 totalSupply_) { - balances = new uint256[](addresses.length); - for(uint256 i = 0; i < addresses.length; ++i){ - balances[i] = ERC20Upgradeable.balanceOf(addresses[i]); - } - totalSupply_ = ERC20Upgradeable.totalSupply(); - } -} \ No newline at end of file diff --git a/contracts/modules/standard/erc20/CCTMintModule.sol b/contracts/modules/standard/erc20/CCTMintModule.sol deleted file mode 100644 index 25abc92..0000000 --- a/contracts/modules/standard/erc20/CCTMintModule.sol +++ /dev/null @@ -1,83 +0,0 @@ -// SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - -import {ERC20MintModuleInternal} from "../../../../submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol"; -import {IMintBatchERC20Event} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol"; -import {IERC3643Mint, IERC3643BatchTransfer} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol"; -import {IERC7551Mint, IERC5679Mint} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol"; -import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; - - -abstract contract CCTMintModule is ERC20MintModuleInternal, IERC3643Mint, IERC3643BatchTransfer, - IERC7551Mint, IMintBatchERC20Event, PolicyProtected { - - /*////////////////////////////////////////////////////////////// - PUBLIC/EXTERNAL FUNCTIONS - //////////////////////////////////////////////////////////////*/ - /** - * @inheritdoc IERC5679Mint - * @custom:devimpl - * Requirements: - * - `account` cannot be the zero address (check made by _mint). - * @custom:access-control - * - the caller must have the `MINTER_ROLE`. - */ - function mint(address account, uint256 value, bytes calldata data) public virtual override(IERC5679Mint) runPolicy { - _mint(account, value, data); - } - - /** - * @inheritdoc IERC3643Mint - * @dev - - * Emits a {Mint} event. - * Emits a {Transfer} event with `from` set to the zero address (emits inside _mint). - * - * Requirements: - * - `account` cannot be the zero address (check made by _mint). - * @custom:access-control - * - the caller must have the `MINTER_ROLE`. - */ - function mint(address account, uint256 value) public virtual override(IERC3643Mint) runPolicy { - _mint(account, value, ""); - } - - /** - * - * @inheritdoc IERC3643Mint - * @custom:devimpl - * Requirement - * - `accounts` cannot contain a zero address (check made by _mint). - * @custom:access-control - * - the caller must have the `MINTER_ROLE`. - */ - function batchMint( - address[] calldata accounts, - uint256[] calldata values - ) public virtual override(IERC3643Mint) runPolicy { - _batchMint(accounts, values); - emit BatchMint(_msgSender(), accounts, values); - } - - /** - * @inheritdoc IERC3643BatchTransfer - * @custom:access-control - * - the caller must have the `MINTER_ROLE`. - */ - function batchTransfer( - address[] calldata tos, - uint256[] calldata values - ) public virtual override(IERC3643BatchTransfer) runPolicy returns (bool success_) { - return _batchTransfer(tos, values); - } - - /*////////////////////////////////////////////////////////////// - INTERNAL/PRIVATE FUNCTIONS - //////////////////////////////////////////////////////////////*/ - function _mint(address account, uint256 value, bytes memory data) internal virtual { - _mintOverride(account, value); - emit Mint(_msgSender(), account, value, data); - } - -} \ No newline at end of file diff --git a/contracts/modules/standard/extensions/CCTCrossChainModule.sol b/contracts/modules/standard/extensions/CCTCrossChainModule.sol deleted file mode 100644 index f69f632..0000000 --- a/contracts/modules/standard/extensions/CCTCrossChainModule.sol +++ /dev/null @@ -1,103 +0,0 @@ -// SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - - -import {IERC7802} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol"; -import {IBurnFromERC20} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol"; -import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; -import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; -import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; -import {CCTModule} from "./CCTModule.sol"; -import {IERC20Allowance} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol"; - - -/** - * @title ERC20CrossChainModule (ERC-7802) - * @dev - * - * Contains all mint and burn functions, inherits from ERC-20 - */ -abstract contract CCTCrossChainModule is ERC20Upgradeable, CCTModule, IERC7802, IBurnFromERC20 { - - /*////////////////////////////////////////////////////////////// - PUBLIC/EXTERNAL FUNCTIONS - //////////////////////////////////////////////////////////////*/ - - /** - * @inheritdoc IERC7802 - * @dev - * Don't emit the same event as configured in the ERC20MintModule - * @custom:access-control - * Protected by the modifier onlyTokenBridge. - */ - function crosschainMint(address to, uint256 value) public virtual override(IERC7802) runPolicy { - _mint(to, value); - emit CrosschainMint(to, value,_msgSender()); - } - - /** - * @inheritdoc IERC7802 - * @dev - * Don't emit the same event as configured in the ERC20BurnModule - * Don't require allowance to follow Optimism Superchain ERC20 and OpenZeppelin implementation - * @custom:access-control - * - Protected by the modifier onlyTokenBridge. - */ - function crosschainBurn(address from, uint256 value) public virtual override(IERC7802) runPolicy { - _burn(from, value); - emit CrosschainBurn(from, value, _msgSender()); - } - - /** - * @inheritdoc IBurnFromERC20 - * @custom:access-control - * - Protected by the modifier onlyBurnerFrom. - */ - function burnFrom(address account, uint256 value) public virtual override(IBurnFromERC20) runPolicy { - address sender = _msgSender(); - _burnFrom(sender, account, value); - } - - /** - * @inheritdoc IBurnFromERC20 - * @custom:access-control - * - Protected by the modifier onlyBurnerFrom - */ - function burn( - uint256 value - ) public virtual override(IBurnFromERC20) runPolicy{ - // Don't emit Spend event because allowance is not used here - address sender = _msgSender(); - // burn from itself - _burn(sender, sender, value); - } - - - - /* ============ View functions ============ */ - function supportsInterface(bytes4 _interfaceId) public view virtual override(IERC165, PolicyProtected) returns (bool) { - return _interfaceId == type(IERC7802).interfaceId || PolicyProtected.supportsInterface(_interfaceId); - } - - /*////////////////////////////////////////////////////////////// - INTERNAL/PRIVATE FUNCTIONS - //////////////////////////////////////////////////////////////*/ - function _burnFrom(address sender, address account, uint256 value) internal virtual { - // Allowance check and spend - ERC20Upgradeable._spendAllowance(account, sender, value ); - // Specific event for the spend operation, same as transferFrom (ERC20BaseModule) - emit IERC20Allowance.Spend(account, sender, value); - _burn(sender, account, value); - } - - function _burn( - address sender, address account, uint256 value - ) internal virtual { - // burn - _burn(account, value); - // Specific event to burnFrom and self-burn (burn) - // Don't emit CrossChainBurn because this function burn is not part of the IERC7802 interface - emit BurnFrom(sender, account, sender, value); - } -} \ No newline at end of file diff --git a/contracts/modules/standard/extensions/CCTEnforcementModule.sol b/contracts/modules/standard/extensions/CCTEnforcementModule.sol deleted file mode 100644 index 53f6d8b..0000000 --- a/contracts/modules/standard/extensions/CCTEnforcementModule.sol +++ /dev/null @@ -1,103 +0,0 @@ -// SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - -import {ERC20EnforcementModuleInternal} from "../../../../submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol"; -import {IERC3643ERC20Enforcement} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol"; -import {IERC7551ERC20Enforcement, IERC7551ERC20EnforcementEvent} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol"; -import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; - - -abstract contract CCTEnforcementModule is ERC20EnforcementModuleInternal, IERC7551ERC20Enforcement, IERC3643ERC20Enforcement, PolicyProtected { - - /*////////////////////////////////////////////////////////////// - PUBLIC/EXTERNAL FUNCTIONS - //////////////////////////////////////////////////////////////*/ - - /** - * - * @inheritdoc IERC7551ERC20Enforcement - */ - function getFrozenTokens(address account) public override(IERC7551ERC20Enforcement, IERC3643ERC20Enforcement) - view virtual returns (uint256 frozenBalance_) { - return _getFrozenTokens(account); - } - - /** - * - * @inheritdoc IERC7551ERC20Enforcement - */ - function getActiveBalanceOf(address account) public view override(IERC7551ERC20Enforcement) returns (uint256 activeBalance_) { - return _getActiveBalanceOf(account); - } - - /* ============ ERC-20 Enforcement ============ */ - /** - * - * @inheritdoc IERC7551ERC20Enforcement - * @custom:access-control - * - the caller must have the `DEFAULT_ADMIN_ROLE`. - */ - function forcedTransfer(address from, address to, uint256 value, bytes calldata data) - public virtual override(IERC7551ERC20Enforcement) runPolicy returns (bool) { - _forcedTransfer(from, to, value, data); - return true; - } - - /** - * - * @inheritdoc IERC3643ERC20Enforcement - * @custom:access-control - * - the caller must have the `DEFAULT_ADMIN_ROLE`. - */ - function forcedTransfer(address from, address to, uint256 value) - public virtual override(IERC3643ERC20Enforcement) runPolicy returns (bool) { - _forcedTransfer(from, to, value, ""); - return true; - } - - /** - * - * @inheritdoc IERC3643ERC20Enforcement - * @custom:access-control - * - the caller must have the `ERC20ENFORCER_ROLE`. - */ - function freezePartialTokens(address account, uint256 value) - public virtual override(IERC3643ERC20Enforcement) runPolicy { - _freezePartialTokens(account, value, ""); - } - - /** - * - * @inheritdoc IERC3643ERC20Enforcement - * @custom:access-control - * - the caller must have the `ERC20ENFORCER_ROLE`. - */ - function unfreezePartialTokens(address account, uint256 value) - public virtual override(IERC3643ERC20Enforcement) runPolicy { - _unfreezePartialTokens(account, value, ""); - } - - /** - * - * @inheritdoc IERC7551ERC20Enforcement - * @custom:access-control - * - the caller must have the `ERC20ENFORCER_ROLE`. - */ - function freezePartialTokens(address account, uint256 value, bytes calldata data) - public virtual override(IERC7551ERC20Enforcement) runPolicy { - _freezePartialTokens(account, value, data); - } - - /** - * - * @inheritdoc IERC7551ERC20Enforcement - * @custom:access-control - * - the caller must have the `ERC20ENFORCER_ROLE`. - */ - function unfreezePartialTokens(address account, uint256 value, bytes calldata data) - public virtual override(IERC7551ERC20Enforcement) runPolicy { - _unfreezePartialTokens(account, value, data); - } - -} diff --git a/contracts/modules/standard/extensions/CCTExtraInformationModule.sol b/contracts/modules/standard/extensions/CCTExtraInformationModule.sol deleted file mode 100644 index 0ef7e49..0000000 --- a/contracts/modules/standard/extensions/CCTExtraInformationModule.sol +++ /dev/null @@ -1,148 +0,0 @@ -// SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - - -import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; -import {IERC1643CMTAT, IERC1643} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643CMTAT.sol"; -import {ICMTATBase} from "../../../../submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol"; -import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; - - -abstract contract CCTExtraInformationModule is ICMTATBase, PolicyProtected { - - /* ============ ERC-7201 ============ */ - // keccak256(abi.encode(uint256(keccak256("CMTAT.storage.ExtraInformationModule")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 private constant ExtraInformationModuleStorageLocation = 0xd2d5d34c4a4dea00599692d3257c0aebc5e0359176118cd2364ab9b008c2d100; - - /* ==== ERC-7201 State Variables === */ - struct ExtraInformationModuleStorage { - string _tokenId; - CMTATTerms _terms; - string _information; - } - - /* ============ Initializer Function ============ */ - /** - * @dev Sets the values for {tokenId}, {terms_} and {information}. - * - */ - function __CCTExtraInformationModule_init_unchained( - string memory tokenId_, - IERC1643CMTAT.DocumentInfo memory terms_, - string memory information_ - ) internal virtual onlyInitializing { - ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); - // tokenId - _setTokenId($, tokenId_); - // Terms - _setTerms($, terms_); - // Information - _setInformation($, information_); - } - - /*////////////////////////////////////////////////////////////// - PUBLIC/EXTERNAL FUNCTIONS - //////////////////////////////////////////////////////////////*/ - - /* ============ Restricted Functions ============ */ - - /** - * @dev the tokenId will be changed even if the new value is the same as the current one - * @custom:access-control - * - the caller must have the `EXTRA_INFORMATION_ROLE`. - */ - function setTokenId( - string calldata tokenId_ - ) public virtual override(ICMTATBase) runPolicy { - ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); - _setTokenId($, tokenId_); - } - - /** - * @inheritdoc ICMTATBase - * @dev The terms will be changed even if the new value is the same as the current one - * @custom:access-control - * - the caller must have the `EXTRA_INFORMATION_ROLE`. - */ - function setTerms(IERC1643CMTAT.DocumentInfo calldata terms_) public virtual override(ICMTATBase) runPolicy { - _setTerms(terms_); - } - - /** - * @inheritdoc ICMTATBase - * @dev The information will be changed even if the new value is the same as the current one - * @custom:access-control - * - the caller must have the `EXTRA_INFORMATION_ROLE`. - */ - - function setInformation( - string calldata information_ - ) public virtual runPolicy { - ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); - _setInformation($, information_); - } - - /* ============ View functions ============ */ - /** - * @inheritdoc ICMTATBase - */ - function tokenId() public view virtual override(ICMTATBase) returns (string memory tokenId_) { - ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); - return $._tokenId; - } - - /** - * @inheritdoc ICMTATBase - */ - function terms() public view virtual override(ICMTATBase) returns (CMTATTerms memory terms_) { - ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); - return $._terms; - } - - /** - * @inheritdoc ICMTATBase - */ - function information() public view virtual override(ICMTATBase) returns (string memory information_) { - ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); - return $._information; - } - - /*////////////////////////////////////////////////////////////// - INTERNAL/PRIVATE FUNCTIONS - //////////////////////////////////////////////////////////////*/ - function _setTerms(IERC1643CMTAT.DocumentInfo memory terms_) internal{ - ExtraInformationModuleStorage storage $ = _getExtraInformationModuleStorage(); - _setTerms($, terms_); - } - - function _setTokenId( - ExtraInformationModuleStorage storage $, string memory tokenId_ - ) internal virtual { - $._tokenId = tokenId_; - emit TokenId(tokenId_, tokenId_); - } - - function _setTerms(ExtraInformationModuleStorage storage $, IERC1643CMTAT.DocumentInfo memory terms_) internal virtual { - // Terms/Document name - $._terms.name = terms_.name; - // Document - $._terms.doc.documentHash = terms_.documentHash; - $._terms.doc.uri = terms_.uri; - $._terms.doc.lastModified = block.timestamp; - // Event - emit Terms($._terms); - } - - function _setInformation(ExtraInformationModuleStorage storage $, string memory information_) internal virtual { - $._information = information_; - emit Information(information_); - } - - /* ============ ERC-7201 ============ */ - function _getExtraInformationModuleStorage() private pure returns (ExtraInformationModuleStorage storage $) { - assembly { - $.slot := ExtraInformationModuleStorageLocation - } - } -} diff --git a/contracts/modules/standard/extensions/CCTModule.sol b/contracts/modules/standard/extensions/CCTModule.sol deleted file mode 100644 index 3c5a255..0000000 --- a/contracts/modules/standard/extensions/CCTModule.sol +++ /dev/null @@ -1,60 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.20; - - -import {IGetCCIPAdmin} from "../../../../submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol"; -import {PolicyProtected} from "../../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; - - -/** - * @title Chainlink CCT specific functions - * Implements CCT specific functions to make CMTAT compatible with Chainlink CCIP (CCT standard) - * - */ -abstract contract CCTModule is IGetCCIPAdmin, PolicyProtected { - /* ============ Error ============ */ - error CMTAT_CCIPModule_SameValue(); - // keccak256(abi.encode(uint256(keccak256("CMTAT.storage.CCIPModule")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 private constant CCIPModuleStorageLocation = 0x364fbfd89c0eee55bbc8dd10b1a9bf3e04fba9f3ee606f4c79a82f9941ad7a00; - - /* ==== ERC-7201 State Variables === */ - struct CCIPModuleStorage { - /** - * @dev the CCIPAdmin can be used to register with the CCIP token admin registry, but has no other special powers, - * and can only be transferred by calling setCCIPAdmin. - */ - address s_ccipAdmin; - } - - /** - * @notice Transfers the CCIPAdmin role to a new address - * @dev only authorised addresses (onlyCCIPSetAdmin) can call this function, NOT the current ccipAdmin, and 1-step ownership transfer is used. - * @param newAdmin The address to transfer the CCIPAdmin role to. Setting to address(0) is a valid way to revoke - * the role - */ - function setCCIPAdmin(address newAdmin) public virtual runPolicy { - CCIPModuleStorage storage $ = _getCCIPModuleStorage(); - address currentAdmin = $.s_ccipAdmin; - require(newAdmin != currentAdmin, CMTAT_CCIPModule_SameValue()); - - $.s_ccipAdmin = newAdmin; - - emit CCIPAdminTransferred(currentAdmin, newAdmin); - } - - /** - * Returns the current CCIPAdmin - */ - function getCCIPAdmin() public view virtual returns (address) { - CCIPModuleStorage storage $ = _getCCIPModuleStorage(); - return $.s_ccipAdmin; - } - - /* ============ ERC-7201 ============ */ - function _getCCIPModuleStorage() internal pure returns (CCIPModuleStorage storage $) { - assembly { - $.slot := CCIPModuleStorageLocation - } - } -} diff --git a/submodules/CMTAT b/submodules/CMTAT index ee08683..012ccc4 160000 --- a/submodules/CMTAT +++ b/submodules/CMTAT @@ -1 +1 @@ -Subproject commit ee08683cb4b40ada31538da5947c601ff8ef2249 +Subproject commit 012ccc409c4205da2b38f23ce21496b3486bc663 diff --git a/test/standardDeploymentUpgradeable.test.js b/test/standardDeploymentUpgradeable.test.js index 2a84f07..4ad0bcd 100644 --- a/test/standardDeploymentUpgradeable.test.js +++ b/test/standardDeploymentUpgradeable.test.js @@ -7,7 +7,6 @@ describe("ComplianceTokenCMTAT Upgradeable Deployment", () => { it("should deploy the ComplianceTokenCMTAT standalone contract", async () => { Object.assign(this, await loadFixture(etherAddresses)) - /*const cmtat = await deployComplianceTokenCMTATUpgradeable( this.forwarder.address, this.admin.address, @@ -24,7 +23,7 @@ describe("ComplianceTokenCMTAT Upgradeable Deployment", () => { // expect(await policyEngine.getAddress()).to.be.properAddress; // Deploy ComplianceTokenCMTAT with the PolicyEngine - const cmtat = await deployComplianceTokenCMTATUpgradeable(this.forwarder.address, this.admin.address, this.admin.address, await policyEngine.getAddress()) + const cmtat = await deployComplianceTokenCMTATUpgradeable(this.forwarder.address, this.admin.address, await policyEngine.getAddress()) await cmtat.connect(this.admin).attach(policyEngine) expect(await cmtat.name()).to.equal("Security Token"); diff --git a/test/testUtils.js b/test/testUtils.js index 3c14151..eeb916d 100644 --- a/test/testUtils.js +++ b/test/testUtils.js @@ -2,8 +2,8 @@ const {ethers, upgrades } = require("hardhat"); async function etherAddresses () { const [ - forwarder, admin, + forwarder, address1, address2, address3, @@ -13,8 +13,8 @@ async function etherAddresses () { attacker ] = await ethers.getSigners() return { - forwarder, admin, + forwarder, address1, address2, address3, @@ -26,7 +26,7 @@ async function etherAddresses () { } -async function deployComplianceTokenCMTATStandalone (forwarderAddress, adminAddress, deployerAddress) { +async function deployComplianceTokenCMTATStandalone (forwarderAddress, deployerAddress, policyEngine) { const erc20Attributes = [ "Security Token", // name "ST", // symbol @@ -46,12 +46,9 @@ async function deployComplianceTokenCMTATStandalone (forwarderAddress, adminAddr "ComplianceTokenCMTATStandalone", [ forwarderAddress, - adminAddress, erc20Attributes, extraInformationAttributes, - ethers.ZeroAddress, // snapshotEngine - ethers.ZeroAddress, // documentEngine - ethers.ZeroAddress // policyEngine + policyEngine ], deployerAddress ) @@ -59,7 +56,7 @@ async function deployComplianceTokenCMTATStandalone (forwarderAddress, adminAddr return ComplianceTokenCMTATStandalone; } -async function deployComplianceTokenCMTATUpgradeable (forwarderAddress, adminAddress, deployerAddress, policyEngine) { +async function deployComplianceTokenCMTATUpgradeable (forwarderAddress, deployerAddress, policyEngine) { const ETHERS_CMTAT_PROXY_FACTORY = await ethers.getContractFactory( 'ComplianceTokenCMTATUpgradeable' ) @@ -81,11 +78,8 @@ async function deployComplianceTokenCMTATUpgradeable (forwarderAddress, adminAdd const ComplianceTokenCMTATUpgradeable = await upgrades.deployProxy( ETHERS_CMTAT_PROXY_FACTORY, [ - adminAddress, erc20Attributes, extraInformationAttributes, - ethers.ZeroAddress, // snapshotEngine - ethers.ZeroAddress, // documentEngine policyEngine // policyEngine ], { From ddf33f8744def2b209c5d4a44e2f3c58026b0008 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:25:08 +0100 Subject: [PATCH 08/57] Add call to policy protected unchained and fix compilation warning --- .../modules/lite/CCTCMTATBasePolicyEngine.sol | 3 +-- .../lite/ValidationModulePolicyEngine.sol | 16 ++++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index cf59560..93ef6db 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -89,8 +89,7 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_); /* Chainlink-ACE policy module */ - //__PolicyProtected_init_unchained(policyEngine_); - //__PolicyProtected_init(admin, policyEngine_); + __PolicyProtected_init_unchained(policyEngine_); } /* diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index 10b1a24..da1e7a0 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -71,19 +71,19 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr // Note: parameters are kept to retain the interface, even if not used function _canTransferFromWithPolicyEngine( - address spender, - address from, - address to, - uint256 value + address /* spender */, + address /* from */, + address /* to */, + uint256 /* value*/ ) internal view virtual returns (bool) { return _tryRunPolicies(); } // Note: parameters are kept to retain the interface, even if not used function _canTransferWithPolicyEngine( - address from, - address to, - uint256 value + address /* from */, + address /* to */, + uint256 /* value */ ) internal view virtual returns (bool) { return _tryRunPolicies(); } @@ -108,7 +108,7 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr /* ============ State functions ============ */ - function _transferred(address spender, address from, address to, uint256 value) internal virtual returns (bool) { + function _transferred(address spender, address from, address to, uint256 /* value */) internal virtual returns (bool) { if(!_canTransferGenericByModule(spender, from, to)) { return false; } else { From fa893f488f77125a41737d5f7926dfb33faac384 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Mon, 2 Mar 2026 13:58:02 +0000 Subject: [PATCH 09/57] remove chainlink-ace submodule, add npm dependency --- .gitmodules | 6 +----- package-lock.json | 14 ++++++++++++++ package.json | 1 + 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index 987cae4..40fe4b9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,8 +1,4 @@ -[submodule "submodules/chainlink-ace"] - path = submodules/chainlink-ace - url = https://github.com/smartcontractkit/chainlink-ace - branch = main [submodule "submodules/CMTAT"] path = submodules/CMTAT url = https://github.com/CMTA/CMTAT - branch = master + branch = dev diff --git a/package-lock.json b/package-lock.json index 9a4919d..4bd0a38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "cmtat-ace", "version": "1.0.0", "devDependencies": { + "@chainlink/ace": "^1.0.0", "@chainlink/contracts": "1.3.0", "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", "@nomicfoundation/hardhat-network-helpers": "^1.1.2", @@ -774,6 +775,13 @@ "integrity": "sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==", "dev": true }, + "node_modules/@chainlink/ace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@chainlink/ace/-/ace-1.0.0.tgz", + "integrity": "sha512-lamF+fabw5cyIQ+7PA5QkEl0GyHmmH3lc875jrspo9VxsxiKbMxDcRDGPEuubFQS3Zcx7H/Z80C72+Xm/FgeqA==", + "dev": true, + "license": "BUSL-1.1" + }, "node_modules/@chainlink/contracts": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.3.0.tgz", @@ -8913,6 +8921,12 @@ "integrity": "sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==", "dev": true }, + "@chainlink/ace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@chainlink/ace/-/ace-1.0.0.tgz", + "integrity": "sha512-lamF+fabw5cyIQ+7PA5QkEl0GyHmmH3lc875jrspo9VxsxiKbMxDcRDGPEuubFQS3Zcx7H/Z80C72+Xm/FgeqA==", + "dev": true + }, "@chainlink/contracts": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.3.0.tgz", diff --git a/package.json b/package.json index 58f40cc..6d0a9cb 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "author": "", "homepage": "https://github.com/CMTA/CMTAT-ACE#readme", "devDependencies": { + "@chainlink/ace": "^1.0.0", "@chainlink/contracts": "1.3.0", "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", "@nomicfoundation/hardhat-network-helpers": "^1.1.2", From 233f336a36e5e8bc3de2a651ae4c582b241305f0 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Mon, 2 Mar 2026 13:58:49 +0000 Subject: [PATCH 10/57] remove ace submodule tag --- submodules/chainlink-ace | 1 - 1 file changed, 1 deletion(-) delete mode 160000 submodules/chainlink-ace diff --git a/submodules/chainlink-ace b/submodules/chainlink-ace deleted file mode 160000 index e0babf8..0000000 --- a/submodules/chainlink-ace +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e0babf820a1fcac13e446c99d650f3e3400c2df8 From 7a8786b7bad4dac0fb99f16cb1a8804a94507598 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Tue, 3 Mar 2026 11:58:17 +0000 Subject: [PATCH 11/57] Change code references to new chainlink npm package --- contracts/modules/lite/CCTCMTATBaseERC1404.sol | 6 +++--- contracts/modules/lite/CCTCMTATBasePolicyEngine.sol | 8 ++++---- .../modules/lite/ValidationModulePolicyEngine.sol | 6 +++--- contracts/modules/standard/CCTCommon.sol | 12 +++++++----- contracts/test/PolicyEngineImport.sol | 2 +- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/contracts/modules/lite/CCTCMTATBaseERC1404.sol b/contracts/modules/lite/CCTCMTATBaseERC1404.sol index a3964c2..31ce68b 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC1404.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC1404.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.20; import {CCTCMTATBasePolicyEngine} from "./CCTCMTATBasePolicyEngine.sol"; import {PolicyValidationModuleERC1404, IERC1404, IERC1404Extend} from "./PolicyValidationModuleERC1404.sol"; import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; -import {PolicyProtected} from "../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; +import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import {ERC20EnforcementModule, ERC20EnforcementModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; @@ -78,8 +78,8 @@ abstract contract CCTCMTATBaseERC1404 is return PolicyValidationModuleERC1404._detectTransferRestriction(from, to, value); } - // Note: CCTCMTATBasePolicyEngine implements PolicyProtected - function supportsInterface(bytes4 interfaceId) public view virtual override(CCTCMTATBasePolicyEngine, PolicyProtected) returns (bool) { + // Note: CCTCMTATBasePolicyEngine implements PolicyProtectedUpgradeable + function supportsInterface(bytes4 interfaceId) public view virtual override(CCTCMTATBasePolicyEngine, PolicyProtectedUpgradeable) returns (bool) { return CCTCMTATBasePolicyEngine.supportsInterface(interfaceId); } } \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index 93ef6db..05f789d 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -3,10 +3,10 @@ pragma solidity ^0.8.20; import {CMTATBaseCommon, CMTATBaseAccessControl} from "../../../submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol"; -import {PolicyProtected} from "../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; +import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {IPolicyEngine} from "../../../submodules/chainlink-ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; +import {IPolicyEngine} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; @@ -159,7 +159,7 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation } - function supportsInterface(bytes4 interfaceId) public view virtual override(CMTATBaseAccessControl, PolicyProtected) returns (bool) { - return CMTATBaseAccessControl.supportsInterface(interfaceId) || PolicyProtected.supportsInterface(interfaceId); + function supportsInterface(bytes4 interfaceId) public view virtual override(CMTATBaseAccessControl, PolicyProtectedUpgradeable) returns (bool) { + return CMTATBaseAccessControl.supportsInterface(interfaceId) || PolicyProtectedUpgradeable.supportsInterface(interfaceId); } } \ No newline at end of file diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index da1e7a0..0d76258 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -3,11 +3,11 @@ pragma solidity ^0.8.20; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; -import {PolicyProtected} from "../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; -import {IPolicyEngine} from "../../../submodules/chainlink-ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; +import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; +import {IPolicyEngine} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; -abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtected { +abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedUpgradeable { /*////////////////////////////////////////////////////////////// diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index 7099fed..200cfd6 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -27,11 +27,13 @@ import {IBurnMintERC20} from "../../../submodules/CMTAT/contracts/interfaces/tec import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; /* ==== Chainlink ACE === */ -import {PolicyProtected} from "../../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyProtected.sol"; +import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; + + abstract contract CCTCommon is ERC20CrossChainModule, - PolicyProtected, - CMTATBaseCommon, + PolicyProtectedUpgradeable, + CMTATBaseCommon, CCIPModule { function initialize( @@ -164,11 +166,11 @@ abstract contract CCTCommon is function supportsInterface(bytes4 _interfaceId) public view virtual override( IERC165, ERC20CrossChainModule, - PolicyProtected + PolicyProtectedUpgradeable ) returns (bool) { return ERC20CrossChainModule.supportsInterface(_interfaceId) || - PolicyProtected.supportsInterface(_interfaceId); + PolicyProtectedUpgradeable.supportsInterface(_interfaceId); } /* ==== Mint and Burn Operations ==== */ diff --git a/contracts/test/PolicyEngineImport.sol b/contracts/test/PolicyEngineImport.sol index 3aa4da8..55449fd 100644 --- a/contracts/test/PolicyEngineImport.sol +++ b/contracts/test/PolicyEngineImport.sol @@ -2,4 +2,4 @@ pragma solidity 0.8.26; // Import PolicyEngine to make it available for Hardhat compilation and testing -import {PolicyEngine} from "../../submodules/chainlink-ace/packages/policy-management/src/core/PolicyEngine.sol"; +import {PolicyEngine} from "@chainlink/ace/packages/policy-management/src/core/PolicyEngine.sol"; From bc80e99d98945d0e0b7e64907df561367c2862a4 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Fri, 6 Mar 2026 11:40:29 +0000 Subject: [PATCH 12/57] CM-1350 Change inheritance of Ownable contract, fix deployment scripts --- .../ComplianceTokenCMTATLiteUpgradeable.sol | 33 +++++ .../ComplianceTokenCMTATStandalone.sol | 6 +- .../ComplianceTokenCMTATUpgradeable.sol | 2 +- .../PolicyProtectedUpgradeable.sol | 130 ++++++++++++++++++ .../modules/lite/CCTCMTATBaseERC1404.sol | 9 +- .../modules/lite/CCTCMTATBasePolicyEngine.sol | 7 +- .../lite/PolicyValidationModuleERC1404.sol | 4 +- .../lite/ValidationModulePolicyEngine.sol | 2 +- contracts/modules/standard/CCTBaseERC2771.sol | 1 - contracts/modules/standard/CCTCommon.sol | 15 +- scripts/deploy-lite.js | 38 +++-- scripts/deploy-standard.js | 35 +++-- 12 files changed, 250 insertions(+), 32 deletions(-) create mode 100644 contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol create mode 100644 contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol diff --git a/contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol new file mode 100644 index 0000000..4b7ee01 --- /dev/null +++ b/contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol @@ -0,0 +1,33 @@ +//SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; +import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; +import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; + +/** + * @title ComplianceTokenCMTATLite + * @author Chainlink + * @notice Standalone Compliance Token contract with Chainlink ACE policy validation on CMTA transfers + */ +contract ComplianceTokenCMTATLiteUpgradeable is CCTCMTATBaseERC2771 { + /** + * @notice Contract version for standalone deployment + * @param forwarderIrrevocable address of the forwarder, required for the gasless support + * @param admin address of the admin of contract (Access Control) + * @param ERC20Attributes_ ERC20 name, symbol and decimals + * @param extraInformationAttributes_ tokenId, terms, information + * @param snapshotEngine_ address of the snapshot engine + * @param documentEngine_ address of the document engine + * @param policyEngine_ address of the policy engine + */ + /// @custom:oz-upgrades-unsafe-allow constructor + constructor( + address forwarderIrrevocable, + address admin, + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, + address policyEngine_ + ) ERC2771Module(forwarderIrrevocable) {} +} \ No newline at end of file diff --git a/contracts/deployment/ComplianceTokenCMTATStandalone.sol b/contracts/deployment/ComplianceTokenCMTATStandalone.sol index 00d2584..e966bbb 100644 --- a/contracts/deployment/ComplianceTokenCMTATStandalone.sol +++ b/contracts/deployment/ComplianceTokenCMTATStandalone.sol @@ -24,13 +24,15 @@ contract ComplianceTokenCMTATStandalone is CCTBaseERC2771 { */ /// @custom:oz-upgrades-unsafe-allow constructor constructor( - address forwarderIrrevocable, + address forwarderIrrevocable_, + address admin_, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, address policyEngine_ - ) ERC2771Module(forwarderIrrevocable) { + ) ERC2771Module(forwarderIrrevocable_) { // Initialize the contract to avoid front-running initialize( + admin_, ERC20Attributes_, extraInformationAttributes_, policyEngine_ diff --git a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol index 5cdf6d3..27d5200 100644 --- a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol +++ b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol @@ -7,7 +7,7 @@ import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/op /** - * @title ComplianceTokenCMTATStandalone + * @title ComplianceTokenCMTATUpgradeable * @author Chainlink * @notice Standalone ComplianceToken contract with Chainlink ACE policy validation on all public functions */ diff --git a/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol b/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol new file mode 100644 index 0000000..a432720 --- /dev/null +++ b/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol @@ -0,0 +1,130 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.20; + +import {IPolicyEngine} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; +import {IPolicyProtected} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyProtected.sol"; +import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import {ERC165Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; + +/** + * @title PolicyProtectedUpgradeable.sol + * @dev Modified implementation for attaching a policy engine to an upgradeable smart contract. Uses ERC-7201 storage + * to not conflict with other storage slots of extending contracts. Provides modifiers to be attached to methods + * of the extending contract to run the policy engine before executing the method. Access control for attaching and detaching the policy engine + * is implemented in the extending contract. + */ +abstract contract PolicyProtectedUpgradeable is Initializable, ERC165Upgradeable, IPolicyProtected { + /// @custom:storage-location erc7201:chainlink.ace.PolicyProtected + struct PolicyProtectedStorage { + IPolicyEngine policyEngine; + mapping(address sender => bytes context) senderContext; // use transient storage eventually + } + + // keccak256(abi.encode(uint256(keccak256("chainlink.ace.PolicyProtected")) - 1)) & + // ~bytes32(uint256(0xff)) + // solhint-disable-next-line const-name-snakecase + bytes32 private constant policyProtectedStorageLocation = + 0x5970a53874f73819f13c80052b0c1b19d6ce68b29b2ad28a7413019c8a409000; + + function _policyProtectedStorage() private pure returns (PolicyProtectedStorage storage $) { + // solhint-disable-next-line no-inline-assembly + assembly { + $.slot := policyProtectedStorageLocation + } + } + + function __PolicyProtected_init(address policyEngine) internal onlyInitializing { + __ERC165_init(); + __PolicyProtected_init_unchained(policyEngine); + } + + function __PolicyProtected_init_unchained(address policyEngine) internal onlyInitializing { + _attachPolicyEngine(policyEngine); + } + /** + * @dev Modifier to run the policy engine on the current method. + * @notice After the function execution completes, any context that was set will be automatically cleared. + */ + + modifier runPolicy() { + if (address(_policyProtectedStorage().policyEngine) == address(0)) { + revert IPolicyEngine.PolicyEngineUndefined(); + } + bytes memory context = getContext(); + _policyProtectedStorage().policyEngine.run( + IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + ); + _; + if (context.length > 0) { + clearContext(); + } + } + + /** + * @dev Modifier to run the policy engine on the current method with the provided context. + * @param context Additional information or authorization to perform the operation. + */ + modifier runPolicyWithContext(bytes calldata context) { + if (address(_policyProtectedStorage().policyEngine) == address(0)) { + revert IPolicyEngine.PolicyEngineUndefined(); + } + _policyProtectedStorage().policyEngine.run( + IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + ); + _; + } + + /// @inheritdoc IPolicyProtected + function attachPolicyEngine(address policyEngine) external virtual override { + _attachPolicyEngine(policyEngine); + } + + function _attachPolicyEngine(address policyEngine) internal { + require(policyEngine != address(0), "Policy engine is zero address"); + if (address(_policyProtectedStorage().policyEngine) != address(0)) { + try _policyProtectedStorage().policyEngine.detach() { + // Detachment succeeded + } catch (bytes memory reason) { + emit PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine), reason); + } + } + _policyProtectedStorage().policyEngine = IPolicyEngine(policyEngine); + IPolicyEngine(policyEngine).attach(); + emit PolicyEngineAttached(policyEngine); + } + + /// @inheritdoc IPolicyProtected + function getPolicyEngine() public view virtual override returns (address) { + return address(_policyProtectedStorage().policyEngine); + } + + /// @inheritdoc IPolicyProtected + function setContext(bytes calldata context) public override { + _policyProtectedStorage().senderContext[msg.sender] = context; + } + + /// @inheritdoc IPolicyProtected + function getContext() public view override returns (bytes memory) { + return _policyProtectedStorage().senderContext[msg.sender]; + } + + /// @inheritdoc IPolicyProtected + function clearContext() public override { + delete _policyProtectedStorage().senderContext[msg.sender]; + } + + /** + * @dev See {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(ERC165Upgradeable, IERC165) + returns (bool) + { + return interfaceId == type(IPolicyProtected).interfaceId || super.supportsInterface(interfaceId); + } +} diff --git a/contracts/modules/lite/CCTCMTATBaseERC1404.sol b/contracts/modules/lite/CCTCMTATBaseERC1404.sol index 31ce68b..f1eb906 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC1404.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC1404.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.20; import {CCTCMTATBasePolicyEngine} from "./CCTCMTATBasePolicyEngine.sol"; import {PolicyValidationModuleERC1404, IERC1404, IERC1404Extend} from "./PolicyValidationModuleERC1404.sol"; import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; -import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; +import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import {ERC20EnforcementModule, ERC20EnforcementModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; @@ -44,7 +44,7 @@ abstract contract CCTCMTATBaseERC1404 is address from, address to, uint256 value - ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModulePolicyEngine) view returns (bool) { + ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModuleCore) view returns (bool) { return CCTCMTATBasePolicyEngine.canTransfer(from, to, value); } @@ -56,7 +56,7 @@ abstract contract CCTCMTATBaseERC1404 is address from, address to, uint256 value - ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModulePolicyEngine) view returns (bool) { + ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModuleCore) view returns (bool) { return CCTCMTATBasePolicyEngine.canTransferFrom(spender, from, to, value); } @@ -78,8 +78,7 @@ abstract contract CCTCMTATBaseERC1404 is return PolicyValidationModuleERC1404._detectTransferRestriction(from, to, value); } - // Note: CCTCMTATBasePolicyEngine implements PolicyProtectedUpgradeable - function supportsInterface(bytes4 interfaceId) public view virtual override(CCTCMTATBasePolicyEngine, PolicyProtectedUpgradeable) returns (bool) { + function supportsInterface(bytes4 interfaceId) public view virtual override(CCTCMTATBasePolicyEngine) returns (bool) { return CCTCMTATBasePolicyEngine.supportsInterface(interfaceId); } } \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index 05f789d..e2cef08 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.20; import {CMTATBaseCommon, CMTATBaseAccessControl} from "../../../submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol"; -import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedUpgradeable} from "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol"; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {IPolicyEngine} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; @@ -143,6 +143,10 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation } } + function attachPolicyEngine(address policyEngine) external virtual override onlyRole(DEFAULT_ADMIN_ROLE) { + _attachPolicyEngine(policyEngine); + } + /*////////////////////////////////////////////////////////////// INTERNAL/PRIVATE FUNCTIONS //////////////////////////////////////////////////////////////*/ @@ -158,7 +162,6 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation require(ValidationModulePolicyEngine._transferred(spender, from, to, value), ERC7943CannotTransfer(from, to, value)); } - function supportsInterface(bytes4 interfaceId) public view virtual override(CMTATBaseAccessControl, PolicyProtectedUpgradeable) returns (bool) { return CMTATBaseAccessControl.supportsInterface(interfaceId) || PolicyProtectedUpgradeable.supportsInterface(interfaceId); } diff --git a/contracts/modules/lite/PolicyValidationModuleERC1404.sol b/contracts/modules/lite/PolicyValidationModuleERC1404.sol index 227347e..4c37ce6 100644 --- a/contracts/modules/lite/PolicyValidationModuleERC1404.sol +++ b/contracts/modules/lite/PolicyValidationModuleERC1404.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.20; /* ==== Tokenization === */ import {IERC1404, IERC1404Extend} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol"; -import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; +import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; /** * @dev Validation module (ERC-1404) @@ -13,7 +13,7 @@ import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; * Useful to restrict and validate transfers */ abstract contract PolicyValidationModuleERC1404 is - ValidationModulePolicyEngine, IERC1404Extend + ValidationModuleCore, IERC1404Extend { /* ============ State Variables ============ */ string constant TEXT_TRANSFER_OK = "NoRestriction"; diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index 0d76258..127ded9 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.20; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; -import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedUpgradeable} from "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol"; import {IPolicyEngine} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; diff --git a/contracts/modules/standard/CCTBaseERC2771.sol b/contracts/modules/standard/CCTBaseERC2771.sol index 10ffee6..44a7330 100644 --- a/contracts/modules/standard/CCTBaseERC2771.sol +++ b/contracts/modules/standard/CCTBaseERC2771.sol @@ -9,7 +9,6 @@ import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/Cont import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol"; -import "hardhat/console.sol"; abstract contract CCTBaseERC2771 is CCTCommon, ERC2771Module { diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index 200cfd6..fdf7b55 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -5,6 +5,7 @@ pragma solidity ^0.8.20; /* ==== OpenZeppelin === */ import { IERC165 } from "@openzeppelin/contracts/interfaces/IERC165.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /* ==== CMTAT === */ import {CMTATBaseCommon} from "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol"; @@ -27,21 +28,24 @@ import {IBurnMintERC20} from "../../../submodules/CMTAT/contracts/interfaces/tec import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; /* ==== Chainlink ACE === */ -import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedUpgradeable} from "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol"; abstract contract CCTCommon is + OwnableUpgradeable, ERC20CrossChainModule, PolicyProtectedUpgradeable, CMTATBaseCommon, CCIPModule { function initialize( + address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, address policyEngine ) public virtual initializer { _initialize( + admin, ERC20Attributes_, extraInformationAttributes_, policyEngine @@ -49,11 +53,13 @@ abstract contract CCTCommon is } function _initialize( + address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, address policyEngine ) internal virtual onlyInitializing { __CMTAT_init( + admin, ERC20Attributes_, extraInformationAttributes_, policyEngine @@ -65,10 +71,12 @@ abstract contract CCTCommon is * @dev calls the different initialize functions from the different modules */ function __CMTAT_init( + address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationAttributes_, address policyEngine ) internal virtual onlyInitializing { + __Ownable_init_unchained(admin); /* OpenZeppelin library */ // OZ init_unchained functions are called firstly due to inheritance __Context_init_unchained(); @@ -132,6 +140,11 @@ abstract contract CCTCommon is return CMTATBaseCommon.transferFrom(from, to, value); } + // Add onlyOwner modifier + function attachPolicyEngine(address policyEngine) external virtual override onlyOwner { + _attachPolicyEngine(policyEngine); + } + /* ============ View functions ============ */ /** diff --git a/scripts/deploy-lite.js b/scripts/deploy-lite.js index 8cd2df0..d363279 100644 --- a/scripts/deploy-lite.js +++ b/scripts/deploy-lite.js @@ -5,18 +5,37 @@ const { ethers } = require("hardhat"); const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); +async function deployPolicyEngine(deployer) { + const factory = await ethers.getContractFactory('PolicyEngine', deployer); + const contract = await factory.deploy(); + await contract.waitForDeployment(); + return contract; +} + async function main() { + const network = await ethers.provider.getNetwork(); + const isHardhatNetwork = network.chainId === 31337n; + + let deployer; + if (isHardhatNetwork) { + const signers = await ethers.getSigners(); + deployer = signers[0]; + console.log("Hardhat network detected, using account:", deployer.address); + } else { + // On live networks, the deployer comes from the hardhat config (e.g. private key / mnemonic) + const signers = await ethers.getSigners(); + deployer = signers[0]; + console.log("Deploying to network:", network.name, "with account:", deployer.address); + } + // To change // Replace these with actual deployed contract addresses or deploy mocks before this const forwarderIrrevocable = ZeroAddress; - const admin = "0x1000000000000000000000000000000000000001"; - const policyEngine = ZeroAddress; - const snapshotEngine = ZeroAddress; - const documentEngine = ZeroAddress; + const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; const ERC20Attributes = { name: "Security Token", symbol: "ST", - decimalsIrrevocable: 0 // Compliant with CMTAT spec but can be different + decimalsIrrevocable: 8 // Compliant with CMTAT spec but can be different }; const terms = { name: "Token Terms v1", @@ -29,16 +48,17 @@ async function main() { information: "CMTAT smart contract" }; + const policyEngineContract = await deployPolicyEngine(deployer); + const policyEngineAddress = await policyEngineContract.getAddress(); + // Get contract factory and deploy - const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTATLiteStandalone"); + const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTATLiteStandalone", deployer); const cmtat = await CMTATStandalone.deploy( forwarderIrrevocable, admin, ERC20Attributes, extraInformationAttributes, - policyEngine, - snapshotEngine, - documentEngine + policyEngineAddress ); await cmtat.waitForDeployment(); diff --git a/scripts/deploy-standard.js b/scripts/deploy-standard.js index 932fe94..21ba026 100644 --- a/scripts/deploy-standard.js +++ b/scripts/deploy-standard.js @@ -4,15 +4,32 @@ const { ethers } = require("hardhat"); const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); +async function deployPolicyEngine(deployer) { + const factory = await ethers.getContractFactory('PolicyEngine', deployer); + const contract = await factory.deploy(); + await contract.waitForDeployment(); + return contract; +} async function main() { + const network = await ethers.provider.getNetwork(); + const isHardhatNetwork = network.chainId === 31337n; + + let deployer; + if (isHardhatNetwork) { + const signers = await ethers.getSigners(); + deployer = signers[0]; + console.log("Hardhat network detected, using account:", deployer.address); + } else { + const signers = await ethers.getSigners(); + deployer = signers[0]; + console.log("Deploying to network:", network.name, "with account:", deployer.address); + } + // To change // Replace these with actual deployed contract addresses or deploy mocks before this const forwarderIrrevocable = ZeroAddress; - const admin = "0x1000000000000000000000000000000000000001"; - const policyEngine = ZeroAddress; - const snapshotEngine = ZeroAddress; - const documentEngine = ZeroAddress; + const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; const ERC20Attributes = { name: "Security Token", symbol: "ST", @@ -29,16 +46,18 @@ async function main() { information: "CMTAT smart contract" }; + const policyEngineContract = await deployPolicyEngine(deployer); + const policyEngineAddress = await policyEngineContract.getAddress(); + console.log("Policy Engine deployed to:", policyEngineAddress); + // Get contract factory and deploy - const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTAT"); + const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTATStandalone", deployer); const cmtat = await CMTATStandalone.deploy( forwarderIrrevocable, admin, ERC20Attributes, extraInformationAttributes, - policyEngine, - snapshotEngine, - documentEngine + policyEngineAddress, ); await cmtat.waitForDeployment(); From 3618ef0d75873c2608840c83bce7cb57a46710c7 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Mon, 9 Mar 2026 02:58:49 +0000 Subject: [PATCH 13/57] Create compilable implementations for standard, lite and upgradeable contracts, add tests using CMTAT common modules pattern --- README.md | 82 ++++++- ...omplianceTokenCMTATLiteUUPSUpgradeable.sol | 34 +++ .../ComplianceTokenCMTATUUPSUpgradeable.sol | 32 +++ .../ComplianceTokenCMTATUpgradeable.sol | 4 +- .../lite/ValidationModulePolicyEngine.sol | 2 +- contracts/test/PolicyEngineImport.sol | 3 + hardhat.config.js | 8 +- test/common/ace/CombinedPolicyCommon.js | 64 +++++ test/common/ace/DeploymentCommon.js | 46 ++++ test/common/ace/PausePolicyCommon.js | 66 ++++++ test/common/ace/PolicyEngineCommon.js | 51 ++++ test/common/ace/RBACPolicyCommon.js | 102 ++++++++ .../liteStandaloneDeployment.test.js | 39 +++ .../liteUUPSUpgradeableDeployment.test.js | 106 +++++++++ .../liteUpgradeableDeployment.test.js | 55 +++++ test/deployment/standaloneDeployment.test.js | 67 ++++++ test/deployment/upgradeableDeployment.test.js | 83 +++++++ .../uupsUpgradeableDeployment.test.js | 127 ++++++++++ test/deploymentUtils.js | 223 ++++++++++++++++++ test/standardDeployment.test.js | 22 -- test/standardDeploymentUpgradeable.test.js | 34 --- test/testUtils.js | 206 ++++++++++------ 22 files changed, 1326 insertions(+), 130 deletions(-) create mode 100644 contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol create mode 100644 contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol create mode 100644 test/common/ace/CombinedPolicyCommon.js create mode 100644 test/common/ace/DeploymentCommon.js create mode 100644 test/common/ace/PausePolicyCommon.js create mode 100644 test/common/ace/PolicyEngineCommon.js create mode 100644 test/common/ace/RBACPolicyCommon.js create mode 100644 test/deployment/liteStandaloneDeployment.test.js create mode 100644 test/deployment/liteUUPSUpgradeableDeployment.test.js create mode 100644 test/deployment/liteUpgradeableDeployment.test.js create mode 100644 test/deployment/standaloneDeployment.test.js create mode 100644 test/deployment/upgradeableDeployment.test.js create mode 100644 test/deployment/uupsUpgradeableDeployment.test.js create mode 100644 test/deploymentUtils.js delete mode 100644 test/standardDeployment.test.js delete mode 100644 test/standardDeploymentUpgradeable.test.js diff --git a/README.md b/README.md index 45b61c9..ea9fbae 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,89 @@ # CMTAT ACE integration project -## Deployment versions* -Two versions are available; *lite* version which substitutes RuleEngine with Chainlink ACE PolicyEngine, and *standard* version, which uses PolicyEngine to protect all external functions instead of OpenZepplin role-based AccessControl. +## Deployment versions +Two versions are available; *lite* version which substitutes RuleEngine with Chainlink ACE PolicyEngine, and *standard* version, which uses PolicyEngine to protect all external functions instead of OpenZeppelin role-based AccessControl. + +### Standard + +Replaces CMTAT's `AccessControlUpgradeable` (role-based) with `OwnableUpgradeable` (single owner) and integrates Chainlink ACE `PolicyProtectedUpgradeable` for all access control and compliance validation. + +| Contract | Proxy type | +|----------|------------| +| `ComplianceTokenCMTATStandalone` | None | +| `ComplianceTokenCMTATUpgradeable` | Transparent | +| `ComplianceTokenCMTATUUPSUpgradeable` | UUPS (`onlyOwner`) | + +### Lite + +Keeps CMTAT's `AccessControlUpgradeable` (role-based) for module authorization and adds Chainlink ACE PolicyEngine for transfer validation only, replacing CMTAT's RuleEngine. + +| Contract | Proxy type | +|----------|------------| +| `ComplianceTokenCMTATLiteStandalone` | None | +| `ComplianceTokenCMTATLiteUpgradeable` | Transparent | +| `ComplianceTokenCMTATLiteUUPSUpgradeable` | UUPS (`onlyRole(PROXY_UPGRADE_ROLE)`) | + +## Changes from CMTAT + +### Access Control + +| Aspect | CMTAT | Standard | Lite | +|--------|-------|----------|------| +| Base model | `AccessControlUpgradeable` with 9+ roles | `OwnableUpgradeable` (single owner) | `AccessControlUpgradeable` (unchanged) | +| Authorization | `onlyRole(MINTER_ROLE)`, etc. | `runPolicy` modifier via PolicyEngine | `onlyRole()` for modules, PolicyEngine for transfers | +| Role management | `grantRole()` / `revokeRole()` | Managed externally via `RoleBasedAccessControlPolicy` | CMTAT roles preserved | + +### Validation & Compliance + +| Aspect | CMTAT | Standard | Lite | +|--------|-------|----------|------| +| Validation layer | `CMTATBaseRuleEngine` → `ValidationModuleRuleEngine` | `PolicyProtectedUpgradeable` → `IPolicyEngine` | `ValidationModulePolicyEngine` → `IPolicyEngine` | +| Engine type | RuleEngine (custom interface) | Chainlink ACE PolicyEngine | Chainlink ACE PolicyEngine | +| Transfer check | `_canTransferGenericByModuleAndRevert()` + RuleEngine | PolicyEngine `run()` via `runPolicy` modifier | `_canTransferGenericByModuleAndRevert()` + PolicyEngine `run()` | +| ERC-1404 support | Via `ValidationModuleERC1404` | Not applicable (no module-level checks) | Via `PolicyValidationModuleERC1404` | + +### Initialization + +The `Engine` struct parameter is replaced with a direct `address policyEngine_`: + +```solidity +// CMTAT +constructor(..., ICMTATConstructor.Engine memory engines_) + +// ComplianceTokenCMTAT (Standard & Lite) +constructor(..., address policyEngine_) +``` + +### Modules + +All CMTAT functional modules are preserved in both variants: + +- ERC20MintModule, ERC20BurnModule +- ERC20EnforcementModule (freeze/enforcement) +- PauseModule (Standard: via PausePolicy; Lite: native) +- SnapshotEngineModule, DocumentEngineModule +- ExtraInformationModule +- ERC20CrossChainModule, CCIPModule +- ERC2771Module (gasless transactions) + +### Removed from Standard + +- `CMTATBaseAccessControl` — replaced by `OwnableUpgradeable` +- `AccessControlModule` — role management removed from contract +- `CMTATBaseRuleEngine` — replaced by `PolicyProtectedUpgradeable` +- `ValidationModuleRuleEngine` — replaced by direct PolicyEngine calls +- All `onlyRole()` authorization functions — replaced by `runPolicy` modifier + +### Added + +- `PolicyProtectedUpgradeable` — Chainlink ACE integration with ERC-7201 storage, `runPolicy` modifier, and policy engine lifecycle management +- `ValidationModulePolicyEngine` (Lite) — hybrid validation combining CMTAT module checks with PolicyEngine +- `PolicyValidationModuleERC1404` (Lite) — ERC-1404 transfer restriction codes with PolicyEngine awareness ## Library - CMTAT [v3.2.0-rc0](https://github.com/CMTA/CMTAT/releases/tag/v3.2.0-rc0) +- Chainlink ACE ^1.0.0 ## Initialize submodules ```shell diff --git a/contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol new file mode 100644 index 0000000..f2650d2 --- /dev/null +++ b/contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol @@ -0,0 +1,34 @@ +//SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; +import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; +import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; + + +/** + * @title ComplianceTokenCMTATLiteUUPSUpgradeable + * @author Chainlink + * @notice UUPS upgradeable Lite ComplianceToken contract with Chainlink ACE policy validation on CMTA transfers + */ +contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC2771, UUPSUpgradeable { + bytes32 public constant PROXY_UPGRADE_ROLE = keccak256("PROXY_UPGRADE_ROLE"); + + /** + * @notice Contract version for UUPS proxy deployment + * @param forwarderIrrevocable address of the forwarder, required for the gasless support + */ + /// @custom:oz-upgrades-unsafe-allow constructor + constructor( + address forwarderIrrevocable + ) ERC2771Module(forwarderIrrevocable) { + // Disable the possibility to initialize the implementation + _disableInitializers(); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyRole(PROXY_UPGRADE_ROLE) {} +} diff --git a/contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol new file mode 100644 index 0000000..ca44049 --- /dev/null +++ b/contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol @@ -0,0 +1,32 @@ +//SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; +import {CCTBaseERC2771} from "../modules/standard/CCTBaseERC2771.sol"; +import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; + + +/** + * @title ComplianceTokenCMTATUUPSUpgradeable + * @author Chainlink + * @notice UUPS upgradeable ComplianceToken contract with Chainlink ACE policy validation on all public functions + */ +contract ComplianceTokenCMTATUUPSUpgradeable is CCTBaseERC2771, UUPSUpgradeable { + /** + * @notice Contract version for UUPS proxy deployment + * @param forwarderIrrevocable address of the forwarder, required for the gasless support + */ + /// @custom:oz-upgrades-unsafe-allow constructor + constructor( + address forwarderIrrevocable + ) ERC2771Module(forwarderIrrevocable) { + // Disable the possibility to initialize the implementation + _disableInitializers(); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyOwner {} +} diff --git a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol index 27d5200..db88206 100644 --- a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol +++ b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol @@ -9,11 +9,11 @@ import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/op /** * @title ComplianceTokenCMTATUpgradeable * @author Chainlink - * @notice Standalone ComplianceToken contract with Chainlink ACE policy validation on all public functions + * @notice Upgradeable ComplianceToken contract with Chainlink ACE policy validation on all public functions */ contract ComplianceTokenCMTATUpgradeable is CCTBaseERC2771 { /** - * @notice Contract version for standalone deployment + * @notice Contract version for upgradeable deployment * @param forwarderIrrevocable address of the forwarder, required for the gasless support */ /// @custom:oz-upgrades-unsafe-allow constructor diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index 127ded9..ddcb8b6 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -109,7 +109,7 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr /* ============ State functions ============ */ function _transferred(address spender, address from, address to, uint256 /* value */) internal virtual returns (bool) { - if(!_canTransferGenericByModule(spender, from, to)) { + if(!_canTransferGenericByModuleAndRevert(spender, from, to)) { return false; } else { IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine()); diff --git a/contracts/test/PolicyEngineImport.sol b/contracts/test/PolicyEngineImport.sol index 55449fd..bce4f48 100644 --- a/contracts/test/PolicyEngineImport.sol +++ b/contracts/test/PolicyEngineImport.sol @@ -3,3 +3,6 @@ pragma solidity 0.8.26; // Import PolicyEngine to make it available for Hardhat compilation and testing import {PolicyEngine} from "@chainlink/ace/packages/policy-management/src/core/PolicyEngine.sol"; +// Use local modified copies with Hardhat-compatible import paths +import {PausePolicy} from "../modules/chainlink-ace-modified/PausePolicy.sol"; +import {RoleBasedAccessControlPolicy} from "../modules/chainlink-ace-modified/RoleBasedAccessControlPolicy.sol"; diff --git a/hardhat.config.js b/hardhat.config.js index 01f68f0..55f5188 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,5 +1,9 @@ +require('@nomicfoundation/hardhat-chai-matchers') require('@openzeppelin/hardhat-upgrades') +const { silenceWarnings } = require('@openzeppelin/upgrades-core') +silenceWarnings() + /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { solidity: { @@ -9,7 +13,7 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 200 + runs: 50 }, evmVersion: 'prague' } @@ -19,7 +23,7 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 200 + runs: 50 }, evmVersion: 'cancun' } diff --git a/test/common/ace/CombinedPolicyCommon.js b/test/common/ace/CombinedPolicyCommon.js new file mode 100644 index 0000000..7d38203 --- /dev/null +++ b/test/common/ace/CombinedPolicyCommon.js @@ -0,0 +1,64 @@ +const { expect } = require('chai') + +/** + * Tests combined PausePolicy + RBAC behavior. + * + * Required `this` context: + * this.cmtat – compliance token instance + * this.admin – owner / authorized signer + * this.address1 – test address + * this.address2 – test address + * this.policyEngine – PolicyEngine instance + * this.pausePolicy – PausePolicy instance + */ +function CombinedPolicyCommon () { + context('Combined PausePolicy + RBAC', function () { + it('testRejectMintWhenPausedEvenWithCorrectRole', async function () { + await this.pausePolicy.connect(this.admin).setPausedState(true) + await expect( + this.cmtat.connect(this.admin).mint(this.address1, 100n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testRejectMintWhenUnpausedWithoutCorrectRole', async function () { + await expect( + this.cmtat.connect(this.address1).mint(this.address2, 100n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowMintWhenUnpausedWithCorrectRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + + it('testPolicyOrderPauseCheckedBeforeRBAC', async function () { + await this.pausePolicy.connect(this.admin).setPausedState(true) + await expect( + this.cmtat.connect(this.admin).mint(this.address1, 100n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + await this.pausePolicy.connect(this.admin).setPausedState(false) + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + + it('testFullMintTransferBurnLifecycle', async function () { + const MINT_AMOUNT = 200n + const TRANSFER_AMOUNT = 50n + const BURN_AMOUNT = 100n + + await this.cmtat.connect(this.admin).mint(this.address1, MINT_AMOUNT) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(MINT_AMOUNT) + expect(await this.cmtat.totalSupply()).to.equal(MINT_AMOUNT) + + await this.cmtat.connect(this.address1).transfer(this.address2, TRANSFER_AMOUNT) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(MINT_AMOUNT - TRANSFER_AMOUNT) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(TRANSFER_AMOUNT) + + await this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, BURN_AMOUNT) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(MINT_AMOUNT - TRANSFER_AMOUNT - BURN_AMOUNT) + expect(await this.cmtat.totalSupply()).to.equal(MINT_AMOUNT - BURN_AMOUNT) + }) + }) +} + +module.exports = CombinedPolicyCommon diff --git a/test/common/ace/DeploymentCommon.js b/test/common/ace/DeploymentCommon.js new file mode 100644 index 0000000..33b0c10 --- /dev/null +++ b/test/common/ace/DeploymentCommon.js @@ -0,0 +1,46 @@ +const { expect } = require('chai') +const { DEPLOYMENT_DECIMAL } = require('../../deploymentUtils') + +/** + * Basic deployment tests for standard (PolicyEngine-based) contracts. + * + * Required `this` context: + * this.cmtat – compliance token instance + * this.admin – owner signer + * this.address1 – test address + * this.policyEngineAddress – PolicyEngine address + */ +function DeploymentCommon () { + context('Deployment', function () { + it('testHasCorrectName', async function () { + expect(await this.cmtat.name()).to.equal('CMTA Token') + }) + + it('testHasCorrectSymbol', async function () { + expect(await this.cmtat.symbol()).to.equal('CMTAT') + }) + + it('testHasCorrectDecimals', async function () { + expect(await this.cmtat.decimals()).to.equal(DEPLOYMENT_DECIMAL) + }) + + it('testHasPolicyEngineAttached', async function () { + expect(await this.cmtat.getPolicyEngine()).to.equal(this.policyEngineAddress) + }) + + it('testHasCorrectOwner', async function () { + expect(await this.cmtat.owner()).to.equal(this.admin.address) + }) + + it('testHasZeroTotalSupply', async function () { + expect(await this.cmtat.totalSupply()).to.equal(0n) + }) + + it('testAllowMintWithPolicies', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + }) +} + +module.exports = DeploymentCommon diff --git a/test/common/ace/PausePolicyCommon.js b/test/common/ace/PausePolicyCommon.js new file mode 100644 index 0000000..9c113a6 --- /dev/null +++ b/test/common/ace/PausePolicyCommon.js @@ -0,0 +1,66 @@ +const { expect } = require('chai') + +/** + * Tests PausePolicy behavior on standard (PolicyEngine-based) contracts. + * + * Required `this` context: + * this.cmtat – compliance token instance + * this.admin – owner / authorized signer + * this.address1 – test address + * this.attacker – unauthorized signer + * this.policyEngine – PolicyEngine instance + * this.pausePolicy – PausePolicy instance + */ +function PausePolicyCommon () { + context('PausePolicy', function () { + it('testAllowMintWhenNotPaused', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + + it('testRejectMintWhenPaused', async function () { + await this.pausePolicy.connect(this.admin).setPausedState(true) + await expect( + this.cmtat.connect(this.admin).mint(this.address1, 100n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowMintAfterUnpausing', async function () { + await this.pausePolicy.connect(this.admin).setPausedState(true) + await this.pausePolicy.connect(this.admin).setPausedState(false) + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + + it('testRejectBurnWhenPaused', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.pausePolicy.connect(this.admin).setPausedState(true) + await expect( + this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testEmitPauseStateChanged', async function () { + await expect(this.pausePolicy.connect(this.admin).setPausedState(true)) + .to.emit(this.pausePolicy, 'PauseStateChanged') + .withArgs(true) + await expect(this.pausePolicy.connect(this.admin).setPausedState(false)) + .to.emit(this.pausePolicy, 'PauseStateChanged') + .withArgs(false) + }) + + it('testRejectSettingSamePauseState', async function () { + await expect( + this.pausePolicy.connect(this.admin).setPausedState(false) + ).to.be.reverted + }) + + it('testOnlyOwnerCanChangePauseState', async function () { + await expect( + this.pausePolicy.connect(this.attacker).setPausedState(true) + ).to.be.revertedWithCustomError(this.pausePolicy, 'OwnableUnauthorizedAccount') + }) + }) +} + +module.exports = PausePolicyCommon diff --git a/test/common/ace/PolicyEngineCommon.js b/test/common/ace/PolicyEngineCommon.js new file mode 100644 index 0000000..43e4596 --- /dev/null +++ b/test/common/ace/PolicyEngineCommon.js @@ -0,0 +1,51 @@ +const { expect } = require('chai') +const { deployPolicyEngine } = require('../../deploymentUtils') + +/** + * Tests PolicyEngine management on standard (Ownable-based) contracts. + * + * Required `this` context: + * this.cmtat – compliance token instance + * this.admin – owner signer + * this.attacker – unauthorized signer + * this.policyEngine – PolicyEngine instance + * this.cmtatAddress – deployed token address + * this.mintSelector – bytes4 selector for mint(address,uint256) + * this.pausePolicyAddress – PausePolicy address + * this.rbacPolicyAddress – RBACPolicy address + */ +function PolicyEngineCommon () { + context('PolicyEngine Management', function () { + it('testOwnerCanAttachNewPolicyEngine', async function () { + const newPolicyEngine = await deployPolicyEngine(true, this.admin.address) + const newAddr = await newPolicyEngine.getAddress() + await this.cmtat.connect(this.admin).attachPolicyEngine(newAddr) + expect(await this.cmtat.getPolicyEngine()).to.equal(newAddr) + }) + + it('testNonOwnerCannotAttachPolicyEngine', async function () { + const newPolicyEngine = await deployPolicyEngine(true, this.attacker.address) + const newAddr = await newPolicyEngine.getAddress() + await expect( + this.cmtat.connect(this.attacker).attachPolicyEngine(newAddr) + ).to.be.revertedWithCustomError(this.cmtat, 'OwnableUnauthorizedAccount') + }) + + it('testListPoliciesForSelector', async function () { + const policies = await this.policyEngine.getPolicies(this.cmtatAddress, this.mintSelector) + expect(policies.length).to.equal(2) + expect(policies[0]).to.equal(this.pausePolicyAddress) + expect(policies[1]).to.equal(this.rbacPolicyAddress) + }) + + it('testRemovePolicy', async function () { + await this.policyEngine.connect(this.admin).removePolicy( + this.cmtatAddress, this.mintSelector, this.pausePolicyAddress + ) + const policies = await this.policyEngine.getPolicies(this.cmtatAddress, this.mintSelector) + expect(policies.length).to.equal(1) + }) + }) +} + +module.exports = PolicyEngineCommon diff --git a/test/common/ace/RBACPolicyCommon.js b/test/common/ace/RBACPolicyCommon.js new file mode 100644 index 0000000..2df2f3a --- /dev/null +++ b/test/common/ace/RBACPolicyCommon.js @@ -0,0 +1,102 @@ +const { expect } = require('chai') +const { MINTER_ROLE, BURNER_ROLE } = require('../../deploymentUtils') + +/** + * Tests RoleBasedAccessControlPolicy behavior on standard (PolicyEngine-based) contracts. + * + * Required `this` context: + * this.cmtat – compliance token instance + * this.admin – owner / authorized signer (has MINTER_ROLE + BURNER_ROLE) + * this.address1 – test address + * this.address2 – test address + * this.attacker – unauthorized signer + * this.policyEngine – PolicyEngine instance + * this.rbacPolicy – RoleBasedAccessControlPolicy instance + * this.mintSelector – bytes4 selector for mint(address,uint256) + * this.burnSelector – bytes4 selector for burn(address,uint256) + */ +function RBACPolicyCommon () { + context('RoleBasedAccessControlPolicy', function () { + it('testAllowMintByMinterRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + + it('testRejectMintWithoutMinterRole', async function () { + await expect( + this.cmtat.connect(this.address1).mint(this.address2, 100n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowMintAfterGrantingMinterRole', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) + await this.cmtat.connect(this.address1).mint(this.address2, 50n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) + }) + + it('testRejectMintAfterRevokingMinterRole', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) + await this.rbacPolicy.connect(this.admin).revokeRole(MINTER_ROLE, this.address1) + await expect( + this.cmtat.connect(this.address1).mint(this.admin, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowBurnByBurnerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 50n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) + }) + + it('testRejectBurnWithoutBurnerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await expect( + this.cmtat.connect(this.address1)['burn(address,uint256)'](this.address1, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testMultipleRolesForDifferentOperations', async function () { + // Grant MINTER_ROLE to address1 (but not BURNER_ROLE) + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) + await this.cmtat.connect(this.address1).mint(this.address2, 100n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(100n) + // address1 cannot burn + await expect( + this.cmtat.connect(this.address1)['burn(address,uint256)'](this.address2, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testHasAllowedRole', async function () { + expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.admin)).to.equal(true) + expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.address1)).to.equal(false) + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) + expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.address1)).to.equal(true) + }) + + it('testEmitOperationAllowanceEvents', async function () { + const setNameSelector = this.cmtat.interface.getFunction('setName').selector + const testRole = ethers.keccak256(ethers.toUtf8Bytes('TEST_ROLE')) + await expect(this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(setNameSelector, testRole)) + .to.emit(this.rbacPolicy, 'OperationAllowanceGrantedToRole') + .withArgs(setNameSelector, testRole) + await expect(this.rbacPolicy.connect(this.admin).removeOperationAllowanceFromRole(setNameSelector, testRole)) + .to.emit(this.rbacPolicy, 'OperationAllowanceRemovedFromRole') + .withArgs(setNameSelector, testRole) + }) + + it('testRejectDuplicateOperationAllowanceGrant', async function () { + await expect( + this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) + ).to.be.reverted + }) + + it('testOnlyOwnerCanManageOperationAllowances', async function () { + const testRole = ethers.keccak256(ethers.toUtf8Bytes('TEST_ROLE')) + await expect( + this.rbacPolicy.connect(this.attacker).grantOperationAllowanceToRole(this.mintSelector, testRole) + ).to.be.revertedWithCustomError(this.rbacPolicy, 'OwnableUnauthorizedAccount') + }) + }) +} + +module.exports = RBACPolicyCommon diff --git a/test/deployment/liteStandaloneDeployment.test.js b/test/deployment/liteStandaloneDeployment.test.js new file mode 100644 index 0000000..3907247 --- /dev/null +++ b/test/deployment/liteStandaloneDeployment.test.js @@ -0,0 +1,39 @@ +const { expect } = require('chai') +const { + fixture, + loadFixture, + deployPolicyEngine, + deployCCTLiteStandalone +} = require('../deploymentUtils') + +// Reuse CMTAT common modules +const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon') +const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon') +const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon') +const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') +const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') +const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') + +describe('ComplianceTokenCMTATLiteStandalone', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + const policyEngine = await deployPolicyEngine(true, this.admin.address) + this.cmtat = await deployCCTLiteStandalone( + this._.address, + this.admin.address, + await policyEngine.getAddress() + ) + this.policyEngine = policyEngine + this.erc1404 = true + }) + + // Core CMTAT commons + PauseModuleCommon() + ERC20MintModuleCommon() + ERC20BurnModuleCommon() + ERC20BaseModuleCommon() + EnforcementModuleCommon() + + // Extensions + ERC20EnforcementModuleCommon() +}) diff --git a/test/deployment/liteUUPSUpgradeableDeployment.test.js b/test/deployment/liteUUPSUpgradeableDeployment.test.js new file mode 100644 index 0000000..3421520 --- /dev/null +++ b/test/deployment/liteUUPSUpgradeableDeployment.test.js @@ -0,0 +1,106 @@ +const { ethers, upgrades } = require('hardhat') +const { expect } = require('chai') +const { + fixture, + loadFixture, + deployPolicyEngine, + deployCCTLiteUUPSUpgradeable, + DEFAULT_ADMIN_ROLE +} = require('../deploymentUtils') + +// Reuse CMTAT common modules +const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon') +const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon') +const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon') +const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') +const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') +const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') + +const PROXY_UPGRADE_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PROXY_UPGRADE_ROLE')) + +describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + const policyEngine = await deployPolicyEngine(true, this.admin.address) + this.cmtat = await deployCCTLiteUUPSUpgradeable( + this._.address, + this.admin.address, + await policyEngine.getAddress() + ) + this.policyEngine = policyEngine + this.erc1404 = true + }) + + // UUPS proxy-specific + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + const policyEngineAddress = await this.policyEngine.getAddress() + await expect( + this.cmtat.connect(this.admin).initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], + policyEngineAddress + ) + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') + }) + }) + + context('UUPS Upgrade', function () { + it('testAdminWithRoleCanUpgrade', async function () { + // Grant PROXY_UPGRADE_ROLE to admin + await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address) + + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable', this.admin) + await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + }) + + it('testCannotUpgradeWithoutProxyUpgradeRole', async function () { + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable', this.attacker) + await expect( + upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + ).to.be.revertedWithCustomError(this.cmtat, 'AccessControlUnauthorizedAccount') + }) + + it('testStatePreservedAfterUpgrade', async function () { + // Mint some tokens before upgrade + await this.cmtat.connect(this.admin).mint(this.address1.address, 100n) + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n) + + // Grant upgrade role and upgrade + await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address) + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable', this.admin) + const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + + // Verify state preserved + expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n) + expect(await upgraded.name()).to.equal('CMTA Token') + expect(await upgraded.symbol()).to.equal('CMTAT') + }) + }) + + // Core CMTAT commons + PauseModuleCommon() + ERC20MintModuleCommon() + ERC20BurnModuleCommon() + ERC20BaseModuleCommon() + EnforcementModuleCommon() + + // Extensions + ERC20EnforcementModuleCommon() +}) diff --git a/test/deployment/liteUpgradeableDeployment.test.js b/test/deployment/liteUpgradeableDeployment.test.js new file mode 100644 index 0000000..03bac9e --- /dev/null +++ b/test/deployment/liteUpgradeableDeployment.test.js @@ -0,0 +1,55 @@ +const { ethers, upgrades } = require('hardhat') +const { expect } = require('chai') +const { + fixture, + loadFixture, + deployPolicyEngine, + deployCCTLiteUpgradeable +} = require('../deploymentUtils') + +// Reuse CMTAT common modules +const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon') +const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon') +const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon') +const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') +const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') +const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') + +describe('ComplianceTokenCMTATLiteUpgradeable', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + const policyEngine = await deployPolicyEngine(true, this.admin.address) + this.cmtat = await deployCCTLiteUpgradeable( + this._.address, + this.admin.address, + await policyEngine.getAddress() + ) + this.policyEngine = policyEngine + this.erc1404 = true + }) + + // Proxy-specific + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + const policyEngineAddress = await this.policyEngine.getAddress() + await expect( + this.cmtat.connect(this.admin).initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], + policyEngineAddress + ) + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') + }) + }) + + // Core CMTAT commons + PauseModuleCommon() + ERC20MintModuleCommon() + ERC20BurnModuleCommon() + ERC20BaseModuleCommon() + EnforcementModuleCommon() + + // Extensions + ERC20EnforcementModuleCommon() +}) diff --git a/test/deployment/standaloneDeployment.test.js b/test/deployment/standaloneDeployment.test.js new file mode 100644 index 0000000..2458aa5 --- /dev/null +++ b/test/deployment/standaloneDeployment.test.js @@ -0,0 +1,67 @@ +const { + fixture, + loadFixture, + MINTER_ROLE, + BURNER_ROLE, + deployPolicyEngine, + deployPausePolicy, + deployRBACPolicy, + deployCCTStandalone +} = require('../deploymentUtils') + +// ACE-specific common modules +const DeploymentCommon = require('../common/ace/DeploymentCommon') +const PausePolicyCommon = require('../common/ace/PausePolicyCommon') +const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') +const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') +const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') + +describe('ComplianceTokenCMTATStandalone', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + + // Deploy PolicyEngine (defaultAllow = true) + this.policyEngine = await deployPolicyEngine(true, this.admin.address) + this.policyEngineAddress = await this.policyEngine.getAddress() + + // Deploy PausePolicy + this.pausePolicy = await deployPausePolicy(this.policyEngineAddress, this.admin.address, false) + this.pausePolicyAddress = await this.pausePolicy.getAddress() + + // Deploy RoleBasedAccessControlPolicy + this.rbacPolicy = await deployRBACPolicy(this.policyEngineAddress, this.admin.address) + this.rbacPolicyAddress = await this.rbacPolicy.getAddress() + + // Deploy ComplianceToken + this.cmtat = await deployCCTStandalone( + this._.address, + this.admin.address, + this.policyEngineAddress + ) + this.cmtatAddress = await this.cmtat.getAddress() + + // Get function selectors + this.mintSelector = this.cmtat.interface.getFunction('mint(address,uint256)').selector + this.burnSelector = this.cmtat.interface.getFunction('burn(address,uint256)').selector + + // Add PausePolicy + RBAC to PolicyEngine for mint and burn + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.rbacPolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.rbacPolicyAddress, []) + + // Grant operation allowances on RBAC policy + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.burnSelector, BURNER_ROLE) + + // Grant roles to admin + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.admin.address) + await this.rbacPolicy.connect(this.admin).grantRole(BURNER_ROLE, this.admin.address) + }) + + DeploymentCommon() + PausePolicyCommon() + RBACPolicyCommon() + CombinedPolicyCommon() + PolicyEngineCommon() +}) diff --git a/test/deployment/upgradeableDeployment.test.js b/test/deployment/upgradeableDeployment.test.js new file mode 100644 index 0000000..89d8728 --- /dev/null +++ b/test/deployment/upgradeableDeployment.test.js @@ -0,0 +1,83 @@ +const { ethers } = require('hardhat') +const { expect } = require('chai') +const { + fixture, + loadFixture, + MINTER_ROLE, + BURNER_ROLE, + deployPolicyEngine, + deployPausePolicy, + deployRBACPolicy, + deployCCTUpgradeable +} = require('../deploymentUtils') + +// ACE-specific common modules +const DeploymentCommon = require('../common/ace/DeploymentCommon') +const PausePolicyCommon = require('../common/ace/PausePolicyCommon') +const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') +const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') +const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') + +describe('ComplianceTokenCMTATUpgradeable', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + + // Deploy PolicyEngine (defaultAllow = true) + this.policyEngine = await deployPolicyEngine(true, this.admin.address) + this.policyEngineAddress = await this.policyEngine.getAddress() + + // Deploy PausePolicy + this.pausePolicy = await deployPausePolicy(this.policyEngineAddress, this.admin.address, false) + this.pausePolicyAddress = await this.pausePolicy.getAddress() + + // Deploy RoleBasedAccessControlPolicy + this.rbacPolicy = await deployRBACPolicy(this.policyEngineAddress, this.admin.address) + this.rbacPolicyAddress = await this.rbacPolicy.getAddress() + + // Deploy ComplianceToken (upgradeable proxy) + this.cmtat = await deployCCTUpgradeable( + this._.address, + this.admin.address, + this.policyEngineAddress + ) + this.cmtatAddress = await this.cmtat.getAddress() + + // Get function selectors + this.mintSelector = this.cmtat.interface.getFunction('mint(address,uint256)').selector + this.burnSelector = this.cmtat.interface.getFunction('burn(address,uint256)').selector + + // Add PausePolicy + RBAC to PolicyEngine for mint and burn + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.rbacPolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.rbacPolicyAddress, []) + + // Grant operation allowances on RBAC policy + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.burnSelector, BURNER_ROLE) + + // Grant roles to admin + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.admin.address) + await this.rbacPolicy.connect(this.admin).grantRole(BURNER_ROLE, this.admin.address) + }) + + // Proxy-specific + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + await expect( + this.cmtat.connect(this.admin).initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], + this.policyEngineAddress + ) + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') + }) + }) + + DeploymentCommon() + PausePolicyCommon() + RBACPolicyCommon() + CombinedPolicyCommon() + PolicyEngineCommon() +}) diff --git a/test/deployment/uupsUpgradeableDeployment.test.js b/test/deployment/uupsUpgradeableDeployment.test.js new file mode 100644 index 0000000..1b2f71b --- /dev/null +++ b/test/deployment/uupsUpgradeableDeployment.test.js @@ -0,0 +1,127 @@ +const { ethers, upgrades } = require('hardhat') +const { expect } = require('chai') +const { + fixture, + loadFixture, + MINTER_ROLE, + BURNER_ROLE, + deployPolicyEngine, + deployPausePolicy, + deployRBACPolicy, + deployCCTUUPSUpgradeable +} = require('../deploymentUtils') + +// ACE-specific common modules +const DeploymentCommon = require('../common/ace/DeploymentCommon') +const PausePolicyCommon = require('../common/ace/PausePolicyCommon') +const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') +const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') +const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') + +describe('ComplianceTokenCMTATUUPSUpgradeable', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + + // Deploy PolicyEngine (defaultAllow = true) + this.policyEngine = await deployPolicyEngine(true, this.admin.address) + this.policyEngineAddress = await this.policyEngine.getAddress() + + // Deploy PausePolicy + this.pausePolicy = await deployPausePolicy(this.policyEngineAddress, this.admin.address, false) + this.pausePolicyAddress = await this.pausePolicy.getAddress() + + // Deploy RoleBasedAccessControlPolicy + this.rbacPolicy = await deployRBACPolicy(this.policyEngineAddress, this.admin.address) + this.rbacPolicyAddress = await this.rbacPolicy.getAddress() + + // Deploy ComplianceToken (UUPS proxy) + this.cmtat = await deployCCTUUPSUpgradeable( + this._.address, + this.admin.address, + this.policyEngineAddress + ) + this.cmtatAddress = await this.cmtat.getAddress() + + // Get function selectors + this.mintSelector = this.cmtat.interface.getFunction('mint(address,uint256)').selector + this.burnSelector = this.cmtat.interface.getFunction('burn(address,uint256)').selector + + // Add PausePolicy + RBAC to PolicyEngine for mint and burn + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.rbacPolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.rbacPolicyAddress, []) + + // Grant operation allowances on RBAC policy + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.burnSelector, BURNER_ROLE) + + // Grant roles to admin + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.admin.address) + await this.rbacPolicy.connect(this.admin).grantRole(BURNER_ROLE, this.admin.address) + }) + + // UUPS proxy-specific + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + await expect( + this.cmtat.connect(this.admin).initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], + this.policyEngineAddress + ) + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') + }) + }) + + context('UUPS Upgrade', function () { + it('testOwnerCanUpgrade', async function () { + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable', this.admin) + await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + }) + + it('testNonOwnerCannotUpgrade', async function () { + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable', this.attacker) + await expect( + upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + ).to.be.revertedWithCustomError(this.cmtat, 'OwnableUnauthorizedAccount') + }) + + it('testStatePreservedAfterUpgrade', async function () { + // Mint some tokens before upgrade + await this.cmtat.connect(this.admin).mint(this.address1.address, 100n) + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n) + + // Upgrade + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable', this.admin) + const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + + // Verify state preserved + expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n) + expect(await upgraded.name()).to.equal('CMTA Token') + expect(await upgraded.symbol()).to.equal('CMTAT') + }) + }) + + DeploymentCommon() + PausePolicyCommon() + RBACPolicyCommon() + CombinedPolicyCommon() + PolicyEngineCommon() +}) diff --git a/test/deploymentUtils.js b/test/deploymentUtils.js new file mode 100644 index 0000000..b32a31d --- /dev/null +++ b/test/deploymentUtils.js @@ -0,0 +1,223 @@ +const { ethers, upgrades } = require('hardhat') +const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') + +const ZERO_ADDRESS = ethers.ZeroAddress +const DEPLOYMENT_DECIMAL = 0n +const TERMS = [ + 'doc1', + 'https://example.com/doc1', + '0x6a12eff2f559a5e529ca2c563c53194f6463ed5c61d1ae8f8731137467ab0279' +] + +// Role constants (match CMTAT convention) +const MINTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('MINTER_ROLE')) +const BURNER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_ROLE')) +const BURNER_FROM_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_FROM_ROLE')) +const BURNER_SELF_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_SELF_ROLE')) +const PAUSER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PAUSER_ROLE')) +const ENFORCER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('ENFORCER_ROLE')) +const ERC20ENFORCER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('ERC20ENFORCER_ROLE')) +const DEFAULT_ADMIN_ROLE = '0x0000000000000000000000000000000000000000000000000000000000000000' + +/** + * Fixture matching CMTAT signer convention + */ +async function fixture () { + const [ + _, + admin, + address1, + address2, + address3, + deployerAddress, + fakeRuleEngine, + ruleEngine, + attacker + ] = await ethers.getSigners() + return { + _, + admin, + address1, + address2, + address3, + deployerAddress, + fakeRuleEngine, + ruleEngine, + attacker + } +} + +/* ======== ACE Infrastructure Deploy Helpers ======== */ + +async function deployPolicyEngine (defaultAllow, initialOwner) { + const Factory = await ethers.getContractFactory('PolicyEngine') + const policyEngine = await upgrades.deployProxy( + Factory, + [defaultAllow, initialOwner], + { initializer: 'initialize', unsafeAllow: ['constructor'], silenceWarnings: true } + ) + return policyEngine +} + +async function deployPausePolicy (policyEngineAddress, ownerAddress, initiallyPaused = false) { + const abiCoder = ethers.AbiCoder.defaultAbiCoder() + const configParams = abiCoder.encode(['bool'], [initiallyPaused]) + const Factory = await ethers.getContractFactory('PausePolicy') + const pausePolicy = await upgrades.deployProxy( + Factory, + [policyEngineAddress, ownerAddress, configParams], + { initializer: 'initialize', unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], silenceWarnings: true } + ) + return pausePolicy +} + +async function deployRBACPolicy (policyEngineAddress, ownerAddress) { + const Factory = await ethers.getContractFactory('RoleBasedAccessControlPolicy') + const rbacPolicy = await upgrades.deployProxy( + Factory, + [policyEngineAddress, ownerAddress, '0x'], + { initializer: 'initialize', unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], silenceWarnings: true } + ) + return rbacPolicy +} + +/* ======== Standard Contract Deploy Helpers ======== */ + +async function deployCCTStandalone (forwarder, admin, policyEngineAddress) { + const cmtat = await ethers.deployContract( + 'ComplianceTokenCMTATStandalone', + [ + forwarder, + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ] + ) + return cmtat +} + +async function deployCCTUpgradeable (forwarder, admin, policyEngineAddress) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUpgradeable') + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ], + { + initializer: 'initialize', + constructorArgs: [forwarder], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true + } + ) + return cmtat +} + +/* ======== Lite Contract Deploy Helpers ======== */ + +async function deployCCTLiteStandalone (forwarder, admin, policyEngineAddress) { + const cmtat = await ethers.deployContract( + 'ComplianceTokenCMTATLiteStandalone', + [ + forwarder, + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ] + ) + return cmtat +} + +async function deployCCTLiteUpgradeable (forwarder, admin, policyEngineAddress) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATLiteUpgradeable') + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ], + { + initializer: 'initialize', + constructorArgs: [forwarder, admin, ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], ['CMTAT_ISIN', TERMS, 'CMTAT_info'], policyEngineAddress], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true + } + ) + return cmtat +} + +/* ======== UUPS Contract Deploy Helpers ======== */ + +async function deployCCTUUPSUpgradeable (forwarder, admin, policyEngineAddress) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable') + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ], + { + initializer: 'initialize', + constructorArgs: [forwarder], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + } + ) + return cmtat +} + +async function deployCCTLiteUUPSUpgradeable (forwarder, admin, policyEngineAddress) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable') + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ], + { + initializer: 'initialize', + constructorArgs: [forwarder], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + } + ) + return cmtat +} + +module.exports = { + ZERO_ADDRESS, + DEPLOYMENT_DECIMAL, + TERMS, + MINTER_ROLE, + BURNER_ROLE, + BURNER_FROM_ROLE, + BURNER_SELF_ROLE, + PAUSER_ROLE, + ENFORCER_ROLE, + ERC20ENFORCER_ROLE, + DEFAULT_ADMIN_ROLE, + fixture, + loadFixture, + deployPolicyEngine, + deployPausePolicy, + deployRBACPolicy, + deployCCTStandalone, + deployCCTUpgradeable, + deployCCTUUPSUpgradeable, + deployCCTLiteStandalone, + deployCCTLiteUpgradeable, + deployCCTLiteUUPSUpgradeable +} diff --git a/test/standardDeployment.test.js b/test/standardDeployment.test.js deleted file mode 100644 index 9eef771..0000000 --- a/test/standardDeployment.test.js +++ /dev/null @@ -1,22 +0,0 @@ -const {ethers} = require("hardhat"); -const { expect } = require('chai') -const { etherAddresses, deployComplianceTokenCMTATStandalone } = require("./testUtils.js"); -const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') - - -describe("ComplianceTokenCMTAT Upgradable Deployment", () => { - - it("should deploy the ComplianceTokenCMTAT standalone contract", async () => { - /*Object.assign(this, await loadFixture(etherAddresses)) - const cmtat = await deployComplianceTokenCMTATStandalone( - this.forwarder.address, - this.admin.address, - this.deployerAddress - ); - - expect(await cmtat.name()).to.equal("Security Token"); - expect(await cmtat.symbol()).to.equal("ST"); - expect(await cmtat.getAdmin()).to.equal(this.admin.address); - */ - }); -}) \ No newline at end of file diff --git a/test/standardDeploymentUpgradeable.test.js b/test/standardDeploymentUpgradeable.test.js deleted file mode 100644 index 4ad0bcd..0000000 --- a/test/standardDeploymentUpgradeable.test.js +++ /dev/null @@ -1,34 +0,0 @@ -const {ethers, upgrades} = require("hardhat"); -const { expect } = require('chai') -const { etherAddresses, deployComplianceTokenCMTATUpgradeable, deployPolicyEngine } = require("./testUtils.js"); -const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') - -describe("ComplianceTokenCMTAT Upgradeable Deployment", () => { - - it("should deploy the ComplianceTokenCMTAT standalone contract", async () => { - Object.assign(this, await loadFixture(etherAddresses)) - /*const cmtat = await deployComplianceTokenCMTATUpgradeable( - this.forwarder.address, - this.admin.address, - this.admin.address - ); - expect(await cmtat.name()).to.equal("Security Token"); - expect(await cmtat.symbol()).to.equal("ST"); - expect(await cmtat.getCCIPAdmin()).to.equal(this.admin.address);*/ - }); - - it("should deploy PolicyEngine and ComplianceTokenCMTAT with policy engine configured", async () => { - Object.assign(this, await loadFixture(etherAddresses)) - const policyEngine = await deployPolicyEngine(true, this.admin.address); - // expect(await policyEngine.getAddress()).to.be.properAddress; - - // Deploy ComplianceTokenCMTAT with the PolicyEngine - const cmtat = await deployComplianceTokenCMTATUpgradeable(this.forwarder.address, this.admin.address, await policyEngine.getAddress()) - - await cmtat.connect(this.admin).attach(policyEngine) - expect(await cmtat.name()).to.equal("Security Token"); - expect(await cmtat.symbol()).to.equal("ST"); - expect(await cmtat.getPolicyEngine()).to.equal(await policyEngine.getAddress()); - }); -}) - diff --git a/test/testUtils.js b/test/testUtils.js index eeb916d..9e8d279 100644 --- a/test/testUtils.js +++ b/test/testUtils.js @@ -1,5 +1,23 @@ const {ethers, upgrades } = require("hardhat"); +const ZERO_ADDRESS = ethers.ZeroAddress; +const DEPLOYMENT_DECIMAL = 0; +const TERMS = { + name: "Token Terms v2", + uri: "https://cmta.ch/standards/cmta-token-cmtat", + documentHash: ethers.keccak256(ethers.toUtf8Bytes("terms-v2")) +}; +const ERC20_ATTRIBUTES = ["Security Token", "ST", DEPLOYMENT_DECIMAL]; +const EXTRA_INFO_ATTRIBUTES_STANDALONE = ["1234567890", TERMS, "ComplianceTokenCMTATStandalone smart contract"]; +const EXTRA_INFO_ATTRIBUTES_UPGRADEABLE = ["1234567890", TERMS, "ComplianceTokenCMTATUpgradeable smart contract"]; +const EXTRA_INFO_ATTRIBUTES_LITE_STANDALONE = ["1234567890", TERMS, "ComplianceTokenCMTATLiteStandalone smart contract"]; +const EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE = ["1234567890", TERMS, "ComplianceTokenCMTATLiteUpgradeable smart contract"]; + +// Role constants matching CMTAT convention +const MINTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes("MINTER_ROLE")); +const BURNER_ROLE = ethers.keccak256(ethers.toUtf8Bytes("BURNER_ROLE")); +const DEFAULT_ADMIN_ROLE = "0x0000000000000000000000000000000000000000000000000000000000000000"; + async function etherAddresses () { const [ admin, @@ -25,98 +43,152 @@ async function etherAddresses () { } } +/** + * Deploy PolicyEngine through upgrades.deployProxy (ERC1967 proxy pattern) + */ +async function deployPolicyEngine(defaultAllow, initialOwner) { + const PolicyEngineFactory = await ethers.getContractFactory("PolicyEngine"); + const policyEngine = await upgrades.deployProxy( + PolicyEngineFactory, + [defaultAllow, initialOwner], + { + initializer: 'initialize', + unsafeAllow: ['constructor'] + } + ); + return policyEngine; +} + +/** + * Deploy PausePolicy through upgrades.deployProxy + */ +async function deployPausePolicy(policyEngineAddress, ownerAddress, initiallyPaused = false) { + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); + const configParams = abiCoder.encode(["bool"], [initiallyPaused]); + const PausePolicyFactory = await ethers.getContractFactory("PausePolicy"); + const pausePolicy = await upgrades.deployProxy( + PausePolicyFactory, + [policyEngineAddress, ownerAddress, configParams], + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'] + } + ); + return pausePolicy; +} -async function deployComplianceTokenCMTATStandalone (forwarderAddress, deployerAddress, policyEngine) { - const erc20Attributes = [ - "Security Token", // name - "ST", // symbol - 0 // decimalsIrrevocable (legacy) - ] - const terms = { - name: "Token Terms v2", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: ethers.keccak256(ethers.toUtf8Bytes("terms-v2")) - } - const extraInformationAttributes = [ - "1234567890", // ISIN or identifier as tokenId - terms, - "ComplianceTokenCMTATStandalone smart contract" // information string - ] - const ComplianceTokenCMTATStandalone = await ethers.deployContract( - "ComplianceTokenCMTATStandalone", +/** + * Deploy RoleBasedAccessControlPolicy through upgrades.deployProxy + */ +async function deployRBACPolicy(policyEngineAddress, ownerAddress) { + const RBACFactory = await ethers.getContractFactory("RoleBasedAccessControlPolicy"); + const rbacPolicy = await upgrades.deployProxy( + RBACFactory, + [policyEngineAddress, ownerAddress, "0x"], + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'] + } + ); + return rbacPolicy; +} + +/** + * Deploy ComplianceTokenCMTATStandalone (non-upgradeable) + */ +async function deployComplianceTokenCMTATStandalone(forwarderAddress, adminAddress, policyEngineAddress) { + const cmtat = await ethers.deployContract( + "ComplianceTokenCMTATStandalone", [ forwarderAddress, - erc20Attributes, - extraInformationAttributes, - policyEngine - ], - deployerAddress - ) - - return ComplianceTokenCMTATStandalone; -} + adminAddress, + ERC20_ATTRIBUTES, + EXTRA_INFO_ATTRIBUTES_STANDALONE, + policyEngineAddress + ] + ); + return cmtat; +} -async function deployComplianceTokenCMTATUpgradeable (forwarderAddress, deployerAddress, policyEngine) { +/** + * Deploy ComplianceTokenCMTATUpgradeable (proxy) + */ +async function deployComplianceTokenCMTATUpgradeable(forwarderAddress, adminAddress, policyEngineAddress) { const ETHERS_CMTAT_PROXY_FACTORY = await ethers.getContractFactory( 'ComplianceTokenCMTATUpgradeable' - ) - const erc20Attributes = [ - "Security Token", // name - "ST", // symbol - 0 // decimalsIrrevocable (legacy) - ] - const terms = { - name: "Token Terms v2", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: ethers.keccak256(ethers.toUtf8Bytes("terms-v2")) - } - const extraInformationAttributes = [ - "1234567890", // ISIN or identifier as tokenId - terms, - "ComplianceTokenCMTATUpgradeable smart contract" // information string - ] - const ComplianceTokenCMTATUpgradeable = await upgrades.deployProxy( - ETHERS_CMTAT_PROXY_FACTORY, + ); + const cmtat = await upgrades.deployProxy( + ETHERS_CMTAT_PROXY_FACTORY, [ - erc20Attributes, - extraInformationAttributes, - policyEngine // policyEngine + adminAddress, + ERC20_ATTRIBUTES, + EXTRA_INFO_ATTRIBUTES_UPGRADEABLE, + policyEngineAddress ], { initializer: 'initialize', constructorArgs: [forwarderAddress], - from: deployerAddress, - unsafeAllow: ['missing-initializer','missing-initializer', 'constructor'] + unsafeAllow: ['missing-initializer', 'constructor'] } - ) - - return ComplianceTokenCMTATUpgradeable; + ); + return cmtat; } /** - * Deploy PolicyEngine through upgrades.deployProxy (ERC1967 proxy pattern) - * @param {boolean} defaultAllow - The default policy result (true = allow, false = reject) - * @param {string} initialOwner - The address of the initial owner - * @returns {Promise} The deployed PolicyEngine proxy instance + * Deploy ComplianceTokenCMTATLiteStandalone (non-upgradeable) */ -async function deployPolicyEngine(defaultAllow, initialOwner) { - const PolicyEngineFactory = await ethers.getContractFactory("PolicyEngine"); +async function deployComplianceTokenCMTATLiteStandalone(forwarderAddress, adminAddress, policyEngineAddress) { + const cmtat = await ethers.deployContract( + "ComplianceTokenCMTATLiteStandalone", + [ + forwarderAddress, + adminAddress, + ERC20_ATTRIBUTES, + EXTRA_INFO_ATTRIBUTES_LITE_STANDALONE, + policyEngineAddress + ] + ); + return cmtat; +} - const policyEngine = await upgrades.deployProxy( - PolicyEngineFactory, - [defaultAllow, initialOwner], +/** + * Deploy ComplianceTokenCMTATLiteUpgradeable (proxy) + */ +async function deployComplianceTokenCMTATLiteUpgradeable(forwarderAddress, adminAddress, policyEngineAddress) { + const ETHERS_CMTAT_PROXY_FACTORY = await ethers.getContractFactory( + 'ComplianceTokenCMTATLiteUpgradeable' + ); + const cmtat = await upgrades.deployProxy( + ETHERS_CMTAT_PROXY_FACTORY, + [ + adminAddress, + ERC20_ATTRIBUTES, + EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE, + policyEngineAddress + ], { initializer: 'initialize', - unsafeAllow: ['constructor'] + constructorArgs: [forwarderAddress, adminAddress, ERC20_ATTRIBUTES, EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE, policyEngineAddress], + unsafeAllow: ['missing-initializer', 'constructor'] } ); - - return policyEngine; + return cmtat; } module.exports = { + ZERO_ADDRESS, + MINTER_ROLE, + BURNER_ROLE, + DEFAULT_ADMIN_ROLE, + DEPLOYMENT_DECIMAL, + TERMS, + ERC20_ATTRIBUTES, etherAddresses, + deployPolicyEngine, + deployPausePolicy, + deployRBACPolicy, deployComplianceTokenCMTATStandalone, deployComplianceTokenCMTATUpgradeable, - deployPolicyEngine + deployComplianceTokenCMTATLiteStandalone, + deployComplianceTokenCMTATLiteUpgradeable, }; \ No newline at end of file From 01f2f6ee40b29e1ff082b29886f98c22a64d31e1 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Fri, 6 Mar 2026 11:40:29 +0000 Subject: [PATCH 14/57] Change inheritance of Ownable contract, fix deployment scripts --- .../ComplianceTokenCMTATLiteUpgradeable.sol | 33 +++++ .../ComplianceTokenCMTATStandalone.sol | 6 +- .../ComplianceTokenCMTATUpgradeable.sol | 2 +- .../PolicyProtectedUpgradeable.sol | 130 ++++++++++++++++++ .../modules/lite/CCTCMTATBaseERC1404.sol | 9 +- .../modules/lite/CCTCMTATBasePolicyEngine.sol | 7 +- .../lite/PolicyValidationModuleERC1404.sol | 4 +- .../lite/ValidationModulePolicyEngine.sol | 2 +- contracts/modules/standard/CCTBaseERC2771.sol | 1 - contracts/modules/standard/CCTCommon.sol | 15 +- scripts/deploy-lite.js | 38 +++-- scripts/deploy-standard.js | 35 +++-- 12 files changed, 250 insertions(+), 32 deletions(-) create mode 100644 contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol create mode 100644 contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol diff --git a/contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol new file mode 100644 index 0000000..4b7ee01 --- /dev/null +++ b/contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol @@ -0,0 +1,33 @@ +//SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; +import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; +import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; + +/** + * @title ComplianceTokenCMTATLite + * @author Chainlink + * @notice Standalone Compliance Token contract with Chainlink ACE policy validation on CMTA transfers + */ +contract ComplianceTokenCMTATLiteUpgradeable is CCTCMTATBaseERC2771 { + /** + * @notice Contract version for standalone deployment + * @param forwarderIrrevocable address of the forwarder, required for the gasless support + * @param admin address of the admin of contract (Access Control) + * @param ERC20Attributes_ ERC20 name, symbol and decimals + * @param extraInformationAttributes_ tokenId, terms, information + * @param snapshotEngine_ address of the snapshot engine + * @param documentEngine_ address of the document engine + * @param policyEngine_ address of the policy engine + */ + /// @custom:oz-upgrades-unsafe-allow constructor + constructor( + address forwarderIrrevocable, + address admin, + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, + address policyEngine_ + ) ERC2771Module(forwarderIrrevocable) {} +} \ No newline at end of file diff --git a/contracts/deployment/ComplianceTokenCMTATStandalone.sol b/contracts/deployment/ComplianceTokenCMTATStandalone.sol index 00d2584..e966bbb 100644 --- a/contracts/deployment/ComplianceTokenCMTATStandalone.sol +++ b/contracts/deployment/ComplianceTokenCMTATStandalone.sol @@ -24,13 +24,15 @@ contract ComplianceTokenCMTATStandalone is CCTBaseERC2771 { */ /// @custom:oz-upgrades-unsafe-allow constructor constructor( - address forwarderIrrevocable, + address forwarderIrrevocable_, + address admin_, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, address policyEngine_ - ) ERC2771Module(forwarderIrrevocable) { + ) ERC2771Module(forwarderIrrevocable_) { // Initialize the contract to avoid front-running initialize( + admin_, ERC20Attributes_, extraInformationAttributes_, policyEngine_ diff --git a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol index 5cdf6d3..27d5200 100644 --- a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol +++ b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol @@ -7,7 +7,7 @@ import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/op /** - * @title ComplianceTokenCMTATStandalone + * @title ComplianceTokenCMTATUpgradeable * @author Chainlink * @notice Standalone ComplianceToken contract with Chainlink ACE policy validation on all public functions */ diff --git a/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol b/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol new file mode 100644 index 0000000..a432720 --- /dev/null +++ b/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol @@ -0,0 +1,130 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.20; + +import {IPolicyEngine} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; +import {IPolicyProtected} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyProtected.sol"; +import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import {ERC165Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; + +/** + * @title PolicyProtectedUpgradeable.sol + * @dev Modified implementation for attaching a policy engine to an upgradeable smart contract. Uses ERC-7201 storage + * to not conflict with other storage slots of extending contracts. Provides modifiers to be attached to methods + * of the extending contract to run the policy engine before executing the method. Access control for attaching and detaching the policy engine + * is implemented in the extending contract. + */ +abstract contract PolicyProtectedUpgradeable is Initializable, ERC165Upgradeable, IPolicyProtected { + /// @custom:storage-location erc7201:chainlink.ace.PolicyProtected + struct PolicyProtectedStorage { + IPolicyEngine policyEngine; + mapping(address sender => bytes context) senderContext; // use transient storage eventually + } + + // keccak256(abi.encode(uint256(keccak256("chainlink.ace.PolicyProtected")) - 1)) & + // ~bytes32(uint256(0xff)) + // solhint-disable-next-line const-name-snakecase + bytes32 private constant policyProtectedStorageLocation = + 0x5970a53874f73819f13c80052b0c1b19d6ce68b29b2ad28a7413019c8a409000; + + function _policyProtectedStorage() private pure returns (PolicyProtectedStorage storage $) { + // solhint-disable-next-line no-inline-assembly + assembly { + $.slot := policyProtectedStorageLocation + } + } + + function __PolicyProtected_init(address policyEngine) internal onlyInitializing { + __ERC165_init(); + __PolicyProtected_init_unchained(policyEngine); + } + + function __PolicyProtected_init_unchained(address policyEngine) internal onlyInitializing { + _attachPolicyEngine(policyEngine); + } + /** + * @dev Modifier to run the policy engine on the current method. + * @notice After the function execution completes, any context that was set will be automatically cleared. + */ + + modifier runPolicy() { + if (address(_policyProtectedStorage().policyEngine) == address(0)) { + revert IPolicyEngine.PolicyEngineUndefined(); + } + bytes memory context = getContext(); + _policyProtectedStorage().policyEngine.run( + IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + ); + _; + if (context.length > 0) { + clearContext(); + } + } + + /** + * @dev Modifier to run the policy engine on the current method with the provided context. + * @param context Additional information or authorization to perform the operation. + */ + modifier runPolicyWithContext(bytes calldata context) { + if (address(_policyProtectedStorage().policyEngine) == address(0)) { + revert IPolicyEngine.PolicyEngineUndefined(); + } + _policyProtectedStorage().policyEngine.run( + IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + ); + _; + } + + /// @inheritdoc IPolicyProtected + function attachPolicyEngine(address policyEngine) external virtual override { + _attachPolicyEngine(policyEngine); + } + + function _attachPolicyEngine(address policyEngine) internal { + require(policyEngine != address(0), "Policy engine is zero address"); + if (address(_policyProtectedStorage().policyEngine) != address(0)) { + try _policyProtectedStorage().policyEngine.detach() { + // Detachment succeeded + } catch (bytes memory reason) { + emit PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine), reason); + } + } + _policyProtectedStorage().policyEngine = IPolicyEngine(policyEngine); + IPolicyEngine(policyEngine).attach(); + emit PolicyEngineAttached(policyEngine); + } + + /// @inheritdoc IPolicyProtected + function getPolicyEngine() public view virtual override returns (address) { + return address(_policyProtectedStorage().policyEngine); + } + + /// @inheritdoc IPolicyProtected + function setContext(bytes calldata context) public override { + _policyProtectedStorage().senderContext[msg.sender] = context; + } + + /// @inheritdoc IPolicyProtected + function getContext() public view override returns (bytes memory) { + return _policyProtectedStorage().senderContext[msg.sender]; + } + + /// @inheritdoc IPolicyProtected + function clearContext() public override { + delete _policyProtectedStorage().senderContext[msg.sender]; + } + + /** + * @dev See {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(ERC165Upgradeable, IERC165) + returns (bool) + { + return interfaceId == type(IPolicyProtected).interfaceId || super.supportsInterface(interfaceId); + } +} diff --git a/contracts/modules/lite/CCTCMTATBaseERC1404.sol b/contracts/modules/lite/CCTCMTATBaseERC1404.sol index 31ce68b..f1eb906 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC1404.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC1404.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.20; import {CCTCMTATBasePolicyEngine} from "./CCTCMTATBasePolicyEngine.sol"; import {PolicyValidationModuleERC1404, IERC1404, IERC1404Extend} from "./PolicyValidationModuleERC1404.sol"; import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; -import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; +import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import {ERC20EnforcementModule, ERC20EnforcementModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; @@ -44,7 +44,7 @@ abstract contract CCTCMTATBaseERC1404 is address from, address to, uint256 value - ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModulePolicyEngine) view returns (bool) { + ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModuleCore) view returns (bool) { return CCTCMTATBasePolicyEngine.canTransfer(from, to, value); } @@ -56,7 +56,7 @@ abstract contract CCTCMTATBaseERC1404 is address from, address to, uint256 value - ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModulePolicyEngine) view returns (bool) { + ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModuleCore) view returns (bool) { return CCTCMTATBasePolicyEngine.canTransferFrom(spender, from, to, value); } @@ -78,8 +78,7 @@ abstract contract CCTCMTATBaseERC1404 is return PolicyValidationModuleERC1404._detectTransferRestriction(from, to, value); } - // Note: CCTCMTATBasePolicyEngine implements PolicyProtectedUpgradeable - function supportsInterface(bytes4 interfaceId) public view virtual override(CCTCMTATBasePolicyEngine, PolicyProtectedUpgradeable) returns (bool) { + function supportsInterface(bytes4 interfaceId) public view virtual override(CCTCMTATBasePolicyEngine) returns (bool) { return CCTCMTATBasePolicyEngine.supportsInterface(interfaceId); } } \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index 05f789d..e2cef08 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.20; import {CMTATBaseCommon, CMTATBaseAccessControl} from "../../../submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol"; -import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedUpgradeable} from "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol"; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {IPolicyEngine} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; @@ -143,6 +143,10 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation } } + function attachPolicyEngine(address policyEngine) external virtual override onlyRole(DEFAULT_ADMIN_ROLE) { + _attachPolicyEngine(policyEngine); + } + /*////////////////////////////////////////////////////////////// INTERNAL/PRIVATE FUNCTIONS //////////////////////////////////////////////////////////////*/ @@ -158,7 +162,6 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation require(ValidationModulePolicyEngine._transferred(spender, from, to, value), ERC7943CannotTransfer(from, to, value)); } - function supportsInterface(bytes4 interfaceId) public view virtual override(CMTATBaseAccessControl, PolicyProtectedUpgradeable) returns (bool) { return CMTATBaseAccessControl.supportsInterface(interfaceId) || PolicyProtectedUpgradeable.supportsInterface(interfaceId); } diff --git a/contracts/modules/lite/PolicyValidationModuleERC1404.sol b/contracts/modules/lite/PolicyValidationModuleERC1404.sol index 227347e..4c37ce6 100644 --- a/contracts/modules/lite/PolicyValidationModuleERC1404.sol +++ b/contracts/modules/lite/PolicyValidationModuleERC1404.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.20; /* ==== Tokenization === */ import {IERC1404, IERC1404Extend} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol"; -import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; +import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; /** * @dev Validation module (ERC-1404) @@ -13,7 +13,7 @@ import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; * Useful to restrict and validate transfers */ abstract contract PolicyValidationModuleERC1404 is - ValidationModulePolicyEngine, IERC1404Extend + ValidationModuleCore, IERC1404Extend { /* ============ State Variables ============ */ string constant TEXT_TRANSFER_OK = "NoRestriction"; diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index 0d76258..127ded9 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.20; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; -import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedUpgradeable} from "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol"; import {IPolicyEngine} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; diff --git a/contracts/modules/standard/CCTBaseERC2771.sol b/contracts/modules/standard/CCTBaseERC2771.sol index 10ffee6..44a7330 100644 --- a/contracts/modules/standard/CCTBaseERC2771.sol +++ b/contracts/modules/standard/CCTBaseERC2771.sol @@ -9,7 +9,6 @@ import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/Cont import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol"; -import "hardhat/console.sol"; abstract contract CCTBaseERC2771 is CCTCommon, ERC2771Module { diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index 200cfd6..fdf7b55 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -5,6 +5,7 @@ pragma solidity ^0.8.20; /* ==== OpenZeppelin === */ import { IERC165 } from "@openzeppelin/contracts/interfaces/IERC165.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /* ==== CMTAT === */ import {CMTATBaseCommon} from "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol"; @@ -27,21 +28,24 @@ import {IBurnMintERC20} from "../../../submodules/CMTAT/contracts/interfaces/tec import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; /* ==== Chainlink ACE === */ -import {PolicyProtectedUpgradeable} from "@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedUpgradeable} from "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol"; abstract contract CCTCommon is + OwnableUpgradeable, ERC20CrossChainModule, PolicyProtectedUpgradeable, CMTATBaseCommon, CCIPModule { function initialize( + address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, address policyEngine ) public virtual initializer { _initialize( + admin, ERC20Attributes_, extraInformationAttributes_, policyEngine @@ -49,11 +53,13 @@ abstract contract CCTCommon is } function _initialize( + address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, address policyEngine ) internal virtual onlyInitializing { __CMTAT_init( + admin, ERC20Attributes_, extraInformationAttributes_, policyEngine @@ -65,10 +71,12 @@ abstract contract CCTCommon is * @dev calls the different initialize functions from the different modules */ function __CMTAT_init( + address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationAttributes_, address policyEngine ) internal virtual onlyInitializing { + __Ownable_init_unchained(admin); /* OpenZeppelin library */ // OZ init_unchained functions are called firstly due to inheritance __Context_init_unchained(); @@ -132,6 +140,11 @@ abstract contract CCTCommon is return CMTATBaseCommon.transferFrom(from, to, value); } + // Add onlyOwner modifier + function attachPolicyEngine(address policyEngine) external virtual override onlyOwner { + _attachPolicyEngine(policyEngine); + } + /* ============ View functions ============ */ /** diff --git a/scripts/deploy-lite.js b/scripts/deploy-lite.js index 8cd2df0..d363279 100644 --- a/scripts/deploy-lite.js +++ b/scripts/deploy-lite.js @@ -5,18 +5,37 @@ const { ethers } = require("hardhat"); const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); +async function deployPolicyEngine(deployer) { + const factory = await ethers.getContractFactory('PolicyEngine', deployer); + const contract = await factory.deploy(); + await contract.waitForDeployment(); + return contract; +} + async function main() { + const network = await ethers.provider.getNetwork(); + const isHardhatNetwork = network.chainId === 31337n; + + let deployer; + if (isHardhatNetwork) { + const signers = await ethers.getSigners(); + deployer = signers[0]; + console.log("Hardhat network detected, using account:", deployer.address); + } else { + // On live networks, the deployer comes from the hardhat config (e.g. private key / mnemonic) + const signers = await ethers.getSigners(); + deployer = signers[0]; + console.log("Deploying to network:", network.name, "with account:", deployer.address); + } + // To change // Replace these with actual deployed contract addresses or deploy mocks before this const forwarderIrrevocable = ZeroAddress; - const admin = "0x1000000000000000000000000000000000000001"; - const policyEngine = ZeroAddress; - const snapshotEngine = ZeroAddress; - const documentEngine = ZeroAddress; + const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; const ERC20Attributes = { name: "Security Token", symbol: "ST", - decimalsIrrevocable: 0 // Compliant with CMTAT spec but can be different + decimalsIrrevocable: 8 // Compliant with CMTAT spec but can be different }; const terms = { name: "Token Terms v1", @@ -29,16 +48,17 @@ async function main() { information: "CMTAT smart contract" }; + const policyEngineContract = await deployPolicyEngine(deployer); + const policyEngineAddress = await policyEngineContract.getAddress(); + // Get contract factory and deploy - const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTATLiteStandalone"); + const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTATLiteStandalone", deployer); const cmtat = await CMTATStandalone.deploy( forwarderIrrevocable, admin, ERC20Attributes, extraInformationAttributes, - policyEngine, - snapshotEngine, - documentEngine + policyEngineAddress ); await cmtat.waitForDeployment(); diff --git a/scripts/deploy-standard.js b/scripts/deploy-standard.js index 932fe94..21ba026 100644 --- a/scripts/deploy-standard.js +++ b/scripts/deploy-standard.js @@ -4,15 +4,32 @@ const { ethers } = require("hardhat"); const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); +async function deployPolicyEngine(deployer) { + const factory = await ethers.getContractFactory('PolicyEngine', deployer); + const contract = await factory.deploy(); + await contract.waitForDeployment(); + return contract; +} async function main() { + const network = await ethers.provider.getNetwork(); + const isHardhatNetwork = network.chainId === 31337n; + + let deployer; + if (isHardhatNetwork) { + const signers = await ethers.getSigners(); + deployer = signers[0]; + console.log("Hardhat network detected, using account:", deployer.address); + } else { + const signers = await ethers.getSigners(); + deployer = signers[0]; + console.log("Deploying to network:", network.name, "with account:", deployer.address); + } + // To change // Replace these with actual deployed contract addresses or deploy mocks before this const forwarderIrrevocable = ZeroAddress; - const admin = "0x1000000000000000000000000000000000000001"; - const policyEngine = ZeroAddress; - const snapshotEngine = ZeroAddress; - const documentEngine = ZeroAddress; + const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; const ERC20Attributes = { name: "Security Token", symbol: "ST", @@ -29,16 +46,18 @@ async function main() { information: "CMTAT smart contract" }; + const policyEngineContract = await deployPolicyEngine(deployer); + const policyEngineAddress = await policyEngineContract.getAddress(); + console.log("Policy Engine deployed to:", policyEngineAddress); + // Get contract factory and deploy - const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTAT"); + const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTATStandalone", deployer); const cmtat = await CMTATStandalone.deploy( forwarderIrrevocable, admin, ERC20Attributes, extraInformationAttributes, - policyEngine, - snapshotEngine, - documentEngine + policyEngineAddress, ); await cmtat.waitForDeployment(); From a2278ff9c69a4bd68d3912a9502cfa11c6e0d35f Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Mon, 9 Mar 2026 02:58:49 +0000 Subject: [PATCH 15/57] Create compilable implementations for standard, lite and upgradeable contracts, add tests using CMTAT common modules pattern --- README.md | 82 ++++++- ...omplianceTokenCMTATLiteUUPSUpgradeable.sol | 34 +++ .../ComplianceTokenCMTATUUPSUpgradeable.sol | 32 +++ .../ComplianceTokenCMTATUpgradeable.sol | 4 +- .../lite/ValidationModulePolicyEngine.sol | 2 +- contracts/test/PolicyEngineImport.sol | 3 + hardhat.config.js | 8 +- test/common/ace/CombinedPolicyCommon.js | 64 +++++ test/common/ace/DeploymentCommon.js | 46 ++++ test/common/ace/PausePolicyCommon.js | 66 ++++++ test/common/ace/PolicyEngineCommon.js | 51 ++++ test/common/ace/RBACPolicyCommon.js | 102 ++++++++ .../liteStandaloneDeployment.test.js | 39 +++ .../liteUUPSUpgradeableDeployment.test.js | 106 +++++++++ .../liteUpgradeableDeployment.test.js | 55 +++++ test/deployment/standaloneDeployment.test.js | 67 ++++++ test/deployment/upgradeableDeployment.test.js | 83 +++++++ .../uupsUpgradeableDeployment.test.js | 127 ++++++++++ test/deploymentUtils.js | 223 ++++++++++++++++++ test/standardDeployment.test.js | 22 -- test/standardDeploymentUpgradeable.test.js | 34 --- test/testUtils.js | 206 ++++++++++------ 22 files changed, 1326 insertions(+), 130 deletions(-) create mode 100644 contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol create mode 100644 contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol create mode 100644 test/common/ace/CombinedPolicyCommon.js create mode 100644 test/common/ace/DeploymentCommon.js create mode 100644 test/common/ace/PausePolicyCommon.js create mode 100644 test/common/ace/PolicyEngineCommon.js create mode 100644 test/common/ace/RBACPolicyCommon.js create mode 100644 test/deployment/liteStandaloneDeployment.test.js create mode 100644 test/deployment/liteUUPSUpgradeableDeployment.test.js create mode 100644 test/deployment/liteUpgradeableDeployment.test.js create mode 100644 test/deployment/standaloneDeployment.test.js create mode 100644 test/deployment/upgradeableDeployment.test.js create mode 100644 test/deployment/uupsUpgradeableDeployment.test.js create mode 100644 test/deploymentUtils.js delete mode 100644 test/standardDeployment.test.js delete mode 100644 test/standardDeploymentUpgradeable.test.js diff --git a/README.md b/README.md index 45b61c9..ea9fbae 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,89 @@ # CMTAT ACE integration project -## Deployment versions* -Two versions are available; *lite* version which substitutes RuleEngine with Chainlink ACE PolicyEngine, and *standard* version, which uses PolicyEngine to protect all external functions instead of OpenZepplin role-based AccessControl. +## Deployment versions +Two versions are available; *lite* version which substitutes RuleEngine with Chainlink ACE PolicyEngine, and *standard* version, which uses PolicyEngine to protect all external functions instead of OpenZeppelin role-based AccessControl. + +### Standard + +Replaces CMTAT's `AccessControlUpgradeable` (role-based) with `OwnableUpgradeable` (single owner) and integrates Chainlink ACE `PolicyProtectedUpgradeable` for all access control and compliance validation. + +| Contract | Proxy type | +|----------|------------| +| `ComplianceTokenCMTATStandalone` | None | +| `ComplianceTokenCMTATUpgradeable` | Transparent | +| `ComplianceTokenCMTATUUPSUpgradeable` | UUPS (`onlyOwner`) | + +### Lite + +Keeps CMTAT's `AccessControlUpgradeable` (role-based) for module authorization and adds Chainlink ACE PolicyEngine for transfer validation only, replacing CMTAT's RuleEngine. + +| Contract | Proxy type | +|----------|------------| +| `ComplianceTokenCMTATLiteStandalone` | None | +| `ComplianceTokenCMTATLiteUpgradeable` | Transparent | +| `ComplianceTokenCMTATLiteUUPSUpgradeable` | UUPS (`onlyRole(PROXY_UPGRADE_ROLE)`) | + +## Changes from CMTAT + +### Access Control + +| Aspect | CMTAT | Standard | Lite | +|--------|-------|----------|------| +| Base model | `AccessControlUpgradeable` with 9+ roles | `OwnableUpgradeable` (single owner) | `AccessControlUpgradeable` (unchanged) | +| Authorization | `onlyRole(MINTER_ROLE)`, etc. | `runPolicy` modifier via PolicyEngine | `onlyRole()` for modules, PolicyEngine for transfers | +| Role management | `grantRole()` / `revokeRole()` | Managed externally via `RoleBasedAccessControlPolicy` | CMTAT roles preserved | + +### Validation & Compliance + +| Aspect | CMTAT | Standard | Lite | +|--------|-------|----------|------| +| Validation layer | `CMTATBaseRuleEngine` → `ValidationModuleRuleEngine` | `PolicyProtectedUpgradeable` → `IPolicyEngine` | `ValidationModulePolicyEngine` → `IPolicyEngine` | +| Engine type | RuleEngine (custom interface) | Chainlink ACE PolicyEngine | Chainlink ACE PolicyEngine | +| Transfer check | `_canTransferGenericByModuleAndRevert()` + RuleEngine | PolicyEngine `run()` via `runPolicy` modifier | `_canTransferGenericByModuleAndRevert()` + PolicyEngine `run()` | +| ERC-1404 support | Via `ValidationModuleERC1404` | Not applicable (no module-level checks) | Via `PolicyValidationModuleERC1404` | + +### Initialization + +The `Engine` struct parameter is replaced with a direct `address policyEngine_`: + +```solidity +// CMTAT +constructor(..., ICMTATConstructor.Engine memory engines_) + +// ComplianceTokenCMTAT (Standard & Lite) +constructor(..., address policyEngine_) +``` + +### Modules + +All CMTAT functional modules are preserved in both variants: + +- ERC20MintModule, ERC20BurnModule +- ERC20EnforcementModule (freeze/enforcement) +- PauseModule (Standard: via PausePolicy; Lite: native) +- SnapshotEngineModule, DocumentEngineModule +- ExtraInformationModule +- ERC20CrossChainModule, CCIPModule +- ERC2771Module (gasless transactions) + +### Removed from Standard + +- `CMTATBaseAccessControl` — replaced by `OwnableUpgradeable` +- `AccessControlModule` — role management removed from contract +- `CMTATBaseRuleEngine` — replaced by `PolicyProtectedUpgradeable` +- `ValidationModuleRuleEngine` — replaced by direct PolicyEngine calls +- All `onlyRole()` authorization functions — replaced by `runPolicy` modifier + +### Added + +- `PolicyProtectedUpgradeable` — Chainlink ACE integration with ERC-7201 storage, `runPolicy` modifier, and policy engine lifecycle management +- `ValidationModulePolicyEngine` (Lite) — hybrid validation combining CMTAT module checks with PolicyEngine +- `PolicyValidationModuleERC1404` (Lite) — ERC-1404 transfer restriction codes with PolicyEngine awareness ## Library - CMTAT [v3.2.0-rc0](https://github.com/CMTA/CMTAT/releases/tag/v3.2.0-rc0) +- Chainlink ACE ^1.0.0 ## Initialize submodules ```shell diff --git a/contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol new file mode 100644 index 0000000..f2650d2 --- /dev/null +++ b/contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol @@ -0,0 +1,34 @@ +//SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; +import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; +import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; + + +/** + * @title ComplianceTokenCMTATLiteUUPSUpgradeable + * @author Chainlink + * @notice UUPS upgradeable Lite ComplianceToken contract with Chainlink ACE policy validation on CMTA transfers + */ +contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC2771, UUPSUpgradeable { + bytes32 public constant PROXY_UPGRADE_ROLE = keccak256("PROXY_UPGRADE_ROLE"); + + /** + * @notice Contract version for UUPS proxy deployment + * @param forwarderIrrevocable address of the forwarder, required for the gasless support + */ + /// @custom:oz-upgrades-unsafe-allow constructor + constructor( + address forwarderIrrevocable + ) ERC2771Module(forwarderIrrevocable) { + // Disable the possibility to initialize the implementation + _disableInitializers(); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyRole(PROXY_UPGRADE_ROLE) {} +} diff --git a/contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol new file mode 100644 index 0000000..ca44049 --- /dev/null +++ b/contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol @@ -0,0 +1,32 @@ +//SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; +import {CCTBaseERC2771} from "../modules/standard/CCTBaseERC2771.sol"; +import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; + + +/** + * @title ComplianceTokenCMTATUUPSUpgradeable + * @author Chainlink + * @notice UUPS upgradeable ComplianceToken contract with Chainlink ACE policy validation on all public functions + */ +contract ComplianceTokenCMTATUUPSUpgradeable is CCTBaseERC2771, UUPSUpgradeable { + /** + * @notice Contract version for UUPS proxy deployment + * @param forwarderIrrevocable address of the forwarder, required for the gasless support + */ + /// @custom:oz-upgrades-unsafe-allow constructor + constructor( + address forwarderIrrevocable + ) ERC2771Module(forwarderIrrevocable) { + // Disable the possibility to initialize the implementation + _disableInitializers(); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL/PRIVATE FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyOwner {} +} diff --git a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol index 27d5200..db88206 100644 --- a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol +++ b/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol @@ -9,11 +9,11 @@ import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/op /** * @title ComplianceTokenCMTATUpgradeable * @author Chainlink - * @notice Standalone ComplianceToken contract with Chainlink ACE policy validation on all public functions + * @notice Upgradeable ComplianceToken contract with Chainlink ACE policy validation on all public functions */ contract ComplianceTokenCMTATUpgradeable is CCTBaseERC2771 { /** - * @notice Contract version for standalone deployment + * @notice Contract version for upgradeable deployment * @param forwarderIrrevocable address of the forwarder, required for the gasless support */ /// @custom:oz-upgrades-unsafe-allow constructor diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index 127ded9..ddcb8b6 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -109,7 +109,7 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr /* ============ State functions ============ */ function _transferred(address spender, address from, address to, uint256 /* value */) internal virtual returns (bool) { - if(!_canTransferGenericByModule(spender, from, to)) { + if(!_canTransferGenericByModuleAndRevert(spender, from, to)) { return false; } else { IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine()); diff --git a/contracts/test/PolicyEngineImport.sol b/contracts/test/PolicyEngineImport.sol index 55449fd..bce4f48 100644 --- a/contracts/test/PolicyEngineImport.sol +++ b/contracts/test/PolicyEngineImport.sol @@ -3,3 +3,6 @@ pragma solidity 0.8.26; // Import PolicyEngine to make it available for Hardhat compilation and testing import {PolicyEngine} from "@chainlink/ace/packages/policy-management/src/core/PolicyEngine.sol"; +// Use local modified copies with Hardhat-compatible import paths +import {PausePolicy} from "../modules/chainlink-ace-modified/PausePolicy.sol"; +import {RoleBasedAccessControlPolicy} from "../modules/chainlink-ace-modified/RoleBasedAccessControlPolicy.sol"; diff --git a/hardhat.config.js b/hardhat.config.js index 01f68f0..55f5188 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,5 +1,9 @@ +require('@nomicfoundation/hardhat-chai-matchers') require('@openzeppelin/hardhat-upgrades') +const { silenceWarnings } = require('@openzeppelin/upgrades-core') +silenceWarnings() + /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { solidity: { @@ -9,7 +13,7 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 200 + runs: 50 }, evmVersion: 'prague' } @@ -19,7 +23,7 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 200 + runs: 50 }, evmVersion: 'cancun' } diff --git a/test/common/ace/CombinedPolicyCommon.js b/test/common/ace/CombinedPolicyCommon.js new file mode 100644 index 0000000..7d38203 --- /dev/null +++ b/test/common/ace/CombinedPolicyCommon.js @@ -0,0 +1,64 @@ +const { expect } = require('chai') + +/** + * Tests combined PausePolicy + RBAC behavior. + * + * Required `this` context: + * this.cmtat – compliance token instance + * this.admin – owner / authorized signer + * this.address1 – test address + * this.address2 – test address + * this.policyEngine – PolicyEngine instance + * this.pausePolicy – PausePolicy instance + */ +function CombinedPolicyCommon () { + context('Combined PausePolicy + RBAC', function () { + it('testRejectMintWhenPausedEvenWithCorrectRole', async function () { + await this.pausePolicy.connect(this.admin).setPausedState(true) + await expect( + this.cmtat.connect(this.admin).mint(this.address1, 100n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testRejectMintWhenUnpausedWithoutCorrectRole', async function () { + await expect( + this.cmtat.connect(this.address1).mint(this.address2, 100n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowMintWhenUnpausedWithCorrectRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + + it('testPolicyOrderPauseCheckedBeforeRBAC', async function () { + await this.pausePolicy.connect(this.admin).setPausedState(true) + await expect( + this.cmtat.connect(this.admin).mint(this.address1, 100n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + await this.pausePolicy.connect(this.admin).setPausedState(false) + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + + it('testFullMintTransferBurnLifecycle', async function () { + const MINT_AMOUNT = 200n + const TRANSFER_AMOUNT = 50n + const BURN_AMOUNT = 100n + + await this.cmtat.connect(this.admin).mint(this.address1, MINT_AMOUNT) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(MINT_AMOUNT) + expect(await this.cmtat.totalSupply()).to.equal(MINT_AMOUNT) + + await this.cmtat.connect(this.address1).transfer(this.address2, TRANSFER_AMOUNT) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(MINT_AMOUNT - TRANSFER_AMOUNT) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(TRANSFER_AMOUNT) + + await this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, BURN_AMOUNT) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(MINT_AMOUNT - TRANSFER_AMOUNT - BURN_AMOUNT) + expect(await this.cmtat.totalSupply()).to.equal(MINT_AMOUNT - BURN_AMOUNT) + }) + }) +} + +module.exports = CombinedPolicyCommon diff --git a/test/common/ace/DeploymentCommon.js b/test/common/ace/DeploymentCommon.js new file mode 100644 index 0000000..33b0c10 --- /dev/null +++ b/test/common/ace/DeploymentCommon.js @@ -0,0 +1,46 @@ +const { expect } = require('chai') +const { DEPLOYMENT_DECIMAL } = require('../../deploymentUtils') + +/** + * Basic deployment tests for standard (PolicyEngine-based) contracts. + * + * Required `this` context: + * this.cmtat – compliance token instance + * this.admin – owner signer + * this.address1 – test address + * this.policyEngineAddress – PolicyEngine address + */ +function DeploymentCommon () { + context('Deployment', function () { + it('testHasCorrectName', async function () { + expect(await this.cmtat.name()).to.equal('CMTA Token') + }) + + it('testHasCorrectSymbol', async function () { + expect(await this.cmtat.symbol()).to.equal('CMTAT') + }) + + it('testHasCorrectDecimals', async function () { + expect(await this.cmtat.decimals()).to.equal(DEPLOYMENT_DECIMAL) + }) + + it('testHasPolicyEngineAttached', async function () { + expect(await this.cmtat.getPolicyEngine()).to.equal(this.policyEngineAddress) + }) + + it('testHasCorrectOwner', async function () { + expect(await this.cmtat.owner()).to.equal(this.admin.address) + }) + + it('testHasZeroTotalSupply', async function () { + expect(await this.cmtat.totalSupply()).to.equal(0n) + }) + + it('testAllowMintWithPolicies', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + }) +} + +module.exports = DeploymentCommon diff --git a/test/common/ace/PausePolicyCommon.js b/test/common/ace/PausePolicyCommon.js new file mode 100644 index 0000000..9c113a6 --- /dev/null +++ b/test/common/ace/PausePolicyCommon.js @@ -0,0 +1,66 @@ +const { expect } = require('chai') + +/** + * Tests PausePolicy behavior on standard (PolicyEngine-based) contracts. + * + * Required `this` context: + * this.cmtat – compliance token instance + * this.admin – owner / authorized signer + * this.address1 – test address + * this.attacker – unauthorized signer + * this.policyEngine – PolicyEngine instance + * this.pausePolicy – PausePolicy instance + */ +function PausePolicyCommon () { + context('PausePolicy', function () { + it('testAllowMintWhenNotPaused', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + + it('testRejectMintWhenPaused', async function () { + await this.pausePolicy.connect(this.admin).setPausedState(true) + await expect( + this.cmtat.connect(this.admin).mint(this.address1, 100n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowMintAfterUnpausing', async function () { + await this.pausePolicy.connect(this.admin).setPausedState(true) + await this.pausePolicy.connect(this.admin).setPausedState(false) + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + + it('testRejectBurnWhenPaused', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.pausePolicy.connect(this.admin).setPausedState(true) + await expect( + this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testEmitPauseStateChanged', async function () { + await expect(this.pausePolicy.connect(this.admin).setPausedState(true)) + .to.emit(this.pausePolicy, 'PauseStateChanged') + .withArgs(true) + await expect(this.pausePolicy.connect(this.admin).setPausedState(false)) + .to.emit(this.pausePolicy, 'PauseStateChanged') + .withArgs(false) + }) + + it('testRejectSettingSamePauseState', async function () { + await expect( + this.pausePolicy.connect(this.admin).setPausedState(false) + ).to.be.reverted + }) + + it('testOnlyOwnerCanChangePauseState', async function () { + await expect( + this.pausePolicy.connect(this.attacker).setPausedState(true) + ).to.be.revertedWithCustomError(this.pausePolicy, 'OwnableUnauthorizedAccount') + }) + }) +} + +module.exports = PausePolicyCommon diff --git a/test/common/ace/PolicyEngineCommon.js b/test/common/ace/PolicyEngineCommon.js new file mode 100644 index 0000000..43e4596 --- /dev/null +++ b/test/common/ace/PolicyEngineCommon.js @@ -0,0 +1,51 @@ +const { expect } = require('chai') +const { deployPolicyEngine } = require('../../deploymentUtils') + +/** + * Tests PolicyEngine management on standard (Ownable-based) contracts. + * + * Required `this` context: + * this.cmtat – compliance token instance + * this.admin – owner signer + * this.attacker – unauthorized signer + * this.policyEngine – PolicyEngine instance + * this.cmtatAddress – deployed token address + * this.mintSelector – bytes4 selector for mint(address,uint256) + * this.pausePolicyAddress – PausePolicy address + * this.rbacPolicyAddress – RBACPolicy address + */ +function PolicyEngineCommon () { + context('PolicyEngine Management', function () { + it('testOwnerCanAttachNewPolicyEngine', async function () { + const newPolicyEngine = await deployPolicyEngine(true, this.admin.address) + const newAddr = await newPolicyEngine.getAddress() + await this.cmtat.connect(this.admin).attachPolicyEngine(newAddr) + expect(await this.cmtat.getPolicyEngine()).to.equal(newAddr) + }) + + it('testNonOwnerCannotAttachPolicyEngine', async function () { + const newPolicyEngine = await deployPolicyEngine(true, this.attacker.address) + const newAddr = await newPolicyEngine.getAddress() + await expect( + this.cmtat.connect(this.attacker).attachPolicyEngine(newAddr) + ).to.be.revertedWithCustomError(this.cmtat, 'OwnableUnauthorizedAccount') + }) + + it('testListPoliciesForSelector', async function () { + const policies = await this.policyEngine.getPolicies(this.cmtatAddress, this.mintSelector) + expect(policies.length).to.equal(2) + expect(policies[0]).to.equal(this.pausePolicyAddress) + expect(policies[1]).to.equal(this.rbacPolicyAddress) + }) + + it('testRemovePolicy', async function () { + await this.policyEngine.connect(this.admin).removePolicy( + this.cmtatAddress, this.mintSelector, this.pausePolicyAddress + ) + const policies = await this.policyEngine.getPolicies(this.cmtatAddress, this.mintSelector) + expect(policies.length).to.equal(1) + }) + }) +} + +module.exports = PolicyEngineCommon diff --git a/test/common/ace/RBACPolicyCommon.js b/test/common/ace/RBACPolicyCommon.js new file mode 100644 index 0000000..2df2f3a --- /dev/null +++ b/test/common/ace/RBACPolicyCommon.js @@ -0,0 +1,102 @@ +const { expect } = require('chai') +const { MINTER_ROLE, BURNER_ROLE } = require('../../deploymentUtils') + +/** + * Tests RoleBasedAccessControlPolicy behavior on standard (PolicyEngine-based) contracts. + * + * Required `this` context: + * this.cmtat – compliance token instance + * this.admin – owner / authorized signer (has MINTER_ROLE + BURNER_ROLE) + * this.address1 – test address + * this.address2 – test address + * this.attacker – unauthorized signer + * this.policyEngine – PolicyEngine instance + * this.rbacPolicy – RoleBasedAccessControlPolicy instance + * this.mintSelector – bytes4 selector for mint(address,uint256) + * this.burnSelector – bytes4 selector for burn(address,uint256) + */ +function RBACPolicyCommon () { + context('RoleBasedAccessControlPolicy', function () { + it('testAllowMintByMinterRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) + }) + + it('testRejectMintWithoutMinterRole', async function () { + await expect( + this.cmtat.connect(this.address1).mint(this.address2, 100n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowMintAfterGrantingMinterRole', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) + await this.cmtat.connect(this.address1).mint(this.address2, 50n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) + }) + + it('testRejectMintAfterRevokingMinterRole', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) + await this.rbacPolicy.connect(this.admin).revokeRole(MINTER_ROLE, this.address1) + await expect( + this.cmtat.connect(this.address1).mint(this.admin, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowBurnByBurnerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 50n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) + }) + + it('testRejectBurnWithoutBurnerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await expect( + this.cmtat.connect(this.address1)['burn(address,uint256)'](this.address1, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testMultipleRolesForDifferentOperations', async function () { + // Grant MINTER_ROLE to address1 (but not BURNER_ROLE) + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) + await this.cmtat.connect(this.address1).mint(this.address2, 100n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(100n) + // address1 cannot burn + await expect( + this.cmtat.connect(this.address1)['burn(address,uint256)'](this.address2, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testHasAllowedRole', async function () { + expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.admin)).to.equal(true) + expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.address1)).to.equal(false) + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) + expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.address1)).to.equal(true) + }) + + it('testEmitOperationAllowanceEvents', async function () { + const setNameSelector = this.cmtat.interface.getFunction('setName').selector + const testRole = ethers.keccak256(ethers.toUtf8Bytes('TEST_ROLE')) + await expect(this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(setNameSelector, testRole)) + .to.emit(this.rbacPolicy, 'OperationAllowanceGrantedToRole') + .withArgs(setNameSelector, testRole) + await expect(this.rbacPolicy.connect(this.admin).removeOperationAllowanceFromRole(setNameSelector, testRole)) + .to.emit(this.rbacPolicy, 'OperationAllowanceRemovedFromRole') + .withArgs(setNameSelector, testRole) + }) + + it('testRejectDuplicateOperationAllowanceGrant', async function () { + await expect( + this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) + ).to.be.reverted + }) + + it('testOnlyOwnerCanManageOperationAllowances', async function () { + const testRole = ethers.keccak256(ethers.toUtf8Bytes('TEST_ROLE')) + await expect( + this.rbacPolicy.connect(this.attacker).grantOperationAllowanceToRole(this.mintSelector, testRole) + ).to.be.revertedWithCustomError(this.rbacPolicy, 'OwnableUnauthorizedAccount') + }) + }) +} + +module.exports = RBACPolicyCommon diff --git a/test/deployment/liteStandaloneDeployment.test.js b/test/deployment/liteStandaloneDeployment.test.js new file mode 100644 index 0000000..3907247 --- /dev/null +++ b/test/deployment/liteStandaloneDeployment.test.js @@ -0,0 +1,39 @@ +const { expect } = require('chai') +const { + fixture, + loadFixture, + deployPolicyEngine, + deployCCTLiteStandalone +} = require('../deploymentUtils') + +// Reuse CMTAT common modules +const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon') +const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon') +const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon') +const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') +const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') +const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') + +describe('ComplianceTokenCMTATLiteStandalone', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + const policyEngine = await deployPolicyEngine(true, this.admin.address) + this.cmtat = await deployCCTLiteStandalone( + this._.address, + this.admin.address, + await policyEngine.getAddress() + ) + this.policyEngine = policyEngine + this.erc1404 = true + }) + + // Core CMTAT commons + PauseModuleCommon() + ERC20MintModuleCommon() + ERC20BurnModuleCommon() + ERC20BaseModuleCommon() + EnforcementModuleCommon() + + // Extensions + ERC20EnforcementModuleCommon() +}) diff --git a/test/deployment/liteUUPSUpgradeableDeployment.test.js b/test/deployment/liteUUPSUpgradeableDeployment.test.js new file mode 100644 index 0000000..3421520 --- /dev/null +++ b/test/deployment/liteUUPSUpgradeableDeployment.test.js @@ -0,0 +1,106 @@ +const { ethers, upgrades } = require('hardhat') +const { expect } = require('chai') +const { + fixture, + loadFixture, + deployPolicyEngine, + deployCCTLiteUUPSUpgradeable, + DEFAULT_ADMIN_ROLE +} = require('../deploymentUtils') + +// Reuse CMTAT common modules +const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon') +const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon') +const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon') +const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') +const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') +const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') + +const PROXY_UPGRADE_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PROXY_UPGRADE_ROLE')) + +describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + const policyEngine = await deployPolicyEngine(true, this.admin.address) + this.cmtat = await deployCCTLiteUUPSUpgradeable( + this._.address, + this.admin.address, + await policyEngine.getAddress() + ) + this.policyEngine = policyEngine + this.erc1404 = true + }) + + // UUPS proxy-specific + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + const policyEngineAddress = await this.policyEngine.getAddress() + await expect( + this.cmtat.connect(this.admin).initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], + policyEngineAddress + ) + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') + }) + }) + + context('UUPS Upgrade', function () { + it('testAdminWithRoleCanUpgrade', async function () { + // Grant PROXY_UPGRADE_ROLE to admin + await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address) + + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable', this.admin) + await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + }) + + it('testCannotUpgradeWithoutProxyUpgradeRole', async function () { + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable', this.attacker) + await expect( + upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + ).to.be.revertedWithCustomError(this.cmtat, 'AccessControlUnauthorizedAccount') + }) + + it('testStatePreservedAfterUpgrade', async function () { + // Mint some tokens before upgrade + await this.cmtat.connect(this.admin).mint(this.address1.address, 100n) + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n) + + // Grant upgrade role and upgrade + await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address) + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable', this.admin) + const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + + // Verify state preserved + expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n) + expect(await upgraded.name()).to.equal('CMTA Token') + expect(await upgraded.symbol()).to.equal('CMTAT') + }) + }) + + // Core CMTAT commons + PauseModuleCommon() + ERC20MintModuleCommon() + ERC20BurnModuleCommon() + ERC20BaseModuleCommon() + EnforcementModuleCommon() + + // Extensions + ERC20EnforcementModuleCommon() +}) diff --git a/test/deployment/liteUpgradeableDeployment.test.js b/test/deployment/liteUpgradeableDeployment.test.js new file mode 100644 index 0000000..03bac9e --- /dev/null +++ b/test/deployment/liteUpgradeableDeployment.test.js @@ -0,0 +1,55 @@ +const { ethers, upgrades } = require('hardhat') +const { expect } = require('chai') +const { + fixture, + loadFixture, + deployPolicyEngine, + deployCCTLiteUpgradeable +} = require('../deploymentUtils') + +// Reuse CMTAT common modules +const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon') +const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon') +const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon') +const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') +const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') +const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') + +describe('ComplianceTokenCMTATLiteUpgradeable', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + const policyEngine = await deployPolicyEngine(true, this.admin.address) + this.cmtat = await deployCCTLiteUpgradeable( + this._.address, + this.admin.address, + await policyEngine.getAddress() + ) + this.policyEngine = policyEngine + this.erc1404 = true + }) + + // Proxy-specific + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + const policyEngineAddress = await this.policyEngine.getAddress() + await expect( + this.cmtat.connect(this.admin).initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], + policyEngineAddress + ) + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') + }) + }) + + // Core CMTAT commons + PauseModuleCommon() + ERC20MintModuleCommon() + ERC20BurnModuleCommon() + ERC20BaseModuleCommon() + EnforcementModuleCommon() + + // Extensions + ERC20EnforcementModuleCommon() +}) diff --git a/test/deployment/standaloneDeployment.test.js b/test/deployment/standaloneDeployment.test.js new file mode 100644 index 0000000..2458aa5 --- /dev/null +++ b/test/deployment/standaloneDeployment.test.js @@ -0,0 +1,67 @@ +const { + fixture, + loadFixture, + MINTER_ROLE, + BURNER_ROLE, + deployPolicyEngine, + deployPausePolicy, + deployRBACPolicy, + deployCCTStandalone +} = require('../deploymentUtils') + +// ACE-specific common modules +const DeploymentCommon = require('../common/ace/DeploymentCommon') +const PausePolicyCommon = require('../common/ace/PausePolicyCommon') +const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') +const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') +const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') + +describe('ComplianceTokenCMTATStandalone', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + + // Deploy PolicyEngine (defaultAllow = true) + this.policyEngine = await deployPolicyEngine(true, this.admin.address) + this.policyEngineAddress = await this.policyEngine.getAddress() + + // Deploy PausePolicy + this.pausePolicy = await deployPausePolicy(this.policyEngineAddress, this.admin.address, false) + this.pausePolicyAddress = await this.pausePolicy.getAddress() + + // Deploy RoleBasedAccessControlPolicy + this.rbacPolicy = await deployRBACPolicy(this.policyEngineAddress, this.admin.address) + this.rbacPolicyAddress = await this.rbacPolicy.getAddress() + + // Deploy ComplianceToken + this.cmtat = await deployCCTStandalone( + this._.address, + this.admin.address, + this.policyEngineAddress + ) + this.cmtatAddress = await this.cmtat.getAddress() + + // Get function selectors + this.mintSelector = this.cmtat.interface.getFunction('mint(address,uint256)').selector + this.burnSelector = this.cmtat.interface.getFunction('burn(address,uint256)').selector + + // Add PausePolicy + RBAC to PolicyEngine for mint and burn + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.rbacPolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.rbacPolicyAddress, []) + + // Grant operation allowances on RBAC policy + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.burnSelector, BURNER_ROLE) + + // Grant roles to admin + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.admin.address) + await this.rbacPolicy.connect(this.admin).grantRole(BURNER_ROLE, this.admin.address) + }) + + DeploymentCommon() + PausePolicyCommon() + RBACPolicyCommon() + CombinedPolicyCommon() + PolicyEngineCommon() +}) diff --git a/test/deployment/upgradeableDeployment.test.js b/test/deployment/upgradeableDeployment.test.js new file mode 100644 index 0000000..89d8728 --- /dev/null +++ b/test/deployment/upgradeableDeployment.test.js @@ -0,0 +1,83 @@ +const { ethers } = require('hardhat') +const { expect } = require('chai') +const { + fixture, + loadFixture, + MINTER_ROLE, + BURNER_ROLE, + deployPolicyEngine, + deployPausePolicy, + deployRBACPolicy, + deployCCTUpgradeable +} = require('../deploymentUtils') + +// ACE-specific common modules +const DeploymentCommon = require('../common/ace/DeploymentCommon') +const PausePolicyCommon = require('../common/ace/PausePolicyCommon') +const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') +const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') +const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') + +describe('ComplianceTokenCMTATUpgradeable', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + + // Deploy PolicyEngine (defaultAllow = true) + this.policyEngine = await deployPolicyEngine(true, this.admin.address) + this.policyEngineAddress = await this.policyEngine.getAddress() + + // Deploy PausePolicy + this.pausePolicy = await deployPausePolicy(this.policyEngineAddress, this.admin.address, false) + this.pausePolicyAddress = await this.pausePolicy.getAddress() + + // Deploy RoleBasedAccessControlPolicy + this.rbacPolicy = await deployRBACPolicy(this.policyEngineAddress, this.admin.address) + this.rbacPolicyAddress = await this.rbacPolicy.getAddress() + + // Deploy ComplianceToken (upgradeable proxy) + this.cmtat = await deployCCTUpgradeable( + this._.address, + this.admin.address, + this.policyEngineAddress + ) + this.cmtatAddress = await this.cmtat.getAddress() + + // Get function selectors + this.mintSelector = this.cmtat.interface.getFunction('mint(address,uint256)').selector + this.burnSelector = this.cmtat.interface.getFunction('burn(address,uint256)').selector + + // Add PausePolicy + RBAC to PolicyEngine for mint and burn + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.rbacPolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.rbacPolicyAddress, []) + + // Grant operation allowances on RBAC policy + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.burnSelector, BURNER_ROLE) + + // Grant roles to admin + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.admin.address) + await this.rbacPolicy.connect(this.admin).grantRole(BURNER_ROLE, this.admin.address) + }) + + // Proxy-specific + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + await expect( + this.cmtat.connect(this.admin).initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], + this.policyEngineAddress + ) + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') + }) + }) + + DeploymentCommon() + PausePolicyCommon() + RBACPolicyCommon() + CombinedPolicyCommon() + PolicyEngineCommon() +}) diff --git a/test/deployment/uupsUpgradeableDeployment.test.js b/test/deployment/uupsUpgradeableDeployment.test.js new file mode 100644 index 0000000..1b2f71b --- /dev/null +++ b/test/deployment/uupsUpgradeableDeployment.test.js @@ -0,0 +1,127 @@ +const { ethers, upgrades } = require('hardhat') +const { expect } = require('chai') +const { + fixture, + loadFixture, + MINTER_ROLE, + BURNER_ROLE, + deployPolicyEngine, + deployPausePolicy, + deployRBACPolicy, + deployCCTUUPSUpgradeable +} = require('../deploymentUtils') + +// ACE-specific common modules +const DeploymentCommon = require('../common/ace/DeploymentCommon') +const PausePolicyCommon = require('../common/ace/PausePolicyCommon') +const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') +const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') +const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') + +describe('ComplianceTokenCMTATUUPSUpgradeable', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + + // Deploy PolicyEngine (defaultAllow = true) + this.policyEngine = await deployPolicyEngine(true, this.admin.address) + this.policyEngineAddress = await this.policyEngine.getAddress() + + // Deploy PausePolicy + this.pausePolicy = await deployPausePolicy(this.policyEngineAddress, this.admin.address, false) + this.pausePolicyAddress = await this.pausePolicy.getAddress() + + // Deploy RoleBasedAccessControlPolicy + this.rbacPolicy = await deployRBACPolicy(this.policyEngineAddress, this.admin.address) + this.rbacPolicyAddress = await this.rbacPolicy.getAddress() + + // Deploy ComplianceToken (UUPS proxy) + this.cmtat = await deployCCTUUPSUpgradeable( + this._.address, + this.admin.address, + this.policyEngineAddress + ) + this.cmtatAddress = await this.cmtat.getAddress() + + // Get function selectors + this.mintSelector = this.cmtat.interface.getFunction('mint(address,uint256)').selector + this.burnSelector = this.cmtat.interface.getFunction('burn(address,uint256)').selector + + // Add PausePolicy + RBAC to PolicyEngine for mint and burn + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.rbacPolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.pausePolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.rbacPolicyAddress, []) + + // Grant operation allowances on RBAC policy + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.burnSelector, BURNER_ROLE) + + // Grant roles to admin + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.admin.address) + await this.rbacPolicy.connect(this.admin).grantRole(BURNER_ROLE, this.admin.address) + }) + + // UUPS proxy-specific + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + await expect( + this.cmtat.connect(this.admin).initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], + this.policyEngineAddress + ) + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') + }) + }) + + context('UUPS Upgrade', function () { + it('testOwnerCanUpgrade', async function () { + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable', this.admin) + await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + }) + + it('testNonOwnerCannotUpgrade', async function () { + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable', this.attacker) + await expect( + upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + ).to.be.revertedWithCustomError(this.cmtat, 'OwnableUnauthorizedAccount') + }) + + it('testStatePreservedAfterUpgrade', async function () { + // Mint some tokens before upgrade + await this.cmtat.connect(this.admin).mint(this.address1.address, 100n) + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n) + + // Upgrade + const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable', this.admin) + const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + constructorArgs: [this._.address], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + }) + + // Verify state preserved + expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n) + expect(await upgraded.name()).to.equal('CMTA Token') + expect(await upgraded.symbol()).to.equal('CMTAT') + }) + }) + + DeploymentCommon() + PausePolicyCommon() + RBACPolicyCommon() + CombinedPolicyCommon() + PolicyEngineCommon() +}) diff --git a/test/deploymentUtils.js b/test/deploymentUtils.js new file mode 100644 index 0000000..b32a31d --- /dev/null +++ b/test/deploymentUtils.js @@ -0,0 +1,223 @@ +const { ethers, upgrades } = require('hardhat') +const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') + +const ZERO_ADDRESS = ethers.ZeroAddress +const DEPLOYMENT_DECIMAL = 0n +const TERMS = [ + 'doc1', + 'https://example.com/doc1', + '0x6a12eff2f559a5e529ca2c563c53194f6463ed5c61d1ae8f8731137467ab0279' +] + +// Role constants (match CMTAT convention) +const MINTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('MINTER_ROLE')) +const BURNER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_ROLE')) +const BURNER_FROM_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_FROM_ROLE')) +const BURNER_SELF_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_SELF_ROLE')) +const PAUSER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PAUSER_ROLE')) +const ENFORCER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('ENFORCER_ROLE')) +const ERC20ENFORCER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('ERC20ENFORCER_ROLE')) +const DEFAULT_ADMIN_ROLE = '0x0000000000000000000000000000000000000000000000000000000000000000' + +/** + * Fixture matching CMTAT signer convention + */ +async function fixture () { + const [ + _, + admin, + address1, + address2, + address3, + deployerAddress, + fakeRuleEngine, + ruleEngine, + attacker + ] = await ethers.getSigners() + return { + _, + admin, + address1, + address2, + address3, + deployerAddress, + fakeRuleEngine, + ruleEngine, + attacker + } +} + +/* ======== ACE Infrastructure Deploy Helpers ======== */ + +async function deployPolicyEngine (defaultAllow, initialOwner) { + const Factory = await ethers.getContractFactory('PolicyEngine') + const policyEngine = await upgrades.deployProxy( + Factory, + [defaultAllow, initialOwner], + { initializer: 'initialize', unsafeAllow: ['constructor'], silenceWarnings: true } + ) + return policyEngine +} + +async function deployPausePolicy (policyEngineAddress, ownerAddress, initiallyPaused = false) { + const abiCoder = ethers.AbiCoder.defaultAbiCoder() + const configParams = abiCoder.encode(['bool'], [initiallyPaused]) + const Factory = await ethers.getContractFactory('PausePolicy') + const pausePolicy = await upgrades.deployProxy( + Factory, + [policyEngineAddress, ownerAddress, configParams], + { initializer: 'initialize', unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], silenceWarnings: true } + ) + return pausePolicy +} + +async function deployRBACPolicy (policyEngineAddress, ownerAddress) { + const Factory = await ethers.getContractFactory('RoleBasedAccessControlPolicy') + const rbacPolicy = await upgrades.deployProxy( + Factory, + [policyEngineAddress, ownerAddress, '0x'], + { initializer: 'initialize', unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], silenceWarnings: true } + ) + return rbacPolicy +} + +/* ======== Standard Contract Deploy Helpers ======== */ + +async function deployCCTStandalone (forwarder, admin, policyEngineAddress) { + const cmtat = await ethers.deployContract( + 'ComplianceTokenCMTATStandalone', + [ + forwarder, + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ] + ) + return cmtat +} + +async function deployCCTUpgradeable (forwarder, admin, policyEngineAddress) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUpgradeable') + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ], + { + initializer: 'initialize', + constructorArgs: [forwarder], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true + } + ) + return cmtat +} + +/* ======== Lite Contract Deploy Helpers ======== */ + +async function deployCCTLiteStandalone (forwarder, admin, policyEngineAddress) { + const cmtat = await ethers.deployContract( + 'ComplianceTokenCMTATLiteStandalone', + [ + forwarder, + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ] + ) + return cmtat +} + +async function deployCCTLiteUpgradeable (forwarder, admin, policyEngineAddress) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATLiteUpgradeable') + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ], + { + initializer: 'initialize', + constructorArgs: [forwarder, admin, ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], ['CMTAT_ISIN', TERMS, 'CMTAT_info'], policyEngineAddress], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true + } + ) + return cmtat +} + +/* ======== UUPS Contract Deploy Helpers ======== */ + +async function deployCCTUUPSUpgradeable (forwarder, admin, policyEngineAddress) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable') + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ], + { + initializer: 'initialize', + constructorArgs: [forwarder], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + } + ) + return cmtat +} + +async function deployCCTLiteUUPSUpgradeable (forwarder, admin, policyEngineAddress) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable') + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress + ], + { + initializer: 'initialize', + constructorArgs: [forwarder], + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups' + } + ) + return cmtat +} + +module.exports = { + ZERO_ADDRESS, + DEPLOYMENT_DECIMAL, + TERMS, + MINTER_ROLE, + BURNER_ROLE, + BURNER_FROM_ROLE, + BURNER_SELF_ROLE, + PAUSER_ROLE, + ENFORCER_ROLE, + ERC20ENFORCER_ROLE, + DEFAULT_ADMIN_ROLE, + fixture, + loadFixture, + deployPolicyEngine, + deployPausePolicy, + deployRBACPolicy, + deployCCTStandalone, + deployCCTUpgradeable, + deployCCTUUPSUpgradeable, + deployCCTLiteStandalone, + deployCCTLiteUpgradeable, + deployCCTLiteUUPSUpgradeable +} diff --git a/test/standardDeployment.test.js b/test/standardDeployment.test.js deleted file mode 100644 index 9eef771..0000000 --- a/test/standardDeployment.test.js +++ /dev/null @@ -1,22 +0,0 @@ -const {ethers} = require("hardhat"); -const { expect } = require('chai') -const { etherAddresses, deployComplianceTokenCMTATStandalone } = require("./testUtils.js"); -const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') - - -describe("ComplianceTokenCMTAT Upgradable Deployment", () => { - - it("should deploy the ComplianceTokenCMTAT standalone contract", async () => { - /*Object.assign(this, await loadFixture(etherAddresses)) - const cmtat = await deployComplianceTokenCMTATStandalone( - this.forwarder.address, - this.admin.address, - this.deployerAddress - ); - - expect(await cmtat.name()).to.equal("Security Token"); - expect(await cmtat.symbol()).to.equal("ST"); - expect(await cmtat.getAdmin()).to.equal(this.admin.address); - */ - }); -}) \ No newline at end of file diff --git a/test/standardDeploymentUpgradeable.test.js b/test/standardDeploymentUpgradeable.test.js deleted file mode 100644 index 4ad0bcd..0000000 --- a/test/standardDeploymentUpgradeable.test.js +++ /dev/null @@ -1,34 +0,0 @@ -const {ethers, upgrades} = require("hardhat"); -const { expect } = require('chai') -const { etherAddresses, deployComplianceTokenCMTATUpgradeable, deployPolicyEngine } = require("./testUtils.js"); -const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') - -describe("ComplianceTokenCMTAT Upgradeable Deployment", () => { - - it("should deploy the ComplianceTokenCMTAT standalone contract", async () => { - Object.assign(this, await loadFixture(etherAddresses)) - /*const cmtat = await deployComplianceTokenCMTATUpgradeable( - this.forwarder.address, - this.admin.address, - this.admin.address - ); - expect(await cmtat.name()).to.equal("Security Token"); - expect(await cmtat.symbol()).to.equal("ST"); - expect(await cmtat.getCCIPAdmin()).to.equal(this.admin.address);*/ - }); - - it("should deploy PolicyEngine and ComplianceTokenCMTAT with policy engine configured", async () => { - Object.assign(this, await loadFixture(etherAddresses)) - const policyEngine = await deployPolicyEngine(true, this.admin.address); - // expect(await policyEngine.getAddress()).to.be.properAddress; - - // Deploy ComplianceTokenCMTAT with the PolicyEngine - const cmtat = await deployComplianceTokenCMTATUpgradeable(this.forwarder.address, this.admin.address, await policyEngine.getAddress()) - - await cmtat.connect(this.admin).attach(policyEngine) - expect(await cmtat.name()).to.equal("Security Token"); - expect(await cmtat.symbol()).to.equal("ST"); - expect(await cmtat.getPolicyEngine()).to.equal(await policyEngine.getAddress()); - }); -}) - diff --git a/test/testUtils.js b/test/testUtils.js index eeb916d..9e8d279 100644 --- a/test/testUtils.js +++ b/test/testUtils.js @@ -1,5 +1,23 @@ const {ethers, upgrades } = require("hardhat"); +const ZERO_ADDRESS = ethers.ZeroAddress; +const DEPLOYMENT_DECIMAL = 0; +const TERMS = { + name: "Token Terms v2", + uri: "https://cmta.ch/standards/cmta-token-cmtat", + documentHash: ethers.keccak256(ethers.toUtf8Bytes("terms-v2")) +}; +const ERC20_ATTRIBUTES = ["Security Token", "ST", DEPLOYMENT_DECIMAL]; +const EXTRA_INFO_ATTRIBUTES_STANDALONE = ["1234567890", TERMS, "ComplianceTokenCMTATStandalone smart contract"]; +const EXTRA_INFO_ATTRIBUTES_UPGRADEABLE = ["1234567890", TERMS, "ComplianceTokenCMTATUpgradeable smart contract"]; +const EXTRA_INFO_ATTRIBUTES_LITE_STANDALONE = ["1234567890", TERMS, "ComplianceTokenCMTATLiteStandalone smart contract"]; +const EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE = ["1234567890", TERMS, "ComplianceTokenCMTATLiteUpgradeable smart contract"]; + +// Role constants matching CMTAT convention +const MINTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes("MINTER_ROLE")); +const BURNER_ROLE = ethers.keccak256(ethers.toUtf8Bytes("BURNER_ROLE")); +const DEFAULT_ADMIN_ROLE = "0x0000000000000000000000000000000000000000000000000000000000000000"; + async function etherAddresses () { const [ admin, @@ -25,98 +43,152 @@ async function etherAddresses () { } } +/** + * Deploy PolicyEngine through upgrades.deployProxy (ERC1967 proxy pattern) + */ +async function deployPolicyEngine(defaultAllow, initialOwner) { + const PolicyEngineFactory = await ethers.getContractFactory("PolicyEngine"); + const policyEngine = await upgrades.deployProxy( + PolicyEngineFactory, + [defaultAllow, initialOwner], + { + initializer: 'initialize', + unsafeAllow: ['constructor'] + } + ); + return policyEngine; +} + +/** + * Deploy PausePolicy through upgrades.deployProxy + */ +async function deployPausePolicy(policyEngineAddress, ownerAddress, initiallyPaused = false) { + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); + const configParams = abiCoder.encode(["bool"], [initiallyPaused]); + const PausePolicyFactory = await ethers.getContractFactory("PausePolicy"); + const pausePolicy = await upgrades.deployProxy( + PausePolicyFactory, + [policyEngineAddress, ownerAddress, configParams], + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'] + } + ); + return pausePolicy; +} -async function deployComplianceTokenCMTATStandalone (forwarderAddress, deployerAddress, policyEngine) { - const erc20Attributes = [ - "Security Token", // name - "ST", // symbol - 0 // decimalsIrrevocable (legacy) - ] - const terms = { - name: "Token Terms v2", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: ethers.keccak256(ethers.toUtf8Bytes("terms-v2")) - } - const extraInformationAttributes = [ - "1234567890", // ISIN or identifier as tokenId - terms, - "ComplianceTokenCMTATStandalone smart contract" // information string - ] - const ComplianceTokenCMTATStandalone = await ethers.deployContract( - "ComplianceTokenCMTATStandalone", +/** + * Deploy RoleBasedAccessControlPolicy through upgrades.deployProxy + */ +async function deployRBACPolicy(policyEngineAddress, ownerAddress) { + const RBACFactory = await ethers.getContractFactory("RoleBasedAccessControlPolicy"); + const rbacPolicy = await upgrades.deployProxy( + RBACFactory, + [policyEngineAddress, ownerAddress, "0x"], + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'] + } + ); + return rbacPolicy; +} + +/** + * Deploy ComplianceTokenCMTATStandalone (non-upgradeable) + */ +async function deployComplianceTokenCMTATStandalone(forwarderAddress, adminAddress, policyEngineAddress) { + const cmtat = await ethers.deployContract( + "ComplianceTokenCMTATStandalone", [ forwarderAddress, - erc20Attributes, - extraInformationAttributes, - policyEngine - ], - deployerAddress - ) - - return ComplianceTokenCMTATStandalone; -} + adminAddress, + ERC20_ATTRIBUTES, + EXTRA_INFO_ATTRIBUTES_STANDALONE, + policyEngineAddress + ] + ); + return cmtat; +} -async function deployComplianceTokenCMTATUpgradeable (forwarderAddress, deployerAddress, policyEngine) { +/** + * Deploy ComplianceTokenCMTATUpgradeable (proxy) + */ +async function deployComplianceTokenCMTATUpgradeable(forwarderAddress, adminAddress, policyEngineAddress) { const ETHERS_CMTAT_PROXY_FACTORY = await ethers.getContractFactory( 'ComplianceTokenCMTATUpgradeable' - ) - const erc20Attributes = [ - "Security Token", // name - "ST", // symbol - 0 // decimalsIrrevocable (legacy) - ] - const terms = { - name: "Token Terms v2", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: ethers.keccak256(ethers.toUtf8Bytes("terms-v2")) - } - const extraInformationAttributes = [ - "1234567890", // ISIN or identifier as tokenId - terms, - "ComplianceTokenCMTATUpgradeable smart contract" // information string - ] - const ComplianceTokenCMTATUpgradeable = await upgrades.deployProxy( - ETHERS_CMTAT_PROXY_FACTORY, + ); + const cmtat = await upgrades.deployProxy( + ETHERS_CMTAT_PROXY_FACTORY, [ - erc20Attributes, - extraInformationAttributes, - policyEngine // policyEngine + adminAddress, + ERC20_ATTRIBUTES, + EXTRA_INFO_ATTRIBUTES_UPGRADEABLE, + policyEngineAddress ], { initializer: 'initialize', constructorArgs: [forwarderAddress], - from: deployerAddress, - unsafeAllow: ['missing-initializer','missing-initializer', 'constructor'] + unsafeAllow: ['missing-initializer', 'constructor'] } - ) - - return ComplianceTokenCMTATUpgradeable; + ); + return cmtat; } /** - * Deploy PolicyEngine through upgrades.deployProxy (ERC1967 proxy pattern) - * @param {boolean} defaultAllow - The default policy result (true = allow, false = reject) - * @param {string} initialOwner - The address of the initial owner - * @returns {Promise} The deployed PolicyEngine proxy instance + * Deploy ComplianceTokenCMTATLiteStandalone (non-upgradeable) */ -async function deployPolicyEngine(defaultAllow, initialOwner) { - const PolicyEngineFactory = await ethers.getContractFactory("PolicyEngine"); +async function deployComplianceTokenCMTATLiteStandalone(forwarderAddress, adminAddress, policyEngineAddress) { + const cmtat = await ethers.deployContract( + "ComplianceTokenCMTATLiteStandalone", + [ + forwarderAddress, + adminAddress, + ERC20_ATTRIBUTES, + EXTRA_INFO_ATTRIBUTES_LITE_STANDALONE, + policyEngineAddress + ] + ); + return cmtat; +} - const policyEngine = await upgrades.deployProxy( - PolicyEngineFactory, - [defaultAllow, initialOwner], +/** + * Deploy ComplianceTokenCMTATLiteUpgradeable (proxy) + */ +async function deployComplianceTokenCMTATLiteUpgradeable(forwarderAddress, adminAddress, policyEngineAddress) { + const ETHERS_CMTAT_PROXY_FACTORY = await ethers.getContractFactory( + 'ComplianceTokenCMTATLiteUpgradeable' + ); + const cmtat = await upgrades.deployProxy( + ETHERS_CMTAT_PROXY_FACTORY, + [ + adminAddress, + ERC20_ATTRIBUTES, + EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE, + policyEngineAddress + ], { initializer: 'initialize', - unsafeAllow: ['constructor'] + constructorArgs: [forwarderAddress, adminAddress, ERC20_ATTRIBUTES, EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE, policyEngineAddress], + unsafeAllow: ['missing-initializer', 'constructor'] } ); - - return policyEngine; + return cmtat; } module.exports = { + ZERO_ADDRESS, + MINTER_ROLE, + BURNER_ROLE, + DEFAULT_ADMIN_ROLE, + DEPLOYMENT_DECIMAL, + TERMS, + ERC20_ATTRIBUTES, etherAddresses, + deployPolicyEngine, + deployPausePolicy, + deployRBACPolicy, deployComplianceTokenCMTATStandalone, deployComplianceTokenCMTATUpgradeable, - deployPolicyEngine + deployComplianceTokenCMTATLiteStandalone, + deployComplianceTokenCMTATLiteUpgradeable, }; \ No newline at end of file From c21a0166c20064f18c0b0abdc75ebb42f25d0009 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Mon, 23 Mar 2026 15:29:53 +0000 Subject: [PATCH 16/57] add deployment scripts for other token versions, add hardhat-foundry to integrate better with ACE repo --- .gitignore | 7 + README.md | 47 + cache_hardhat/solidity-files-cache.json | 3988 +++ cache_hardhat/validations.json | 22676 ++++++++++++++++ .../ComplianceTokenCMTATLiteStandalone.sol | 6 +- ...omplianceTokenCMTATLiteUUPSUpgradeable.sol | 4 +- .../ComplianceTokenCMTATLiteUpgradeable.sol | 6 +- .../ComplianceTokenCMTATStandalone.sol | 6 +- .../ComplianceTokenCMTATUUPSUpgradeable.sol | 4 +- .../ComplianceTokenCMTATUpgradeable.sol | 4 +- .../MintBurnExtractor.sol | 54 + .../PolicyProtectedUpgradeable.sol | 4 +- .../TransferValidationPolicy.sol | 154 + contracts/modules/demo/DemoImports.sol | 13 + .../modules/lite/CCTCMTATBasePolicyEngine.sol | 2 +- .../lite/ValidationModulePolicyEngine.sol | 2 +- contracts/test/PolicyEngineImport.sol | 8 - foundry.toml | 7 + hardhat.config.js | 1 + package-lock.json | 23 + package.json | 4 +- remappings.txt | 3 + reports/.gitkeep | 0 scripts/demo.js | 355 + .../deploy-lite-standalone.js} | 46 +- scripts/lite/deploy-lite-upgradeable.js | 75 + scripts/lite/deploy-lite-uups.js | 76 + scripts/slither.sh | 23 + .../deploy-standard-standalone.js} | 47 +- .../standard/deploy-standard-upgradeable.js | 75 + scripts/standard/deploy-standard-uups.js | 76 + slither.config.json | 5 + 32 files changed, 27727 insertions(+), 74 deletions(-) create mode 100644 cache_hardhat/solidity-files-cache.json create mode 100644 cache_hardhat/validations.json rename contracts/deployment/{ => lite}/ComplianceTokenCMTATLiteStandalone.sol (82%) rename contracts/deployment/{ => lite}/ComplianceTokenCMTATLiteUUPSUpgradeable.sol (87%) rename contracts/deployment/{ => lite}/ComplianceTokenCMTATLiteUpgradeable.sol (80%) rename contracts/deployment/{ => standard}/ComplianceTokenCMTATStandalone.sol (82%) rename contracts/deployment/{ => standard}/ComplianceTokenCMTATUUPSUpgradeable.sol (86%) rename contracts/deployment/{ => standard}/ComplianceTokenCMTATUpgradeable.sol (77%) create mode 100644 contracts/modules/chainlink-ace-modified/MintBurnExtractor.sol create mode 100644 contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol create mode 100644 contracts/modules/demo/DemoImports.sol delete mode 100644 contracts/test/PolicyEngineImport.sol create mode 100644 foundry.toml create mode 100644 remappings.txt create mode 100644 reports/.gitkeep create mode 100644 scripts/demo.js rename scripts/{deploy-lite.js => lite/deploy-lite-standalone.js} (52%) create mode 100644 scripts/lite/deploy-lite-upgradeable.js create mode 100644 scripts/lite/deploy-lite-uups.js create mode 100755 scripts/slither.sh rename scripts/{deploy-standard.js => standard/deploy-standard-standalone.js} (51%) create mode 100644 scripts/standard/deploy-standard-upgradeable.js create mode 100644 scripts/standard/deploy-standard-uups.js create mode 100644 slither.config.json diff --git a/.gitignore b/.gitignore index 3db350f..c710027 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,10 @@ lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json +# Slither reports (keep directory via .gitkeep) +reports/* +!reports/.gitkeep + # Runtime data pids *.pid @@ -41,6 +45,9 @@ build/Release node_modules/ jspm_packages/ +# Python virtual environment +cct/ + # Snowpack dependency directory (https://snowpack.dev/) web_modules/ diff --git a/README.md b/README.md index ea9fbae..7ee39d2 100644 --- a/README.md +++ b/README.md @@ -117,4 +117,51 @@ You can use example scripts to deploy, e.g. for local Hardhat Network deployment ```shell npx hardhat run scripts/{script_name} +``` + +# Static Analysis (Slither) + +[Slither](https://github.com/crytic/slither) is a Solidity static analysis framework used to find vulnerabilities and code quality issues. + +## Setup + +Create and activate a Python virtual environment called `cct`: + +```shell +python3 -m venv cct +chmod +x cct/bin/activate +source cct/bin/activate +``` + +Install Slither inside the virtual environment: + +```shell +pip install slither-analyzer +``` + +Verify the installation: + +```shell +slither --version +``` + +## Running + +Make sure the virtual environment is active and contracts compile successfully before running: + +```shell +source cct/bin/activate +npm run slither +``` + +This generates timestamped reports in the `reports/` directory: +- **JSON** — `reports/slither-report-.json` +- **Markdown** — `reports/slither-report-.md` + +## Deactivating the virtual environment + +When done, deactivate the virtual environment: + +```shell +deactivate ``` \ No newline at end of file diff --git a/cache_hardhat/solidity-files-cache.json b/cache_hardhat/solidity-files-cache.json new file mode 100644 index 0000000..4cfb516 --- /dev/null +++ b/cache_hardhat/solidity-files-cache.json @@ -0,0 +1,3988 @@ +{ + "_format": "hh-sol-cache-2", + "files": { + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol": { + "lastModificationDate": 1773194236388, + "contentHash": "399ce8a8ccd1c2a759619a106aad52bd", + "sourceName": "contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../modules/lite/CCTCMTATBaseERC2771.sol", + "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ComplianceTokenCMTATLiteStandalone" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC2771.sol": { + "lastModificationDate": 1766069548241, + "contentHash": "c1917fd23513535cc1f18994c1b58cf4", + "sourceName": "contracts/modules/lite/CCTCMTATBaseERC2771.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./CCTCMTATBaseERC20CrossChain.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "CCTCMTATBaseERC2771" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol": { + "lastModificationDate": 1772459546422, + "contentHash": "d2ec11374905c456bf8e13ce09151c3b", + "sourceName": "submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../engine/IRuleEngine.sol", + "../tokenization/draft-IERC1643CMTAT.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ICMTATConstructor" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol": { + "lastModificationDate": 1765380322380, + "contentHash": "e4625ddc00c353063c619dea9250a30d", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC2771Module" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol": { + "lastModificationDate": 1766069548236, + "contentHash": "0b39d465054e9c0b7f2f3856437ac373", + "sourceName": "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol", + "./CCTCMTATBaseERC1404.sol", + "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "CCTCMTATBaseERC20CrossChain" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "lastModificationDate": 1766069901805, + "contentHash": "dd4ac3512e42e62e26ec342fb9f2a033", + "sourceName": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/proxy/utils/Initializable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ContextUpgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC1404.sol": { + "lastModificationDate": 1772729649635, + "contentHash": "b162adc208ea12301842696b5cddddc7", + "sourceName": "contracts/modules/lite/CCTCMTATBaseERC1404.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./CCTCMTATBasePolicyEngine.sol", + "./PolicyValidationModuleERC1404.sol", + "./ValidationModulePolicyEngine.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "CCTCMTATBaseERC1404" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol": { + "lastModificationDate": 1772459546424, + "contentHash": "9f6fa848f28f5809023f02acff6801c1", + "sourceName": "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./wrapper/core/VersionModule.sol", + "./wrapper/core/ERC20BurnModule.sol", + "./wrapper/core/ERC20MintModule.sol", + "./wrapper/extensions/ExtraInformationModule.sol", + "./wrapper/extensions/ERC20EnforcementModule.sol", + "./wrapper/extensions/DocumentEngineModule.sol", + "./wrapper/extensions/SnapshotEngineModule.sol", + "./wrapper/core/ERC20BaseModule.sol", + "../interfaces/engine/ISnapshotEngine.sol", + "../interfaces/technical/IMintBurnToken.sol", + "../interfaces/technical/IERC5679.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "CMTATBaseCommon" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol": { + "lastModificationDate": 1765380322380, + "contentHash": "80d496a394b377d06f6a428173de9448", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../../interfaces/technical/IGetCCIPAdmin.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "CCIPModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol": { + "lastModificationDate": 1765380322378, + "contentHash": "8bd2c48e980dbee546bfb63e8b5c1a3b", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../internal/ERC20BurnModuleInternal.sol", + "../../../interfaces/technical/IMintBurnToken.sol", + "../../../interfaces/tokenization/IERC3643Partial.sol", + "../../../interfaces/tokenization/draft-IERC7551.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC20BurnModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol": { + "lastModificationDate": 1765380322379, + "contentHash": "22df54c53004fdfa26c585002ef559aa", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../internal/ERC20MintModuleInternal.sol", + "../../../interfaces/technical/IMintBurnToken.sol", + "../../../interfaces/tokenization/IERC3643Partial.sol", + "../../../interfaces/tokenization/draft-IERC7551.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC20MintModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol": { + "lastModificationDate": 1772459546427, + "contentHash": "000206e07b3c933f938ab760fb0db4fa", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol", + "../../../interfaces/technical/IERC7802.sol", + "../../../interfaces/technical/IMintBurnToken.sol", + "../../../interfaces/technical/IERC20Allowance.sol", + "../core/ERC20BurnModule.sol", + "../core/ERC20MintModule.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC20CrossChainModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol": { + "lastModificationDate": 1766069901797, + "contentHash": "93b4d16d2c47c2b87ada511a3b6a33a8", + "sourceName": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/access/IAccessControl.sol", + "../utils/ContextUpgradeable.sol", + "@openzeppelin/contracts/utils/introspection/IERC165.sol", + "../utils/introspection/ERC165Upgradeable.sol", + "@openzeppelin/contracts/proxy/utils/Initializable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "AccessControlUpgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol": { + "lastModificationDate": 1766069901855, + "contentHash": "db681efc0ba429bde356c763f3ba09cb", + "sourceName": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", + "../../utils/ContextUpgradeable.sol", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol", + "@openzeppelin/contracts/proxy/utils/Initializable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC20Upgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol": { + "lastModificationDate": 1774274316442, + "contentHash": "220c76518df4b6cac1c9286cef9c1410", + "sourceName": "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../../submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol", + "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol", + "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol", + "@chainlink/policy-management/interfaces/IPolicyEngine.sol", + "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol", + "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol", + "./ValidationModulePolicyEngine.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol", + "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "CCTCMTATBasePolicyEngine" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/lite/PolicyValidationModuleERC1404.sol": { + "lastModificationDate": 1773194914672, + "contentHash": "8ace5b74e893263ec6382c6b27e89fea", + "sourceName": "contracts/modules/lite/PolicyValidationModuleERC1404.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "PolicyValidationModuleERC1404" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/lite/ValidationModulePolicyEngine.sol": { + "lastModificationDate": 1774274316430, + "contentHash": "49d1b121b4e4538ecbb7eea8f537514e", + "sourceName": "contracts/modules/lite/ValidationModulePolicyEngine.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol", + "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol", + "@chainlink/policy-management/interfaces/IPolicyEngine.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ValidationModulePolicyEngine" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol": { + "lastModificationDate": 1772459546426, + "contentHash": "5e4dadfee8eb2cefc0481f6426d0f548", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../internal/ERC20EnforcementModuleInternal.sol", + "../../../interfaces/tokenization/IERC3643Partial.sol", + "../../../interfaces/tokenization/draft-IERC7551.sol", + "../../../interfaces/tokenization/draft-IERC7943.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC20EnforcementModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol": { + "lastModificationDate": 1765380322379, + "contentHash": "05ab0b704c2967bb40eaaaf82dd9da59", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../controllers/ValidationModule.sol", + "../../../interfaces/tokenization/IERC3643Partial.sol", + "../../../interfaces/tokenization/draft-IERC7551.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ValidationModuleCore" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol": { + "lastModificationDate": 1773024228217, + "contentHash": "2196c4d3579b7c42f25cd37bee0f5cd0", + "sourceName": "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/interfaces/IERC165.sol", + "./wrapper/security/AccessControlModule.sol", + "./wrapper/core/ERC20BurnModule.sol", + "./wrapper/core/ERC20MintModule.sol", + "./wrapper/extensions/ExtraInformationModule.sol", + "./wrapper/extensions/ERC20EnforcementModule.sol", + "./wrapper/extensions/DocumentEngineModule.sol", + "./wrapper/extensions/SnapshotEngineModule.sol", + "./wrapper/core/ERC20BaseModule.sol", + "../interfaces/technical/ICMTATConstructor.sol", + "./0_CMTATBaseCommon.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "CMTATBaseAccessControl" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol": { + "lastModificationDate": 1772459546423, + "contentHash": "8a9b2ff07c3633da1d3d8ec395ab99b9", + "sourceName": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC1643" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol": { + "lastModificationDate": 1765380322372, + "contentHash": "3b15f21eab6fc4057dd7feef6236fa61", + "sourceName": "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC20BatchBalance", + "ISnapshotEngine" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol": { + "lastModificationDate": 1772459546423, + "contentHash": "f27d66f0e096e1d67edda9100fa22162", + "sourceName": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC7943ERC20Enforcement", + "IERC7943ERC20EnforcementSpecific", + "IERC7943FungibleEnforcementEventAndError", + "IERC7943FungibleTransactCheck", + "IERC7943FungibleTransferError", + "IERC7943TransactError" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol": { + "lastModificationDate": 1765380322379, + "contentHash": "34c55b10afb8ae66fb33b27074e773bb", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../internal/EnforcementModuleInternal.sol", + "../../../interfaces/tokenization/IERC3643Partial.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "EnforcementModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol": { + "lastModificationDate": 1772459546426, + "contentHash": "00b7d5c73268f01a685cf4604eb54c3d", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "../../../interfaces/tokenization/IERC3643Partial.sol", + "../../../interfaces/tokenization/draft-IERC7551.sol", + "../../../interfaces/tokenization/ICMTAT.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "PauseModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol": { + "lastModificationDate": 1772459626777, + "contentHash": "5ac016edab09986d2c2f197c31220187", + "sourceName": "@chainlink/policy-management/interfaces/IPolicyEngine.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IPolicyEngine" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/ace/packages/policy-management/src/core/PolicyProtectedUpgradeable.sol": { + "lastModificationDate": 1772459626813, + "contentHash": "7fa82aea0ce468d9b82011a4a3113f66", + "sourceName": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../interfaces/IPolicyEngine.sol", + "../interfaces/IPolicyProtected.sol", + "@openzeppelin/contracts/utils/introspection/IERC165.sol", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol", + "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "PolicyProtectedUpgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol": { + "lastModificationDate": 1772459546423, + "contentHash": "d9ebeee4aef4dcef89dcb358026639e6", + "sourceName": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IERC3643Partial.sol", + "../technical/IERC5679.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC7551Burn", + "IERC7551Compliance", + "IERC7551Document", + "IERC7551ERC20Enforcement", + "IERC7551ERC20EnforcementEvent", + "IERC7551ERC20EnforcementTokenFrozenEvent", + "IERC7551Mint", + "IERC7551Pause" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol": { + "lastModificationDate": 1772459546423, + "contentHash": "591cc96b764dc7cb67f7d80621106e47", + "sourceName": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./draft-IERC7943.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC3643BatchTransfer", + "IERC3643Burn", + "IERC3643ComplianceRead", + "IERC3643ERC20Base", + "IERC3643ERC20Enforcement", + "IERC3643Enforcement", + "IERC3643EnforcementEvent", + "IERC3643IComplianceContract", + "IERC3643Mint", + "IERC3643Pause", + "IERC3643Version" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol": { + "lastModificationDate": 1772459546425, + "contentHash": "dd4820729f403c3a7b3d07a26d45c6fc", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../core/PauseModule.sol", + "../core/EnforcementModule.sol", + "../../../interfaces/tokenization/draft-IERC7943.sol", + "../../../interfaces/tokenization/draft-IERC7943.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ValidationModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol": { + "lastModificationDate": 1765380322373, + "contentHash": "66455eef398cd6e40c549c665e956f05", + "sourceName": "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/interfaces/IERC165.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC5679", + "IERC5679Burn", + "IERC5679Mint" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { + "lastModificationDate": 1766069902003, + "contentHash": "947853028399b7de34bcc3704ee06e99", + "sourceName": "@openzeppelin/contracts/interfaces/IERC165.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../utils/introspection/IERC165.sol" + ], + "versionPragmas": [ + ">=0.4.16" + ], + "artifacts": [] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "lastModificationDate": 1766069902004, + "contentHash": "7074c93b1ea0a122063f26ddd1db1032", + "sourceName": "@openzeppelin/contracts/utils/introspection/IERC165.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.4.16" + ], + "artifacts": [ + "IERC165" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol": { + "lastModificationDate": 1772459546423, + "contentHash": "7c9991f8a07619f2830c14eb2e311975", + "sourceName": "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./draft-IERC1643CMTAT.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ICMTATBase", + "ICMTATCreditEvents", + "ICMTATDeactivate", + "ICMTATDebt" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol": { + "lastModificationDate": 1766069901898, + "contentHash": "5740e77fdc660fbee591e2c59e977cdd", + "sourceName": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../utils/ContextUpgradeable.sol", + "@openzeppelin/contracts/proxy/utils/Initializable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "PausableUpgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643CMTAT.sol": { + "lastModificationDate": 1772459546423, + "contentHash": "fd8382e936b3290e457e50cfcd57cd61", + "sourceName": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643CMTAT.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./draft-IERC1643.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC1643CMTAT" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol": { + "lastModificationDate": 1766069902018, + "contentHash": "2acae54ad209714bca07edf4bae32f72", + "sourceName": "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "Initializable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol": { + "lastModificationDate": 1765380322378, + "contentHash": "6fcbb17b416e7ec79a9014053a899dda", + "sourceName": "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol", + "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "./common/EnforcementModuleLibrary.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "EnforcementModuleInternal" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/internal/common/EnforcementModuleLibrary.sol": { + "lastModificationDate": 1765380322378, + "contentHash": "fd0d05a59b951881dcfc6eaeebaa9d8d", + "sourceName": "submodules/CMTAT/contracts/modules/internal/common/EnforcementModuleLibrary.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "EnforcementModuleLibrary" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "lastModificationDate": 1766069901897, + "contentHash": "bcfb6430f07521142c3725a35f1e65ef", + "sourceName": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../utils/ContextUpgradeable.sol", + "@openzeppelin/contracts/proxy/utils/Initializable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "OwnableUpgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/ace/packages/policy-management/src/interfaces/IPolicyProtected.sol": { + "lastModificationDate": 1772459626777, + "contentHash": "2e8c1af1d4604de2e53ff174618d1813", + "sourceName": "@chainlink/policy-management/interfaces/IPolicyProtected.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IPolicyProtected" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol": { + "lastModificationDate": 1766069901849, + "contentHash": "cd93bc5bd62a1e7bea1bfab7aec3d86d", + "sourceName": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol", + "@openzeppelin/contracts/proxy/utils/Initializable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC165Upgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": { + "lastModificationDate": 1766069901893, + "contentHash": "7ed23477eca0250d0edbb9a34e6a95ac", + "sourceName": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/proxy/utils/Initializable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol": { + "lastModificationDate": 1772459546426, + "contentHash": "2926cea09887acbc3973dd98066fc73a", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "../../../interfaces/tokenization/draft-IERC1643CMTAT.sol", + "../../../interfaces/tokenization/ICMTAT.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ExtraInformationModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol": { + "lastModificationDate": 1772459546426, + "contentHash": "4c8a892ac361e0f7ed9d62afd70b6d4a", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "../../../interfaces/engine/IDocumentEngine.sol", + "../../../interfaces/modules/IDocumentEngineModule.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "DocumentEngineModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol": { + "lastModificationDate": 1772459546426, + "contentHash": "3d19cb4d8bbf13073a6e77092039b464", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol", + "../../../interfaces/technical/IERC20Allowance.sol", + "../../../interfaces/engine/ISnapshotEngine.sol", + "../../../interfaces/tokenization/IERC3643Partial.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC20BaseModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol": { + "lastModificationDate": 1772459546426, + "contentHash": "7b5d8c70197b3fad3db2ff60ee526362", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "../../../interfaces/modules/ISnapshotEngineModule.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "SnapshotEngineModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol": { + "lastModificationDate": 1765380322381, + "contentHash": "cdd6782c0d214435ea908d37016d32d2", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "AccessControlModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol": { + "lastModificationDate": 1772459546422, + "contentHash": "62ee053f339ce532e813b31ecb1d95c6", + "sourceName": "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IBurnBatchERC20", + "IBurnFromERC20", + "IBurnMintERC20", + "IForcedBurnERC20", + "IMintBatchERC20Event" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol": { + "lastModificationDate": 1765380322377, + "contentHash": "1e6d1bbd74de47c320c43bf548fb0b27", + "sourceName": "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC20BurnModuleInternal" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { + "lastModificationDate": 1766069901939, + "contentHash": "bcc76f4747d56c28c40ae272ef3470a6", + "sourceName": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.8.4" + ], + "artifacts": [ + "IERC1155Errors", + "IERC20Errors", + "IERC721Errors" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "lastModificationDate": 1766069902006, + "contentHash": "9261adf6457863de3e9892f51317ec89", + "sourceName": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.4.16" + ], + "artifacts": [ + "IERC20" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "lastModificationDate": 1766069902007, + "contentHash": "513778b30d2750f5d2b9b19bbcf748a5", + "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IERC20.sol" + ], + "versionPragmas": [ + ">=0.6.2" + ], + "artifacts": [ + "IERC20Metadata" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol": { + "lastModificationDate": 1765380322378, + "contentHash": "90e51deacc89b1464b200c300d2fa83a", + "sourceName": "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC20MintModuleInternal" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol": { + "lastModificationDate": 1765380322372, + "contentHash": "c3dcebeb73713ab00788aafb5a19cf94", + "sourceName": "submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../tokenization/draft-IERC1643.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IDocumentEngine" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol": { + "lastModificationDate": 1765380322373, + "contentHash": "14a389dd9a277083a1572d7fa69d0efe", + "sourceName": "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../tokenization/draft-IERC1643.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IDocumentEngineModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol": { + "lastModificationDate": 1765380322373, + "contentHash": "9b3af82e84423e081f03c761206ffb54", + "sourceName": "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC20Allowance" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol": { + "lastModificationDate": 1772459546425, + "contentHash": "ebad5fd99d64dd5e0747abc6c0d1ff2c", + "sourceName": "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol", + "../../interfaces/tokenization/draft-IERC7551.sol", + "../../interfaces/tokenization/draft-IERC7943.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC20EnforcementModuleInternal" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol": { + "lastModificationDate": 1772459546426, + "contentHash": "4af91ba785f181981e1268c232b14b85", + "sourceName": "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../../interfaces/tokenization/IERC3643Partial.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "VersionModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol": { + "lastModificationDate": 1765380322373, + "contentHash": "ec69626a48da76066d41f3f4db969cd2", + "sourceName": "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../engine/ISnapshotEngine.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ISnapshotEngineModule" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol": { + "lastModificationDate": 1772459546422, + "contentHash": "bf5ef8bc7a23532d8b6e2ed7868e8e74", + "sourceName": "submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../tokenization/draft-IERC1404.sol", + "../tokenization/IERC3643Partial.sol", + "../tokenization/draft-IERC7551.sol", + "@openzeppelin/contracts/utils/introspection/IERC165.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IRuleEngine", + "IRuleEngineERC1404" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol": { + "lastModificationDate": 1772459546423, + "contentHash": "706d1f3f1a70df1f417ca6364644b609", + "sourceName": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC1404", + "IERC1404Extend" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { + "lastModificationDate": 1766069901995, + "contentHash": "def1e8f7b6cac577cf2600655bf3bdf8", + "sourceName": "@openzeppelin/contracts/access/IAccessControl.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.8.4" + ], + "artifacts": [ + "IAccessControl" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol": { + "lastModificationDate": 1765380322373, + "contentHash": "37c38e91ba8a34180ed695b87ae74b20", + "sourceName": "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IGetCCIPAdmin" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol": { + "lastModificationDate": 1765380322373, + "contentHash": "cb49ec9db8c7469e9ce2bb36c285a3a2", + "sourceName": "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC7802" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol": { + "lastModificationDate": 1766069901858, + "contentHash": "543c7d0cdce14c010ad355b8c2009843", + "sourceName": "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../utils/ContextUpgradeable.sol", + "@openzeppelin/contracts/proxy/utils/Initializable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ERC2771ContextUpgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/ace/packages/policy-management/src/interfaces/IPolicy.sol": { + "lastModificationDate": 1772459626777, + "contentHash": "3c9a654f0cad313a858aacf0a775e57c", + "sourceName": "@chainlink/policy-management/interfaces/IPolicy.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IPolicyEngine.sol", + "@openzeppelin/contracts/utils/introspection/IERC165.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IPolicy" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/ace/packages/policy-management/src/policies/PausePolicy.sol": { + "lastModificationDate": 1772459626780, + "contentHash": "992ce50e5f32be205fea4a4f95cdd2d5", + "sourceName": "@chainlink/policy-management/policies/PausePolicy.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@chainlink/policy-management/interfaces/IPolicyEngine.sol", + "@chainlink/policy-management/core/Policy.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "PausePolicy" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/ace/packages/policy-management/src/core/Policy.sol": { + "lastModificationDate": 1772459626781, + "contentHash": "c66020704945f11b9f641d0f9f73d44f", + "sourceName": "@chainlink/policy-management/core/Policy.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../interfaces/IPolicy.sol", + "../interfaces/IPolicyEngine.sol", + "@openzeppelin/contracts/utils/introspection/IERC165.sol", + "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "Policy" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/ace/packages/policy-management/src/policies/RoleBasedAccessControlPolicy.sol": { + "lastModificationDate": 1772459626816, + "contentHash": "7d82a4251acf561d52a39156b31704a4", + "sourceName": "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol", + "@chainlink/policy-management/interfaces/IPolicyEngine.sol", + "@chainlink/policy-management/core/Policy.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "RoleBasedAccessControlPolicy" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/standard/CCTBaseERC2771.sol": { + "lastModificationDate": 1773194165430, + "contentHash": "fb7347980991cf1508a4ae961f2efae3", + "sourceName": "contracts/modules/standard/CCTBaseERC2771.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./CCTCommon.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol", + "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol", + "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol", + "../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "CCTBaseERC2771" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/standard/CCTCommon.sol": { + "lastModificationDate": 1774274316443, + "contentHash": "82a316900bcabd9b0ba789247a876cbe", + "sourceName": "contracts/modules/standard/CCTCommon.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/interfaces/IERC165.sol", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol", + "../../../submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol", + "../../../submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol", + "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol", + "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol", + "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "CCTCommon" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol": { + "lastModificationDate": 1773194235136, + "contentHash": "5bfdcc3f6f5fdf16c9dd07dcb56f6be0", + "sourceName": "contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../modules/lite/CCTCMTATBaseERC2771.sol", + "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ComplianceTokenCMTATLiteUpgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol": { + "lastModificationDate": 1773194231902, + "contentHash": "7272750d9801ffc77a6ea8ef7a5b64ca", + "sourceName": "contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../modules/standard/CCTBaseERC2771.sol", + "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ComplianceTokenCMTATStandalone" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol": { + "lastModificationDate": 1773194233701, + "contentHash": "bca3a4fe60dac7968dc0b1bb7158e100", + "sourceName": "contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol", + "../../modules/lite/CCTCMTATBaseERC2771.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ComplianceTokenCMTATLiteUUPSUpgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol": { + "lastModificationDate": 1766069902035, + "contentHash": "59a325652a58784f0c3050d8b71f8595", + "sourceName": "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../interfaces/draft-IERC1822.sol", + "../ERC1967/ERC1967Utils.sol" + ], + "versionPragmas": [ + "^0.8.22" + ], + "artifacts": [ + "UUPSUpgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol": { + "lastModificationDate": 1766069901939, + "contentHash": "9b2cafd2153b51bcfd7f4cb4cfc975aa", + "sourceName": "@openzeppelin/contracts/interfaces/draft-IERC1822.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.4.16" + ], + "artifacts": [ + "IERC1822Proxiable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": { + "lastModificationDate": 1766069901956, + "contentHash": "2741625b983eb412cfdd8aa55a7671c1", + "sourceName": "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../beacon/IBeacon.sol", + "../../interfaces/IERC1967.sol", + "../../utils/Address.sol", + "../../utils/StorageSlot.sol" + ], + "versionPragmas": [ + "^0.8.21" + ], + "artifacts": [ + "ERC1967Utils" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/utils/Address.sol": { + "lastModificationDate": 1766069901916, + "contentHash": "44f61b7a5cd41aa205efaebb4686f797", + "sourceName": "@openzeppelin/contracts/utils/Address.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./Errors.sol", + "./LowLevelCall.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "Address" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/utils/StorageSlot.sol": { + "lastModificationDate": 1766069902031, + "contentHash": "e656d64c4ce918f3d13030b91c935134", + "sourceName": "@openzeppelin/contracts/utils/StorageSlot.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "StorageSlot" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol": { + "lastModificationDate": 1766069901997, + "contentHash": "ee2e46607ed2be58bd554306d068acba", + "sourceName": "@openzeppelin/contracts/proxy/beacon/IBeacon.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.4.16" + ], + "artifacts": [ + "IBeacon" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/interfaces/IERC1967.sol": { + "lastModificationDate": 1766069902005, + "contentHash": "3c9577899f440b0c66e880c96e9250bb", + "sourceName": "@openzeppelin/contracts/interfaces/IERC1967.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.4.11" + ], + "artifacts": [ + "IERC1967" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/utils/Errors.sol": { + "lastModificationDate": 1766069901983, + "contentHash": "6b5eac2b85500c3012977849cfd633d8", + "sourceName": "@openzeppelin/contracts/utils/Errors.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "Errors" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@openzeppelin/contracts/utils/LowLevelCall.sol": { + "lastModificationDate": 1766069902019, + "contentHash": "6ecbbd3c1163c0354a61dd03a9e2df41", + "sourceName": "@openzeppelin/contracts/utils/LowLevelCall.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "LowLevelCall" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol": { + "lastModificationDate": 1773194316869, + "contentHash": "3099216b7c8b3439027cd5b928aff3f8", + "sourceName": "contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol", + "../../modules/standard/CCTBaseERC2771.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ComplianceTokenCMTATUUPSUpgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/ace/packages/policy-management/src/policies/SecureMintPolicy.sol": { + "lastModificationDate": 1772459626818, + "contentHash": "91b94368f3c881c9e6f2f09e80f209db", + "sourceName": "@chainlink/policy-management/policies/SecureMintPolicy.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol", + "@chainlink/policy-management/interfaces/IPolicyEngine.sol", + "@chainlink/policy-management/core/Policy.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "SecureMintPolicy" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol": { + "lastModificationDate": 1766069902084, + "contentHash": "64a3f906dc7696aa3c9fa8454b673be7", + "sourceName": "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "AggregatorV3Interface" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol": { + "lastModificationDate": 1766069902084, + "contentHash": "a045cdf1098c0a0735bee2f727fee0aa", + "sourceName": "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./AggregatorInterface.sol", + "./AggregatorV3Interface.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "AggregatorV2V3Interface" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorInterface.sol": { + "lastModificationDate": 1766069902083, + "contentHash": "1739f42cb7ceb036e6fd94b9d9990506", + "sourceName": "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorInterface.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "AggregatorInterface" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol": { + "lastModificationDate": 1766069902183, + "contentHash": "964c2024720c0de4d9ed9fa3907afa75", + "sourceName": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../shared/interfaces/AggregatorV2V3Interface.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "MockV3Aggregator" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/demo/DemoImports.sol": { + "lastModificationDate": 1774274086297, + "contentHash": "99ddca216683da05d40abeeda9bec86b", + "sourceName": "contracts/modules/demo/DemoImports.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol", + "@chainlink/policy-management/core/PolicyEngine.sol", + "@chainlink/policy-management/policies/PausePolicy.sol", + "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol", + "@chainlink/policy-management/policies/SecureMintPolicy.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol": { + "lastModificationDate": 1773194356004, + "contentHash": "e6c4ed0f2b2c06b821bfd0cedbd72e6f", + "sourceName": "contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../modules/standard/CCTBaseERC2771.sol", + "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ComplianceTokenCMTATUpgradeable" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/ace/packages/policy-management/src/interfaces/IExtractor.sol": { + "lastModificationDate": 1772459626774, + "contentHash": "4d95ec851df33f26d940217cc7dd38e2", + "sourceName": "@chainlink/policy-management/interfaces/IExtractor.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IPolicyEngine.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IExtractor" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/chainlink-ace-modified/MintBurnExtractor.sol": { + "lastModificationDate": 1773919134544, + "contentHash": "c114e6e6d1f5ac2bc98f3befb0dd6cf6", + "sourceName": "contracts/modules/chainlink-ace-modified/MintBurnExtractor.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@chainlink/policy-management/interfaces/IExtractor.sol", + "@chainlink/policy-management/interfaces/IPolicyEngine.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "MintBurnExtractor" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol": { + "lastModificationDate": 1774273499551, + "contentHash": "90a7af87beb542de12133ada98285baa", + "sourceName": "contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@chainlink/policy-management/interfaces/IPolicyEngine.sol", + "@chainlink/policy-management/core/Policy.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "TransferValidationPolicy" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/ace/packages/policy-management/src/interfaces/IMapper.sol": { + "lastModificationDate": 1772459626775, + "contentHash": "98e8d930c6842010115b094d00992270", + "sourceName": "@chainlink/policy-management/interfaces/IMapper.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IPolicyEngine.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IMapper" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/node_modules/@chainlink/ace/packages/policy-management/src/core/PolicyEngine.sol": { + "lastModificationDate": 1772459626781, + "contentHash": "d715c518edd01695a4ab46df576c7ab8", + "sourceName": "@chainlink/policy-management/core/PolicyEngine.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../interfaces/IExtractor.sol", + "../interfaces/IMapper.sol", + "../interfaces/IPolicy.sol", + "./Policy.sol", + "../interfaces/IPolicyEngine.sol", + "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "PolicyEngine" + ] + }, + "/Users/mark/dev/projects/cmta/CMTAT-ACE/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol": { + "lastModificationDate": 1774274299113, + "contentHash": "80fd81dcbb18e58dc5c40a346d169def", + "sourceName": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol", + "solcConfig": { + "version": "0.8.30", + "settings": { + "optimizer": { + "enabled": true, + "runs": 50 + }, + "evmVersion": "prague", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "storageLayout" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@chainlink/policy-management/interfaces/IPolicyEngine.sol", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol", + "@openzeppelin/contracts/utils/introspection/IERC165.sol", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol", + "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "PolicyProtectedUpgradeable" + ] + } + } +} diff --git a/cache_hardhat/validations.json b/cache_hardhat/validations.json new file mode 100644 index 0000000..634be08 --- /dev/null +++ b/cache_hardhat/validations.json @@ -0,0 +1,22676 @@ +{ + "version": "3.4", + "log": [ + { + "@chainlink/policy-management/interfaces/IPolicyEngine.sol:IPolicyEngine": { + "src": "@chainlink/policy-management/interfaces/IPolicyEngine.sol:8", + "inherit": [], + "libraries": [], + "methods": [ + "typeAndVersion()", + "attach()", + "detach()", + "setExtractor(bytes4,address)", + "setExtractors(bytes4[],address)", + "getExtractor(bytes4)", + "setPolicyMapper(address,address)", + "getPolicyMapper(address)", + "addPolicy(address,bytes4,address,bytes32[])", + "addPolicyAt(address,bytes4,address,bytes32[],uint256)", + "removePolicy(address,bytes4,address)", + "getPolicies(address,bytes4)", + "setPolicyConfiguration(address,uint256,bytes4,bytes)", + "getPolicyConfigVersion(address)", + "setDefaultPolicyAllow(bool)", + "setTargetDefaultPolicyAllow(address,bool)", + "check((bytes4,address,bytes,bytes))", + "run((bytes4,address,bytes,bytes))" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected": { + "src": "@chainlink/policy-management/interfaces/IPolicyProtected.sol:10", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165" + ], + "libraries": [], + "methods": [ + "attachPolicyEngine(address)", + "getPolicyEngine()", + "setContext(bytes)", + "getContext()", + "clearContext()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:51", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)", + "hasRole(bytes32,address)", + "getRoleAdmin(bytes32)", + "grantRole(bytes32,address)", + "revokeRole(bytes32,address)", + "renounceRole(bytes32,address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)324_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)334_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoleData)324_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:21", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "owner()", + "renounceOwnership()", + "transferOwnership(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)464_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:22", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "trustedForwarder()", + "isTrustedForwarder(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable": { + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:30", + "inherit": [ + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "name()", + "symbol()", + "decimals()", + "totalSupply()", + "balanceOf(address)", + "transfer(address,uint256)", + "allowance(address,address)", + "approve(address,uint256)", + "transferFrom(address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:17", + "inherit": [ + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:18", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "paused()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable": { + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:21", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl": { + "src": "@openzeppelin/contracts/access/IAccessControl.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "hasRole(bytes32,address)", + "getRoleAdmin(bytes32)", + "grantRole(bytes32,address)", + "revokeRole(bytes32,address)", + "renounceRole(bytes32,address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/interfaces/IERC1967.sol:IERC1967": { + "src": "@openzeppelin/contracts/interfaces/IERC1967.sol:9", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/interfaces/draft-IERC1822.sol:IERC1822Proxiable": { + "src": "@openzeppelin/contracts/interfaces/draft-IERC1822.sol:10", + "inherit": [], + "libraries": [], + "methods": [ + "proxiableUUID()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC1155Errors": { + "src": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:114", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors": { + "src": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:10", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC721Errors": { + "src": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:56", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol:ERC1967Utils": { + "src": "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol:15", + "version": { + "withMetadata": "cc54e2a66ec99be3bc9c735387b649707b5dfdc07a86bf196957442be74fa0c5", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [ + "@openzeppelin/contracts/utils/StorageSlot.sol:StorageSlot", + "@openzeppelin/contracts/utils/Address.sol:Address" + ], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/proxy/beacon/IBeacon.sol:IBeacon": { + "src": "@openzeppelin/contracts/proxy/beacon/IBeacon.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "implementation()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable": { + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:56", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol:UUPSUpgradeable": { + "src": "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol:21", + "inherit": [ + "@openzeppelin/contracts/interfaces/draft-IERC1822.sol:IERC1822Proxiable" + ], + "libraries": [ + "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol:ERC1967Utils" + ], + "methods": [ + "proxiableUUID()", + "upgradeToAndCall(address,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20": { + "src": "@openzeppelin/contracts/token/ERC20/IERC20.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "totalSupply()", + "balanceOf(address)", + "transfer(address,uint256)", + "allowance(address,address)", + "approve(address,uint256)", + "transferFrom(address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata": { + "src": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:11", + "inherit": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20" + ], + "libraries": [], + "methods": [ + "name()", + "symbol()", + "decimals()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/Address.sol:Address": { + "src": "@openzeppelin/contracts/utils/Address.sol:12", + "version": { + "withMetadata": "82be3ca82a3b7dbc470333aee34a1d0fc602571039f5c8683ebd1f7ce3255f04", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [ + "@openzeppelin/contracts/utils/LowLevelCall.sol:LowLevelCall", + "@openzeppelin/contracts/utils/Errors.sol:Errors" + ], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/Errors.sol:Errors": { + "src": "@openzeppelin/contracts/utils/Errors.sol:14", + "version": { + "withMetadata": "1ddb7a2200c7df47d4d72be4cf3e22751f12e73cfe38a1c585183e5937800522", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/LowLevelCall.sol:LowLevelCall": { + "src": "@openzeppelin/contracts/utils/LowLevelCall.sol:12", + "version": { + "withMetadata": "6ef2e730b6c5b3d4191b98278541ebcb163dca922839ba82b48fc33c59a50e86", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/StorageSlot.sol:StorageSlot": { + "src": "@openzeppelin/contracts/utils/StorageSlot.sol:34", + "version": { + "withMetadata": "12527ce7fc075cb5771ef8beb80a4b49b00bee7acfcc4b5aa594245004326764", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165": { + "src": "@openzeppelin/contracts/utils/introspection/IERC165.sol:15", + "inherit": [], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol:ComplianceTokenCMTATLiteStandalone": { + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol:14", + "version": { + "withMetadata": "84e0de4075dd343ffefdd5ba431b9c49b234cb643b1f7801fb441254b5794e40", + "withoutMetadata": "84e0de4075dd343ffefdd5ba431b9c49b234cb643b1f7801fb441254b5794e40", + "linkedWithoutMetadata": "84e0de4075dd343ffefdd5ba431b9c49b234cb643b1f7801fb441254b5794e40" + }, + "inherit": [ + "contracts/modules/lite/CCTCMTATBaseERC2771.sol:CCTCMTATBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:CCTCMTATBaseERC20CrossChain", + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404", + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address,address,(string,string,uint8),(string,(string,string,bytes32),string),address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol:14" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)324_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)334_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)324_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol:ComplianceTokenCMTATLiteUUPSUpgradeable": { + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol:15", + "version": { + "withMetadata": "7d68d9283e07d2051eef1be0cd437a58dd0a8b00539615cabdd3ac8b92a948d6", + "withoutMetadata": "a807735b4d177ed97c7b8d42d7e942b4950deaa7c01911fae87619db4e489489", + "linkedWithoutMetadata": "a807735b4d177ed97c7b8d42d7e942b4950deaa7c01911fae87619db4e489489" + }, + "inherit": [ + "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol:UUPSUpgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC1822.sol:IERC1822Proxiable", + "contracts/modules/lite/CCTCMTATBaseERC2771.sol:CCTCMTATBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:CCTCMTATBaseERC20CrossChain", + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404", + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol:15" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)324_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)334_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)324_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol:ComplianceTokenCMTATLiteUpgradeable": { + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol:14", + "version": { + "withMetadata": "bee30c434031cc0996a6d36dcb85dc0a0fe768230db68b72f6c8a4ccf75515f5", + "withoutMetadata": "8da5b49c7d33edea7f5e8a47d680cf79a19a22c675dd34ad9def3fc0ae2e968e", + "linkedWithoutMetadata": "8da5b49c7d33edea7f5e8a47d680cf79a19a22c675dd34ad9def3fc0ae2e968e" + }, + "inherit": [ + "contracts/modules/lite/CCTCMTATBaseERC2771.sol:CCTCMTATBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:CCTCMTATBaseERC20CrossChain", + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404", + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address,address,(string,string,uint8),(string,(string,string,bytes32),string),address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol:14" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)324_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)334_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)324_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol:ComplianceTokenCMTATStandalone": { + "src": "contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol:15", + "version": { + "withMetadata": "38b17c37d4d762ebb35717af4bed9e87a84ae99897096d7eb8fba5fef624da24", + "withoutMetadata": "38b17c37d4d762ebb35717af4bed9e87a84ae99897096d7eb8fba5fef624da24", + "linkedWithoutMetadata": "38b17c37d4d762ebb35717af4bed9e87a84ae99897096d7eb8fba5fef624da24" + }, + "inherit": [ + "contracts/modules/standard/CCTBaseERC2771.sol:CCTBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/standard/CCTCommon.sol:CCTCommon", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address,address,(string,string,uint8),(string,(string,string,bytes32),string),address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol:15" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)464_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol:ComplianceTokenCMTATUUPSUpgradeable": { + "src": "contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol:15", + "version": { + "withMetadata": "accf970fc579fdb010957d813d556d205b44ff1a210f6273934e76c8b368e490", + "withoutMetadata": "970c02c10c2f0edc7ab3711f2cd9509e47e33165456423313b8cbd3b5a2c8009", + "linkedWithoutMetadata": "970c02c10c2f0edc7ab3711f2cd9509e47e33165456423313b8cbd3b5a2c8009" + }, + "inherit": [ + "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol:UUPSUpgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC1822.sol:IERC1822Proxiable", + "contracts/modules/standard/CCTBaseERC2771.sol:CCTBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/standard/CCTCommon.sol:CCTCommon", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol:15" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)464_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol:ComplianceTokenCMTATUpgradeable": { + "src": "contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol:14", + "version": { + "withMetadata": "eba8b8ad9f78cdc0dc3f0f87c46b0dcc38f26a0137f6aee5e88ab95ede8fb7dd", + "withoutMetadata": "34c428a732babc084d8c432a32cd177d756d4b54dee8eeadbe79217f0a373356", + "linkedWithoutMetadata": "34c428a732babc084d8c432a32cd177d756d4b54dee8eeadbe79217f0a373356" + }, + "inherit": [ + "contracts/modules/standard/CCTBaseERC2771.sol:CCTBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/standard/CCTCommon.sol:CCTCommon", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol:14" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)464_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable": { + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:18", + "inherit": [ + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "attachPolicyEngine(address)", + "getPolicyEngine()", + "setContext(bytes)", + "getContext()", + "clearContext()", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404": { + "src": "contracts/modules/lite/CCTCMTATBaseERC1404.sol:13", + "inherit": [ + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "messageForTransferRestriction(uint8)", + "canTransfer(address,address,uint256)", + "canTransferFrom(address,address,address,uint256)", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)324_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)334_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)324_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:CCTCMTATBaseERC20CrossChain": { + "src": "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:14", + "inherit": [ + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404", + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "transfer(address,uint256)", + "transferFrom(address,address,uint256)", + "decimals()", + "name()", + "symbol()", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)324_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)334_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)324_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/CCTCMTATBaseERC2771.sol:CCTCMTATBaseERC2771": { + "src": "contracts/modules/lite/CCTCMTATBaseERC2771.sol:9", + "inherit": [ + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:CCTCMTATBaseERC20CrossChain", + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404", + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)324_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)334_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)324_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine": { + "src": "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:21", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "initialize(address,(string,string,uint8),(string,(string,string,bytes32),string),address)", + "canTransfer(address,address,uint256)", + "canTransferFrom(address,address,address,uint256)", + "attachPolicyEngine(address)", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)324_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)334_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)324_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404": { + "src": "contracts/modules/lite/PolicyValidationModuleERC1404.sol:15", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "messageForTransferRestriction(uint8)", + "detectTransferRestriction(address,address,uint256)", + "detectTransferRestrictionFrom(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine": { + "src": "contracts/modules/lite/ValidationModulePolicyEngine.sol:10", + "inherit": [ + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "canTransfer(address,address,uint256)", + "canTransferFrom(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/standard/CCTBaseERC2771.sol:CCTBaseERC2771": { + "src": "contracts/modules/standard/CCTBaseERC2771.sol:13", + "inherit": [ + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/standard/CCTCommon.sol:CCTCommon", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)464_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/standard/CCTCommon.sol:CCTCommon": { + "src": "contracts/modules/standard/CCTCommon.sol:34", + "inherit": [ + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "initialize(address,(string,string,uint8),(string,(string,string,bytes32),string),address)", + "transfer(address,uint256)", + "transferFrom(address,address,uint256)", + "attachPolicyEngine(address)", + "decimals()", + "name()", + "symbol()", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)254": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)464_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)1928_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)254", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol:22", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol:IDocumentEngine": { + "src": "submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol:9", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol:IRuleEngine": { + "src": "submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol:13", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643IComplianceContract", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead" + ], + "libraries": [], + "methods": [ + "transferred(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol:IRuleEngineERC1404": { + "src": "submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol:33", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol:IRuleEngine", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643IComplianceContract", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance": { + "src": "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:30", + "inherit": [], + "libraries": [], + "methods": [ + "batchBalanceOf(address[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:ISnapshotEngine": { + "src": "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:8", + "inherit": [], + "libraries": [], + "methods": [ + "operateOnTransfer(address,address,uint256,uint256,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule": { + "src": "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:12", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643" + ], + "libraries": [], + "methods": [ + "setDocumentEngine(address)", + "documentEngine()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule": { + "src": "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:13", + "inherit": [], + "libraries": [], + "methods": [ + "setSnapshotEngine(address)", + "snapshotEngine()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol:ICMTATConstructor": { + "src": "submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol:11", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:9", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:41", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:24", + "inherit": [], + "libraries": [], + "methods": [ + "burn(address,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:7", + "inherit": [], + "libraries": [], + "methods": [ + "mint(address,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:7", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165" + ], + "libraries": [], + "methods": [ + "crosschainMint(address,uint256)", + "crosschainBurn(address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:4", + "inherit": [], + "libraries": [], + "methods": [ + "getCCIPAdmin()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:59", + "inherit": [], + "libraries": [], + "methods": [ + "batchBurn(address[],uint256[],bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:98", + "inherit": [], + "libraries": [], + "methods": [ + "burnFrom(address,uint256)", + "burn(uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:29", + "inherit": [], + "libraries": [], + "methods": [ + "burnAndMint(address,address,uint256,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IForcedBurnERC20": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:41", + "inherit": [], + "libraries": [], + "methods": [ + "forcedBurn(address,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:10", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:60", + "inherit": [], + "libraries": [], + "methods": [ + "tokenId()", + "terms()", + "information()", + "setTokenId(string)", + "setTerms((string,string,bytes32))", + "setInformation(string)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATCreditEvents": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:130", + "inherit": [], + "libraries": [], + "methods": [ + "creditEvents()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:26", + "inherit": [], + "libraries": [], + "methods": [ + "deactivateContract()", + "deactivated()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDebt": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:146", + "inherit": [], + "libraries": [], + "methods": [ + "debt()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:69", + "inherit": [], + "libraries": [], + "methods": [ + "batchTransfer(address[],uint256[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:225", + "inherit": [], + "libraries": [], + "methods": [ + "burn(address,uint256)", + "batchBurn(address[],uint256[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:257", + "inherit": [], + "libraries": [], + "methods": [ + "canTransfer(address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:49", + "inherit": [], + "libraries": [], + "methods": [ + "setName(string)", + "setSymbol(string)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:171", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement" + ], + "libraries": [], + "methods": [ + "freezePartialTokens(address,uint256)", + "unfreezePartialTokens(address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:142", + "inherit": [], + "libraries": [], + "methods": [ + "isFrozen(address)", + "setAddressFrozen(address,bool)", + "batchSetAddressFrozen(address[],bool[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:116", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643IComplianceContract": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:269", + "inherit": [], + "libraries": [], + "methods": [ + "transferred(address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:194", + "inherit": [], + "libraries": [], + "methods": [ + "mint(address,uint256)", + "batchMint(address[],uint256[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:20", + "inherit": [], + "libraries": [], + "methods": [ + "paused()", + "pause()", + "unpause()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:103", + "inherit": [], + "libraries": [], + "methods": [ + "version()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "detectTransferRestriction(address,address,uint256)", + "messageForTransferRestriction(uint8)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:45", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404" + ], + "libraries": [], + "methods": [ + "detectTransferRestrictionFrom(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:10", + "inherit": [], + "libraries": [], + "methods": [ + "getDocument(string)", + "getAllDocuments()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643CMTAT.sol:IERC1643CMTAT": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643CMTAT.sol:7", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:25", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:146", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead" + ], + "libraries": [], + "methods": [ + "canTransferFrom(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Document": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:164", + "inherit": [], + "libraries": [], + "methods": [ + "termsHash()", + "setTerms(bytes32,string)", + "metaData()", + "setMetaData(string)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:93", + "inherit": [], + "libraries": [], + "methods": [ + "getActiveBalanceOf(address)", + "getFrozenTokens(address)", + "freezePartialTokens(address,uint256,bytes)", + "unfreezePartialTokens(address,uint256,bytes)", + "forcedTransfer(address,address,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:58", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:69", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:12", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:36", + "inherit": [], + "libraries": [], + "methods": [ + "paused()", + "pause()", + "unpause()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "getFrozenTokens(address)", + "forcedTransfer(address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:52", + "inherit": [], + "libraries": [], + "methods": [ + "setFrozenTokens(address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:63", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:113", + "inherit": [], + "libraries": [], + "methods": [ + "canTransact(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:103", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:91", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon": { + "src": "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:23", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "decimals()", + "name()", + "symbol()", + "transfer(address,uint256)", + "transferFrom(address,address,uint256)", + "burnAndMint(address,address,uint256,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl": { + "src": "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:23", + "inherit": [ + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)324_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)334_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoleData)324_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal": { + "src": "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:13", + "inherit": [ + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal": { + "src": "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:17", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal": { + "src": "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:13", + "inherit": [ + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal": { + "src": "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:15", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [ + "submodules/CMTAT/contracts/modules/internal/common/EnforcementModuleLibrary.sol:EnforcementModuleLibrary" + ], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/internal/common/EnforcementModuleLibrary.sol:EnforcementModuleLibrary": { + "src": "submodules/CMTAT/contracts/modules/internal/common/EnforcementModuleLibrary.sol:10", + "version": { + "withMetadata": "19c513987d731636c34c64db80a9d19115265d444b3270dee763461882874dc9", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:16", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "canTransact(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:21", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "transferFrom(address,address,uint256)", + "decimals()", + "name()", + "symbol()", + "setName(string)", + "setSymbol(string)", + "batchBalanceOf(address[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:18", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "burn(address,uint256,bytes)", + "burn(address,uint256)", + "batchBurn(address[],uint256[],bytes)", + "batchBurn(address[],uint256[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:19", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "mint(address,uint256,bytes)", + "mint(address,uint256)", + "batchMint(address[],uint256[])", + "batchTransfer(address[],uint256[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:15", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "setAddressFrozen(address,bool)", + "setAddressFrozen(address,bool,bytes)", + "batchSetAddressFrozen(address[],bool[])", + "isFrozen(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:24", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "pause()", + "unpause()", + "deactivateContract()", + "paused()", + "deactivated()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:15", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "canTransfer(address,address,uint256)", + "canTransferFrom(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)837_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:14", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "version()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:17", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "documentEngine()", + "getDocument(string)", + "getAllDocuments()", + "setDocumentEngine(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:17", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "getFrozenTokens(address)", + "getActiveBalanceOf(address)", + "forcedTransfer(address,address,uint256,bytes)", + "forcedTransfer(address,address,uint256)", + "freezePartialTokens(address,uint256)", + "unfreezePartialTokens(address,uint256)", + "setFrozenTokens(address,uint256)", + "freezePartialTokens(address,uint256,bytes)", + "unfreezePartialTokens(address,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:17", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "setTokenId(string)", + "setTerms((string,string,bytes32))", + "setInformation(string)", + "tokenId()", + "terms()", + "information()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:16", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "setSnapshotEngine(address)", + "snapshotEngine()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:13", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin" + ], + "libraries": [], + "methods": [ + "setCCIPAdmin(address)", + "getCCIPAdmin()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:21", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "crosschainMint(address,uint256)", + "crosschainBurn(address,uint256)", + "burnFrom(address,uint256)", + "burn(uint256)", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)623_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module": { + "src": "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:16", + "inherit": [ + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:8", + "inherit": [ + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "hasRole(bytes32,address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)324_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)334_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)1210_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoleData)324_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)324_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + } + }, + { + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorInterface.sol:AggregatorInterface": { + "src": "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorInterface.sol:5", + "inherit": [], + "libraries": [], + "methods": [ + "latestAnswer()", + "latestTimestamp()", + "latestRound()", + "getAnswer(uint256)", + "getTimestamp(uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol:AggregatorV2V3Interface": { + "src": "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol:8", + "inherit": [ + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol:AggregatorV3Interface", + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorInterface.sol:AggregatorInterface" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol:AggregatorV3Interface": { + "src": "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol:5", + "inherit": [], + "libraries": [], + "methods": [ + "decimals()", + "description()", + "version()", + "getRoundData(uint80)", + "latestRoundData()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:MockV3Aggregator": { + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:14", + "version": { + "withMetadata": "52e16a92d3bd21749811e77607d77b6e69ff74664f83aabfd66f454f9c97f908", + "withoutMetadata": "68708e9fd9866f1110ec6a0dc982528e26f113ba6e28be2584ba7ac7cb852619", + "linkedWithoutMetadata": "68708e9fd9866f1110ec6a0dc982528e26f113ba6e28be2584ba7ac7cb852619" + }, + "inherit": [ + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol:AggregatorV2V3Interface", + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol:AggregatorV3Interface", + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorInterface.sol:AggregatorInterface" + ], + "libraries": [], + "methods": [ + "(uint8,int256)", + "updateAnswer(int256)", + "updateRoundData(uint80,int256,uint256,uint256)", + "getRoundData(uint80)", + "latestRoundData()", + "description()" + ], + "linkReferences": [], + "errors": [ + { + "kind": "constructor", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:26" + } + ], + "layout": { + "storage": [ + { + "label": "decimals", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:17" + }, + { + "label": "latestAnswer", + "offset": 0, + "slot": "1", + "type": "t_int256", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:18" + }, + { + "label": "latestTimestamp", + "offset": 0, + "slot": "2", + "type": "t_uint256", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:19" + }, + { + "label": "latestRound", + "offset": 0, + "slot": "3", + "type": "t_uint256", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:20" + }, + { + "label": "getAnswer", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_uint256,t_int256)", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:22" + }, + { + "label": "getTimestamp", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:23" + }, + { + "label": "getStartedAt", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:24" + } + ], + "types": { + "t_int256": { + "label": "int256", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_int256)": { + "label": "mapping(uint256 => int256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "layoutVersion": "1.2", + "flat": true, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/core/Policy.sol:Policy": { + "src": "@chainlink/policy-management/core/Policy.sol:11", + "inherit": [ + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "initialize(address,address,bytes)", + "onInstall(bytes4)", + "onUninstall(bytes4)", + "run(address,address,bytes4,bytes[],bytes)", + "postRun(address,address,bytes4,bytes[],bytes)", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "constructor", + "contract": "Policy", + "src": "@chainlink/policy-management/core/Policy.sol:32" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1745_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1553_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyStorage)201_storage": { + "label": "struct Policy.PolicyStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.Policy": [ + { + "contract": "Policy", + "label": "policyEngine", + "type": "t_address", + "src": "@chainlink/policy-management/core/Policy.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/core/PolicyEngine.sol:PolicyEngine": { + "src": "@chainlink/policy-management/core/PolicyEngine.sol:12", + "version": { + "withMetadata": "b8a29c1f151c93842dfbdcec2b68ed5dc6d571c573fc91f9836e7d1c68e0cf1a", + "withoutMetadata": "95a961a86794cc8324e7967b068c16b727410fd9eca5f11861873e3ca147887c", + "linkedWithoutMetadata": "95a961a86794cc8324e7967b068c16b727410fd9eca5f11861873e3ca147887c" + }, + "inherit": [ + "@chainlink/policy-management/interfaces/IPolicyEngine.sol:IPolicyEngine", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "()", + "initialize(bool,address)", + "attach()", + "detach()", + "setDefaultPolicyAllow(bool)", + "setTargetDefaultPolicyAllow(address,bool)", + "setPolicyMapper(address,address)", + "getPolicyMapper(address)", + "check((bytes4,address,bytes,bytes))", + "run((bytes4,address,bytes,bytes))", + "setExtractor(bytes4,address)", + "setExtractors(bytes4[],address)", + "getExtractor(bytes4)", + "addPolicy(address,bytes4,address,bytes32[])", + "addPolicyAt(address,bytes4,address,bytes32[],uint256)", + "removePolicy(address,bytes4,address)", + "getPolicies(address,bytes4)", + "setPolicyConfiguration(address,uint256,bytes4,bytes)", + "getPolicyConfigVersion(address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "constructor", + "contract": "PolicyEngine", + "src": "@chainlink/policy-management/core/PolicyEngine.sol:46" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_address)": { + "label": "mapping(address => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_bytes32)dyn_storage)": { + "label": "mapping(address => bytes32[])", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_bytes4,t_array(t_address)dyn_storage))": { + "label": "mapping(address => mapping(bytes4 => address[]))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_bytes4,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))": { + "label": "mapping(address => mapping(bytes4 => mapping(address => bytes32[])))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1413_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes4,t_address)": { + "label": "mapping(bytes4 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes4,t_array(t_address)dyn_storage)": { + "label": "mapping(bytes4 => address[])", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes4,t_mapping(t_address,t_array(t_bytes32)dyn_storage))": { + "label": "mapping(bytes4 => mapping(address => bytes32[]))", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1423_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1413_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)1745_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyEngineStorage)386_storage": { + "label": "struct PolicyEngine.PolicyEngineStorage", + "members": [ + { + "label": "defaultPolicyAllow", + "type": "t_bool", + "offset": 0, + "slot": "0" + }, + { + "label": "extractorBySelector", + "type": "t_mapping(t_bytes4,t_address)", + "offset": 0, + "slot": "1" + }, + { + "label": "policyMappers", + "type": "t_mapping(t_address,t_address)", + "offset": 0, + "slot": "2" + }, + { + "label": "policyConfigVersions", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "3" + }, + { + "label": "targetAttached", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "4" + }, + { + "label": "targetPolicies", + "type": "t_mapping(t_address,t_mapping(t_bytes4,t_array(t_address)dyn_storage))", + "offset": 0, + "slot": "5" + }, + { + "label": "targetPolicyParameters", + "type": "t_mapping(t_address,t_mapping(t_bytes4,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))", + "offset": 0, + "slot": "6" + }, + { + "label": "targetHasDefault", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "7" + }, + { + "label": "targetDefaultPolicyAllow", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "8" + } + ], + "numberOfBytes": "288" + }, + "t_struct(RoleData)1413_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyEngine": [ + { + "contract": "PolicyEngine", + "label": "defaultPolicyAllow", + "type": "t_bool", + "src": "@chainlink/policy-management/core/PolicyEngine.sol:21", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyEngine", + "label": "extractorBySelector", + "type": "t_mapping(t_bytes4,t_address)", + "src": "@chainlink/policy-management/core/PolicyEngine.sol:22", + "offset": 0, + "slot": "1" + }, + { + "contract": "PolicyEngine", + "label": "policyMappers", + "type": "t_mapping(t_address,t_address)", + "src": "@chainlink/policy-management/core/PolicyEngine.sol:23", + "offset": 0, + "slot": "2" + }, + { + "contract": "PolicyEngine", + "label": "policyConfigVersions", + "type": "t_mapping(t_address,t_uint256)", + "src": "@chainlink/policy-management/core/PolicyEngine.sol:24", + "offset": 0, + "slot": "3" + }, + { + "contract": "PolicyEngine", + "label": "targetAttached", + "type": "t_mapping(t_address,t_bool)", + "src": "@chainlink/policy-management/core/PolicyEngine.sol:25", + "offset": 0, + "slot": "4" + }, + { + "contract": "PolicyEngine", + "label": "targetPolicies", + "type": "t_mapping(t_address,t_mapping(t_bytes4,t_array(t_address)dyn_storage))", + "src": "@chainlink/policy-management/core/PolicyEngine.sol:26", + "offset": 0, + "slot": "5" + }, + { + "contract": "PolicyEngine", + "label": "targetPolicyParameters", + "type": "t_mapping(t_address,t_mapping(t_bytes4,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))", + "src": "@chainlink/policy-management/core/PolicyEngine.sol:27", + "offset": 0, + "slot": "6" + }, + { + "contract": "PolicyEngine", + "label": "targetHasDefault", + "type": "t_mapping(t_address,t_bool)", + "src": "@chainlink/policy-management/core/PolicyEngine.sol:29", + "offset": 0, + "slot": "7" + }, + { + "contract": "PolicyEngine", + "label": "targetDefaultPolicyAllow", + "type": "t_mapping(t_address,t_bool)", + "src": "@chainlink/policy-management/core/PolicyEngine.sol:30", + "offset": 0, + "slot": "8" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1413_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/interfaces/IExtractor.sol:IExtractor": { + "src": "@chainlink/policy-management/interfaces/IExtractor.sol:10", + "inherit": [], + "libraries": [], + "methods": [ + "typeAndVersion()", + "extract((bytes4,address,bytes,bytes))" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/interfaces/IMapper.sol:IMapper": { + "src": "@chainlink/policy-management/interfaces/IMapper.sol:10", + "inherit": [], + "libraries": [], + "methods": [ + "typeAndVersion()", + "map(struct IPolicyEngine.Parameter[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy": { + "src": "@chainlink/policy-management/interfaces/IPolicy.sol:11", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165" + ], + "libraries": [], + "methods": [ + "typeAndVersion()", + "onInstall(bytes4)", + "onUninstall(bytes4)", + "run(address,address,bytes4,bytes[],bytes)", + "postRun(address,address,bytes4,bytes[],bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/interfaces/IPolicyEngine.sol:IPolicyEngine": { + "src": "@chainlink/policy-management/interfaces/IPolicyEngine.sol:8", + "inherit": [], + "libraries": [], + "methods": [ + "typeAndVersion()", + "attach()", + "detach()", + "setExtractor(bytes4,address)", + "setExtractors(bytes4[],address)", + "getExtractor(bytes4)", + "setPolicyMapper(address,address)", + "getPolicyMapper(address)", + "addPolicy(address,bytes4,address,bytes32[])", + "addPolicyAt(address,bytes4,address,bytes32[],uint256)", + "removePolicy(address,bytes4,address)", + "getPolicies(address,bytes4)", + "setPolicyConfiguration(address,uint256,bytes4,bytes)", + "getPolicyConfigVersion(address)", + "setDefaultPolicyAllow(bool)", + "setTargetDefaultPolicyAllow(address,bool)", + "check((bytes4,address,bytes,bytes))", + "run((bytes4,address,bytes,bytes))" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/policies/PausePolicy.sol:PausePolicy": { + "src": "@chainlink/policy-management/policies/PausePolicy.sol:11", + "version": { + "withMetadata": "5f3ce7388dc06918acbb95655baaf29a94cf0f9daa180720dfa044aec29b4024", + "withoutMetadata": "e061a36307fa04d62f68c1836d4d90881022947add35e5be21e13d50f61869db", + "linkedWithoutMetadata": "e061a36307fa04d62f68c1836d4d90881022947add35e5be21e13d50f61869db" + }, + "inherit": [ + "@chainlink/policy-management/core/Policy.sol:Policy", + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "s_paused()", + "setPausedState(bool)", + "run(address,address,bytes4,bytes[],bytes)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer-call", + "src": "@chainlink/policy-management/policies/PausePolicy.sol:47", + "parentContracts": [ + "Policy" + ] + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1745_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1553_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausePolicyStorage)1043_storage": { + "label": "struct PausePolicy.PausePolicyStorage", + "members": [ + { + "label": "paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyStorage)201_storage": { + "label": "struct Policy.PolicyStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PausePolicy": [ + { + "contract": "PausePolicy", + "label": "paused", + "type": "t_bool", + "src": "@chainlink/policy-management/policies/PausePolicy.sol:23", + "offset": 0, + "slot": "0" + } + ], + "erc7201:chainlink.ace.Policy": [ + { + "contract": "Policy", + "label": "policyEngine", + "type": "t_address", + "src": "@chainlink/policy-management/core/Policy.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol:RoleBasedAccessControlPolicy": { + "src": "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol:23", + "version": { + "withMetadata": "0db5564ad871503b53f72f134d6862a441b03aaebbe10316d4cee30ebad07be0", + "withoutMetadata": "1046577bf209b96998b026fd5c6d8ddaf5534a1be928b95c19feb145741c12f9", + "linkedWithoutMetadata": "1046577bf209b96998b026fd5c6d8ddaf5534a1be928b95c19feb145741c12f9" + }, + "inherit": [ + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "@chainlink/policy-management/core/Policy.sol:Policy", + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "grantOperationAllowanceToRole(bytes4,bytes32)", + "removeOperationAllowanceFromRole(bytes4,bytes32)", + "hasAllowedRole(bytes4,address)", + "run(address,address,bytes4,bytes[],bytes)", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1413_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes4,t_array(t_bytes32)dyn_storage)": { + "label": "mapping(bytes4 => bytes32[])", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1423_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1413_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)1745_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1553_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyStorage)201_storage": { + "label": "struct Policy.PolicyStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoleBasedAccessControlPolicyStorage)1124_storage": { + "label": "struct RoleBasedAccessControlPolicy.RoleBasedAccessControlPolicyStorage", + "members": [ + { + "label": "rolesByOperation", + "type": "t_mapping(t_bytes4,t_array(t_bytes32)dyn_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoleData)1413_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.RoleBasedAccessControlPolicy": [ + { + "contract": "RoleBasedAccessControlPolicy", + "label": "rolesByOperation", + "type": "t_mapping(t_bytes4,t_array(t_bytes32)dyn_storage)", + "src": "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol:43", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1413_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:chainlink.ace.Policy": [ + { + "contract": "Policy", + "label": "policyEngine", + "type": "t_address", + "src": "@chainlink/policy-management/core/Policy.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/policies/SecureMintPolicy.sol:SecureMintPolicy": { + "src": "@chainlink/policy-management/policies/SecureMintPolicy.sol:36", + "version": { + "withMetadata": "a4c8ef9c797feb8ba532c308a3f32943d814069045f37a1bdac30c6a883dc2f2", + "withoutMetadata": "a91d7c20d28ba0615ac5730755e0ebb152072029d1af5c0ecaac6c26a41786b8", + "linkedWithoutMetadata": "a91d7c20d28ba0615ac5730755e0ebb152072029d1af5c0ecaac6c26a41786b8" + }, + "inherit": [ + "@chainlink/policy-management/core/Policy.sol:Policy", + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "setReservesFeed(address)", + "setTokenMetadata(address,uint8)", + "setReserveMargin(uint8,uint256)", + "setMaxStalenessSeconds(uint256)", + "reservesFeed()", + "reserveMarginMode()", + "reserveMarginAmount()", + "maxStalenessSeconds()", + "run(address,address,bytes4,bytes[],bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(AggregatorV3Interface)92": { + "label": "contract AggregatorV3Interface", + "numberOfBytes": "20" + }, + "t_enum(ReserveMarginMode)1235": { + "label": "enum SecureMintPolicy.ReserveMarginMode", + "members": [ + "None", + "PositivePercentage", + "PositiveAbsolute", + "NegativePercentage", + "NegativeAbsolute" + ], + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1745_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1553_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyStorage)201_storage": { + "label": "struct Policy.PolicyStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReserveMarginConfigs)1248_storage": { + "label": "struct SecureMintPolicy.ReserveMarginConfigs", + "members": [ + { + "label": "reserveMarginMode", + "type": "t_enum(ReserveMarginMode)1235", + "offset": 0, + "slot": "0" + }, + { + "label": "reserveMarginAmount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(SecureMintPolicyStorage)1269_storage": { + "label": "struct SecureMintPolicy.SecureMintPolicyStorage", + "members": [ + { + "label": "reservesFeed", + "type": "t_contract(AggregatorV3Interface)92", + "offset": 0, + "slot": "0" + }, + { + "label": "reserveMarginConfigs", + "type": "t_struct(ReserveMarginConfigs)1248_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "maxStalenessSeconds", + "type": "t_uint256", + "offset": 0, + "slot": "3" + }, + { + "label": "tokenMetadata", + "type": "t_struct(TokenMetadata)1241_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenMetadata)1241_storage": { + "label": "struct SecureMintPolicy.TokenMetadata", + "members": [ + { + "label": "tokenAddress", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "tokenDecimals", + "type": "t_uint8", + "offset": 20, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.SecureMintPolicy": [ + { + "contract": "SecureMintPolicy", + "label": "reservesFeed", + "type": "t_contract(AggregatorV3Interface)92", + "src": "@chainlink/policy-management/policies/SecureMintPolicy.sol:109", + "offset": 0, + "slot": "0" + }, + { + "contract": "SecureMintPolicy", + "label": "reserveMarginConfigs", + "type": "t_struct(ReserveMarginConfigs)1248_storage", + "src": "@chainlink/policy-management/policies/SecureMintPolicy.sol:111", + "offset": 0, + "slot": "1" + }, + { + "contract": "SecureMintPolicy", + "label": "maxStalenessSeconds", + "type": "t_uint256", + "src": "@chainlink/policy-management/policies/SecureMintPolicy.sol:113", + "offset": 0, + "slot": "3" + }, + { + "contract": "SecureMintPolicy", + "label": "tokenMetadata", + "type": "t_struct(TokenMetadata)1241_storage", + "src": "@chainlink/policy-management/policies/SecureMintPolicy.sol:115", + "offset": 0, + "slot": "4" + } + ], + "erc7201:chainlink.ace.Policy": [ + { + "contract": "Policy", + "label": "policyEngine", + "type": "t_address", + "src": "@chainlink/policy-management/core/Policy.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:51", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)", + "hasRole(bytes32,address)", + "getRoleAdmin(bytes32)", + "grantRole(bytes32,address)", + "revokeRole(bytes32,address)", + "renounceRole(bytes32,address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1413_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1423_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1413_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)1745_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoleData)1413_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1413_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:21", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "owner()", + "renounceOwnership()", + "transferOwnership(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1745_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1553_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:17", + "inherit": [ + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1745_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable": { + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:21", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1745_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl": { + "src": "@openzeppelin/contracts/access/IAccessControl.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "hasRole(bytes32,address)", + "getRoleAdmin(bytes32)", + "grantRole(bytes32,address)", + "revokeRole(bytes32,address)", + "renounceRole(bytes32,address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable": { + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:56", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)1745_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20": { + "src": "@openzeppelin/contracts/token/ERC20/IERC20.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "totalSupply()", + "balanceOf(address)", + "transfer(address,uint256)", + "allowance(address,address)", + "approve(address,uint256)", + "transferFrom(address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata": { + "src": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:11", + "inherit": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20" + ], + "libraries": [], + "methods": [ + "name()", + "symbol()", + "decimals()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165": { + "src": "@openzeppelin/contracts/utils/introspection/IERC165.sol:15", + "inherit": [], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + } + }, + { + "@chainlink/policy-management/core/Policy.sol:Policy": { + "src": "@chainlink/policy-management/core/Policy.sol:11", + "inherit": [ + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "initialize(address,address,bytes)", + "onInstall(bytes4)", + "onUninstall(bytes4)", + "run(address,address,bytes4,bytes[],bytes)", + "postRun(address,address,bytes4,bytes[],bytes)", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "constructor", + "contract": "Policy", + "src": "@chainlink/policy-management/core/Policy.sol:32" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)593_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)462_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyStorage)29_storage": { + "label": "struct Policy.PolicyStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.Policy": [ + { + "contract": "Policy", + "label": "policyEngine", + "type": "t_address", + "src": "@chainlink/policy-management/core/Policy.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy": { + "src": "@chainlink/policy-management/interfaces/IPolicy.sol:11", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165" + ], + "libraries": [], + "methods": [ + "typeAndVersion()", + "onInstall(bytes4)", + "onUninstall(bytes4)", + "run(address,address,bytes4,bytes[],bytes)", + "postRun(address,address,bytes4,bytes[],bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/interfaces/IPolicyEngine.sol:IPolicyEngine": { + "src": "@chainlink/policy-management/interfaces/IPolicyEngine.sol:8", + "inherit": [], + "libraries": [], + "methods": [ + "typeAndVersion()", + "attach()", + "detach()", + "setExtractor(bytes4,address)", + "setExtractors(bytes4[],address)", + "getExtractor(bytes4)", + "setPolicyMapper(address,address)", + "getPolicyMapper(address)", + "addPolicy(address,bytes4,address,bytes32[])", + "addPolicyAt(address,bytes4,address,bytes32[],uint256)", + "removePolicy(address,bytes4,address)", + "getPolicies(address,bytes4)", + "setPolicyConfiguration(address,uint256,bytes4,bytes)", + "getPolicyConfigVersion(address)", + "setDefaultPolicyAllow(bool)", + "setTargetDefaultPolicyAllow(address,bool)", + "check((bytes4,address,bytes,bytes))", + "run((bytes4,address,bytes,bytes))" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:21", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "owner()", + "renounceOwnership()", + "transferOwnership(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)593_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)462_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:17", + "inherit": [ + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)593_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable": { + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:21", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)593_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable": { + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:56", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)593_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165": { + "src": "@openzeppelin/contracts/utils/introspection/IERC165.sol:15", + "inherit": [], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol:TransferValidationPolicy": { + "src": "contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol:22", + "version": { + "withMetadata": "298b8f50306dfcdebe4c5ae2b861562e547f9c1a641f42bc162c0d45c25ad993", + "withoutMetadata": "82b07047080f08dcec0d8928c4f0a04a7d4c3dc57b7586e4beb09eb434eec753", + "linkedWithoutMetadata": "82b07047080f08dcec0d8928c4f0a04a7d4c3dc57b7586e4beb09eb434eec753" + }, + "inherit": [ + "@chainlink/policy-management/core/Policy.sol:Policy", + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "setMaxTransferAmount(uint256)", + "setMaxMintAmount(uint256)", + "getMaxTransferAmount()", + "getMaxMintAmount()", + "run(address,address,bytes4,bytes[],bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)593_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)462_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyStorage)29_storage": { + "label": "struct Policy.PolicyStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(TransferValidationPolicyStorage)690_storage": { + "label": "struct TransferValidationPolicy.TransferValidationPolicyStorage", + "members": [ + { + "label": "maxTransferAmount", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "maxMintAmount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.TransferValidationPolicy": [ + { + "contract": "TransferValidationPolicy", + "label": "maxTransferAmount", + "type": "t_uint256", + "src": "contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol:40", + "offset": 0, + "slot": "0" + }, + { + "contract": "TransferValidationPolicy", + "label": "maxMintAmount", + "type": "t_uint256", + "src": "contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol:42", + "offset": 0, + "slot": "1" + } + ], + "erc7201:chainlink.ace.Policy": [ + { + "contract": "Policy", + "label": "policyEngine", + "type": "t_address", + "src": "@chainlink/policy-management/core/Policy.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + } + }, + { + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorInterface.sol:AggregatorInterface": { + "src": "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorInterface.sol:5", + "inherit": [], + "libraries": [], + "methods": [ + "latestAnswer()", + "latestTimestamp()", + "latestRound()", + "getAnswer(uint256)", + "getTimestamp(uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol:AggregatorV2V3Interface": { + "src": "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol:8", + "inherit": [ + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol:AggregatorV3Interface", + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorInterface.sol:AggregatorInterface" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol:AggregatorV3Interface": { + "src": "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol:5", + "inherit": [], + "libraries": [], + "methods": [ + "decimals()", + "description()", + "version()", + "getRoundData(uint80)", + "latestRoundData()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:MockV3Aggregator": { + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:14", + "version": { + "withMetadata": "52e16a92d3bd21749811e77607d77b6e69ff74664f83aabfd66f454f9c97f908", + "withoutMetadata": "68708e9fd9866f1110ec6a0dc982528e26f113ba6e28be2584ba7ac7cb852619", + "linkedWithoutMetadata": "68708e9fd9866f1110ec6a0dc982528e26f113ba6e28be2584ba7ac7cb852619" + }, + "inherit": [ + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol:AggregatorV2V3Interface", + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol:AggregatorV3Interface", + "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorInterface.sol:AggregatorInterface" + ], + "libraries": [], + "methods": [ + "(uint8,int256)", + "updateAnswer(int256)", + "updateRoundData(uint80,int256,uint256,uint256)", + "getRoundData(uint80)", + "latestRoundData()", + "description()" + ], + "linkReferences": [], + "errors": [ + { + "kind": "constructor", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:26" + } + ], + "layout": { + "storage": [ + { + "label": "decimals", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:17" + }, + { + "label": "latestAnswer", + "offset": 0, + "slot": "1", + "type": "t_int256", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:18" + }, + { + "label": "latestTimestamp", + "offset": 0, + "slot": "2", + "type": "t_uint256", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:19" + }, + { + "label": "latestRound", + "offset": 0, + "slot": "3", + "type": "t_uint256", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:20" + }, + { + "label": "getAnswer", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_uint256,t_int256)", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:22" + }, + { + "label": "getTimestamp", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:23" + }, + { + "label": "getStartedAt", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "MockV3Aggregator", + "src": "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol:24" + } + ], + "types": { + "t_int256": { + "label": "int256", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_int256)": { + "label": "mapping(uint256 => int256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "layoutVersion": "1.2", + "flat": true, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/core/Policy.sol:Policy": { + "src": "@chainlink/policy-management/core/Policy.sol:11", + "inherit": [ + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "initialize(address,address,bytes)", + "onInstall(bytes4)", + "onUninstall(bytes4)", + "run(address,address,bytes4,bytes[],bytes)", + "postRun(address,address,bytes4,bytes[],bytes)", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "constructor", + "contract": "Policy", + "src": "@chainlink/policy-management/core/Policy.sol:32" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyStorage)201_storage": { + "label": "struct Policy.PolicyStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.Policy": [ + { + "contract": "Policy", + "label": "policyEngine", + "type": "t_address", + "src": "@chainlink/policy-management/core/Policy.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable": { + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:17", + "inherit": [ + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "attachPolicyEngine(address)", + "getPolicyEngine()", + "setContext(bytes)", + "getContext()", + "clearContext()", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "constructor", + "contract": "PolicyProtectedUpgradeable", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:37" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/interfaces/IExtractor.sol:IExtractor": { + "src": "@chainlink/policy-management/interfaces/IExtractor.sol:10", + "inherit": [], + "libraries": [], + "methods": [ + "typeAndVersion()", + "extract((bytes4,address,bytes,bytes))" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy": { + "src": "@chainlink/policy-management/interfaces/IPolicy.sol:11", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165" + ], + "libraries": [], + "methods": [ + "typeAndVersion()", + "onInstall(bytes4)", + "onUninstall(bytes4)", + "run(address,address,bytes4,bytes[],bytes)", + "postRun(address,address,bytes4,bytes[],bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/interfaces/IPolicyEngine.sol:IPolicyEngine": { + "src": "@chainlink/policy-management/interfaces/IPolicyEngine.sol:8", + "inherit": [], + "libraries": [], + "methods": [ + "typeAndVersion()", + "attach()", + "detach()", + "setExtractor(bytes4,address)", + "setExtractors(bytes4[],address)", + "getExtractor(bytes4)", + "setPolicyMapper(address,address)", + "getPolicyMapper(address)", + "addPolicy(address,bytes4,address,bytes32[])", + "addPolicyAt(address,bytes4,address,bytes32[],uint256)", + "removePolicy(address,bytes4,address)", + "getPolicies(address,bytes4)", + "setPolicyConfiguration(address,uint256,bytes4,bytes)", + "getPolicyConfigVersion(address)", + "setDefaultPolicyAllow(bool)", + "setTargetDefaultPolicyAllow(address,bool)", + "check((bytes4,address,bytes,bytes))", + "run((bytes4,address,bytes,bytes))" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected": { + "src": "@chainlink/policy-management/interfaces/IPolicyProtected.sol:10", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165" + ], + "libraries": [], + "methods": [ + "attachPolicyEngine(address)", + "getPolicyEngine()", + "setContext(bytes)", + "getContext()", + "clearContext()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/policies/PausePolicy.sol:PausePolicy": { + "src": "@chainlink/policy-management/policies/PausePolicy.sol:11", + "version": { + "withMetadata": "5f3ce7388dc06918acbb95655baaf29a94cf0f9daa180720dfa044aec29b4024", + "withoutMetadata": "e061a36307fa04d62f68c1836d4d90881022947add35e5be21e13d50f61869db", + "linkedWithoutMetadata": "e061a36307fa04d62f68c1836d4d90881022947add35e5be21e13d50f61869db" + }, + "inherit": [ + "@chainlink/policy-management/core/Policy.sol:Policy", + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "s_paused()", + "setPausedState(bool)", + "run(address,address,bytes4,bytes[],bytes)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer-call", + "src": "@chainlink/policy-management/policies/PausePolicy.sol:47", + "parentContracts": [ + "Policy" + ] + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausePolicyStorage)819_storage": { + "label": "struct PausePolicy.PausePolicyStorage", + "members": [ + { + "label": "paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyStorage)201_storage": { + "label": "struct Policy.PolicyStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PausePolicy": [ + { + "contract": "PausePolicy", + "label": "paused", + "type": "t_bool", + "src": "@chainlink/policy-management/policies/PausePolicy.sol:23", + "offset": 0, + "slot": "0" + } + ], + "erc7201:chainlink.ace.Policy": [ + { + "contract": "Policy", + "label": "policyEngine", + "type": "t_address", + "src": "@chainlink/policy-management/core/Policy.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol:RoleBasedAccessControlPolicy": { + "src": "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol:23", + "version": { + "withMetadata": "0db5564ad871503b53f72f134d6862a441b03aaebbe10316d4cee30ebad07be0", + "withoutMetadata": "1046577bf209b96998b026fd5c6d8ddaf5534a1be928b95c19feb145741c12f9", + "linkedWithoutMetadata": "1046577bf209b96998b026fd5c6d8ddaf5534a1be928b95c19feb145741c12f9" + }, + "inherit": [ + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "@chainlink/policy-management/core/Policy.sol:Policy", + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "grantOperationAllowanceToRole(bytes4,bytes32)", + "removeOperationAllowanceFromRole(bytes4,bytes32)", + "hasAllowedRole(bytes4,address)", + "run(address,address,bytes4,bytes[],bytes)", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes4,t_array(t_bytes32)dyn_storage)": { + "label": "mapping(bytes4 => bytes32[])", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1199_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyStorage)201_storage": { + "label": "struct Policy.PolicyStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoleBasedAccessControlPolicyStorage)900_storage": { + "label": "struct RoleBasedAccessControlPolicy.RoleBasedAccessControlPolicyStorage", + "members": [ + { + "label": "rolesByOperation", + "type": "t_mapping(t_bytes4,t_array(t_bytes32)dyn_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoleData)1189_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.RoleBasedAccessControlPolicy": [ + { + "contract": "RoleBasedAccessControlPolicy", + "label": "rolesByOperation", + "type": "t_mapping(t_bytes4,t_array(t_bytes32)dyn_storage)", + "src": "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol:43", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:chainlink.ace.Policy": [ + { + "contract": "Policy", + "label": "policyEngine", + "type": "t_address", + "src": "@chainlink/policy-management/core/Policy.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@chainlink/policy-management/policies/SecureMintPolicy.sol:SecureMintPolicy": { + "src": "@chainlink/policy-management/policies/SecureMintPolicy.sol:36", + "version": { + "withMetadata": "a4c8ef9c797feb8ba532c308a3f32943d814069045f37a1bdac30c6a883dc2f2", + "withoutMetadata": "a91d7c20d28ba0615ac5730755e0ebb152072029d1af5c0ecaac6c26a41786b8", + "linkedWithoutMetadata": "a91d7c20d28ba0615ac5730755e0ebb152072029d1af5c0ecaac6c26a41786b8" + }, + "inherit": [ + "@chainlink/policy-management/core/Policy.sol:Policy", + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "setReservesFeed(address)", + "setTokenMetadata(address,uint8)", + "setReserveMargin(uint8,uint256)", + "setMaxStalenessSeconds(uint256)", + "reservesFeed()", + "reserveMarginMode()", + "reserveMarginAmount()", + "maxStalenessSeconds()", + "run(address,address,bytes4,bytes[],bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(AggregatorV3Interface)92": { + "label": "contract AggregatorV3Interface", + "numberOfBytes": "20" + }, + "t_enum(ReserveMarginMode)1011": { + "label": "enum SecureMintPolicy.ReserveMarginMode", + "members": [ + "None", + "PositivePercentage", + "PositiveAbsolute", + "NegativePercentage", + "NegativeAbsolute" + ], + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyStorage)201_storage": { + "label": "struct Policy.PolicyStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ReserveMarginConfigs)1024_storage": { + "label": "struct SecureMintPolicy.ReserveMarginConfigs", + "members": [ + { + "label": "reserveMarginMode", + "type": "t_enum(ReserveMarginMode)1011", + "offset": 0, + "slot": "0" + }, + { + "label": "reserveMarginAmount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(SecureMintPolicyStorage)1045_storage": { + "label": "struct SecureMintPolicy.SecureMintPolicyStorage", + "members": [ + { + "label": "reservesFeed", + "type": "t_contract(AggregatorV3Interface)92", + "offset": 0, + "slot": "0" + }, + { + "label": "reserveMarginConfigs", + "type": "t_struct(ReserveMarginConfigs)1024_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "maxStalenessSeconds", + "type": "t_uint256", + "offset": 0, + "slot": "3" + }, + { + "label": "tokenMetadata", + "type": "t_struct(TokenMetadata)1017_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenMetadata)1017_storage": { + "label": "struct SecureMintPolicy.TokenMetadata", + "members": [ + { + "label": "tokenAddress", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "tokenDecimals", + "type": "t_uint8", + "offset": 20, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.SecureMintPolicy": [ + { + "contract": "SecureMintPolicy", + "label": "reservesFeed", + "type": "t_contract(AggregatorV3Interface)92", + "src": "@chainlink/policy-management/policies/SecureMintPolicy.sol:109", + "offset": 0, + "slot": "0" + }, + { + "contract": "SecureMintPolicy", + "label": "reserveMarginConfigs", + "type": "t_struct(ReserveMarginConfigs)1024_storage", + "src": "@chainlink/policy-management/policies/SecureMintPolicy.sol:111", + "offset": 0, + "slot": "1" + }, + { + "contract": "SecureMintPolicy", + "label": "maxStalenessSeconds", + "type": "t_uint256", + "src": "@chainlink/policy-management/policies/SecureMintPolicy.sol:113", + "offset": 0, + "slot": "3" + }, + { + "contract": "SecureMintPolicy", + "label": "tokenMetadata", + "type": "t_struct(TokenMetadata)1017_storage", + "src": "@chainlink/policy-management/policies/SecureMintPolicy.sol:115", + "offset": 0, + "slot": "4" + } + ], + "erc7201:chainlink.ace.Policy": [ + { + "contract": "Policy", + "label": "policyEngine", + "type": "t_address", + "src": "@chainlink/policy-management/core/Policy.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:51", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)", + "hasRole(bytes32,address)", + "getRoleAdmin(bytes32)", + "grantRole(bytes32,address)", + "revokeRole(bytes32,address)", + "renounceRole(bytes32,address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1199_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoleData)1189_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:21", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "owner()", + "renounceOwnership()", + "transferOwnership(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:22", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "trustedForwarder()", + "isTrustedForwarder(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable": { + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:30", + "inherit": [ + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "name()", + "symbol()", + "decimals()", + "totalSupply()", + "balanceOf(address)", + "transfer(address,uint256)", + "allowance(address,address)", + "approve(address,uint256)", + "transferFrom(address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:17", + "inherit": [ + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable": { + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:18", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "paused()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable": { + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:21", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl": { + "src": "@openzeppelin/contracts/access/IAccessControl.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "hasRole(bytes32,address)", + "getRoleAdmin(bytes32)", + "grantRole(bytes32,address)", + "revokeRole(bytes32,address)", + "renounceRole(bytes32,address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/interfaces/IERC1967.sol:IERC1967": { + "src": "@openzeppelin/contracts/interfaces/IERC1967.sol:9", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/interfaces/draft-IERC1822.sol:IERC1822Proxiable": { + "src": "@openzeppelin/contracts/interfaces/draft-IERC1822.sol:10", + "inherit": [], + "libraries": [], + "methods": [ + "proxiableUUID()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC1155Errors": { + "src": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:114", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors": { + "src": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:10", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC721Errors": { + "src": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:56", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol:ERC1967Utils": { + "src": "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol:15", + "version": { + "withMetadata": "cc54e2a66ec99be3bc9c735387b649707b5dfdc07a86bf196957442be74fa0c5", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [ + "@openzeppelin/contracts/utils/StorageSlot.sol:StorageSlot", + "@openzeppelin/contracts/utils/Address.sol:Address" + ], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/proxy/beacon/IBeacon.sol:IBeacon": { + "src": "@openzeppelin/contracts/proxy/beacon/IBeacon.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "implementation()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable": { + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:56", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol:UUPSUpgradeable": { + "src": "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol:21", + "inherit": [ + "@openzeppelin/contracts/interfaces/draft-IERC1822.sol:IERC1822Proxiable" + ], + "libraries": [ + "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol:ERC1967Utils" + ], + "methods": [ + "proxiableUUID()", + "upgradeToAndCall(address,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20": { + "src": "@openzeppelin/contracts/token/ERC20/IERC20.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "totalSupply()", + "balanceOf(address)", + "transfer(address,uint256)", + "allowance(address,address)", + "approve(address,uint256)", + "transferFrom(address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata": { + "src": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:11", + "inherit": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20" + ], + "libraries": [], + "methods": [ + "name()", + "symbol()", + "decimals()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/Address.sol:Address": { + "src": "@openzeppelin/contracts/utils/Address.sol:12", + "version": { + "withMetadata": "82be3ca82a3b7dbc470333aee34a1d0fc602571039f5c8683ebd1f7ce3255f04", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [ + "@openzeppelin/contracts/utils/LowLevelCall.sol:LowLevelCall", + "@openzeppelin/contracts/utils/Errors.sol:Errors" + ], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/Errors.sol:Errors": { + "src": "@openzeppelin/contracts/utils/Errors.sol:14", + "version": { + "withMetadata": "1ddb7a2200c7df47d4d72be4cf3e22751f12e73cfe38a1c585183e5937800522", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/LowLevelCall.sol:LowLevelCall": { + "src": "@openzeppelin/contracts/utils/LowLevelCall.sol:12", + "version": { + "withMetadata": "6ef2e730b6c5b3d4191b98278541ebcb163dca922839ba82b48fc33c59a50e86", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/StorageSlot.sol:StorageSlot": { + "src": "@openzeppelin/contracts/utils/StorageSlot.sol:34", + "version": { + "withMetadata": "12527ce7fc075cb5771ef8beb80a4b49b00bee7acfcc4b5aa594245004326764", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165": { + "src": "@openzeppelin/contracts/utils/introspection/IERC165.sol:15", + "inherit": [], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol:ComplianceTokenCMTATLiteStandalone": { + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol:14", + "version": { + "withMetadata": "a9212467026a5a0064fb5e293f4512cb524e60cb4f4c14fa5fec5223c08ddd67", + "withoutMetadata": "a9212467026a5a0064fb5e293f4512cb524e60cb4f4c14fa5fec5223c08ddd67", + "linkedWithoutMetadata": "a9212467026a5a0064fb5e293f4512cb524e60cb4f4c14fa5fec5223c08ddd67" + }, + "inherit": [ + "contracts/modules/lite/CCTCMTATBaseERC2771.sol:CCTCMTATBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:CCTCMTATBaseERC20CrossChain", + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404", + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address,address,(string,string,uint8),(string,(string,string,bytes32),string),address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol:14" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1199_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)1189_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol:ComplianceTokenCMTATLiteUUPSUpgradeable": { + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol:15", + "version": { + "withMetadata": "0d36a958fafd8b694fe20ecf3a54d262d04065c0ae3fb5735072f256af793ae5", + "withoutMetadata": "f31a8c8fe7e185259f7aff51ecfa76db2dab81f9a299d47e2802ba538295d1ad", + "linkedWithoutMetadata": "f31a8c8fe7e185259f7aff51ecfa76db2dab81f9a299d47e2802ba538295d1ad" + }, + "inherit": [ + "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol:UUPSUpgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC1822.sol:IERC1822Proxiable", + "contracts/modules/lite/CCTCMTATBaseERC2771.sol:CCTCMTATBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:CCTCMTATBaseERC20CrossChain", + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404", + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol:15" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1199_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)1189_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol:ComplianceTokenCMTATLiteUpgradeable": { + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol:14", + "version": { + "withMetadata": "db38abf5f16c87ed384927366e36f1e567ea2df32156ea0c7a1b622331c69cd2", + "withoutMetadata": "39cbf1f05fe0e110de1b80bbc61b60b52e48cd53af283526694ed266d796dfd3", + "linkedWithoutMetadata": "39cbf1f05fe0e110de1b80bbc61b60b52e48cd53af283526694ed266d796dfd3" + }, + "inherit": [ + "contracts/modules/lite/CCTCMTATBaseERC2771.sol:CCTCMTATBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:CCTCMTATBaseERC20CrossChain", + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404", + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address,address,(string,string,uint8),(string,(string,string,bytes32),string),address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol:14" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1199_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)1189_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol:ComplianceTokenCMTATStandalone": { + "src": "contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol:15", + "version": { + "withMetadata": "db8f6507436802adebf2350bf309c9e522b5c79e08f164a0c30be3e1cb56b62b", + "withoutMetadata": "db8f6507436802adebf2350bf309c9e522b5c79e08f164a0c30be3e1cb56b62b", + "linkedWithoutMetadata": "db8f6507436802adebf2350bf309c9e522b5c79e08f164a0c30be3e1cb56b62b" + }, + "inherit": [ + "contracts/modules/standard/CCTBaseERC2771.sol:CCTBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/standard/CCTCommon.sol:CCTCommon", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address,address,(string,string,uint8),(string,(string,string,bytes32),string),address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol:15" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol:ComplianceTokenCMTATUUPSUpgradeable": { + "src": "contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol:15", + "version": { + "withMetadata": "8b49ac33084336571c3756733d14e120ff7f7cdd1ac76eafe5d77f5ab380bac9", + "withoutMetadata": "1ea86946c9d8204f5a60b4f36683b9a027dcd640c1ceb3d35607badc253b6360", + "linkedWithoutMetadata": "1ea86946c9d8204f5a60b4f36683b9a027dcd640c1ceb3d35607badc253b6360" + }, + "inherit": [ + "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol:UUPSUpgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC1822.sol:IERC1822Proxiable", + "contracts/modules/standard/CCTBaseERC2771.sol:CCTBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/standard/CCTCommon.sol:CCTCommon", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol:15" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol:ComplianceTokenCMTATUpgradeable": { + "src": "contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol:14", + "version": { + "withMetadata": "df7304ba3ae4004c14a69f1ac28192959ecd5f096e765743aa2ce1e16f3a90af", + "withoutMetadata": "fdc5ad59e3b14da395ab0c6fd02ef92e8d5f154257b58b9eef486348b24d8a9b", + "linkedWithoutMetadata": "fdc5ad59e3b14da395ab0c6fd02ef92e8d5f154257b58b9eef486348b24d8a9b" + }, + "inherit": [ + "contracts/modules/standard/CCTBaseERC2771.sol:CCTBaseERC2771", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/standard/CCTCommon.sol:CCTCommon", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "(address)" + ], + "linkReferences": [], + "errors": [ + { + "kind": "missing-initializer", + "src": "contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol:14" + } + ], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/chainlink-ace-modified/MintBurnExtractor.sol:MintBurnExtractor": { + "src": "contracts/modules/chainlink-ace-modified/MintBurnExtractor.sol:18", + "version": { + "withMetadata": "2865c01cbaad13e6283ecee5782ace5fb0a8d6d573ae3669eebcf5daf298f1e7", + "withoutMetadata": "fd8ce46dbcf92c8bdbcdae51baef8260f89965791f26b1c82badfb34b19a8c56", + "linkedWithoutMetadata": "fd8ce46dbcf92c8bdbcdae51baef8260f89965791f26b1c82badfb34b19a8c56" + }, + "inherit": [ + "@chainlink/policy-management/interfaces/IExtractor.sol:IExtractor" + ], + "libraries": [], + "methods": [ + "extract((bytes4,address,bytes,bytes))" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol:TransferValidationPolicy": { + "src": "contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol:22", + "version": { + "withMetadata": "298b8f50306dfcdebe4c5ae2b861562e547f9c1a641f42bc162c0d45c25ad993", + "withoutMetadata": "82b07047080f08dcec0d8928c4f0a04a7d4c3dc57b7586e4beb09eb434eec753", + "linkedWithoutMetadata": "82b07047080f08dcec0d8928c4f0a04a7d4c3dc57b7586e4beb09eb434eec753" + }, + "inherit": [ + "@chainlink/policy-management/core/Policy.sol:Policy", + "@chainlink/policy-management/interfaces/IPolicy.sol:IPolicy", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "setMaxTransferAmount(uint256)", + "setMaxMintAmount(uint256)", + "getMaxTransferAmount()", + "getMaxMintAmount()", + "run(address,address,bytes4,bytes[],bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyStorage)201_storage": { + "label": "struct Policy.PolicyStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(TransferValidationPolicyStorage)2849_storage": { + "label": "struct TransferValidationPolicy.TransferValidationPolicyStorage", + "members": [ + { + "label": "maxTransferAmount", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "maxMintAmount", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.TransferValidationPolicy": [ + { + "contract": "TransferValidationPolicy", + "label": "maxTransferAmount", + "type": "t_uint256", + "src": "contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol:40", + "offset": 0, + "slot": "0" + }, + { + "contract": "TransferValidationPolicy", + "label": "maxMintAmount", + "type": "t_uint256", + "src": "contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol:42", + "offset": 0, + "slot": "1" + } + ], + "erc7201:chainlink.ace.Policy": [ + { + "contract": "Policy", + "label": "policyEngine", + "type": "t_address", + "src": "@chainlink/policy-management/core/Policy.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404": { + "src": "contracts/modules/lite/CCTCMTATBaseERC1404.sol:13", + "inherit": [ + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "messageForTransferRestriction(uint8)", + "canTransfer(address,address,uint256)", + "canTransferFrom(address,address,address,uint256)", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1199_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)1189_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:CCTCMTATBaseERC20CrossChain": { + "src": "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:14", + "inherit": [ + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404", + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "transfer(address,uint256)", + "transferFrom(address,address,uint256)", + "decimals()", + "name()", + "symbol()", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1199_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)1189_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/CCTCMTATBaseERC2771.sol:CCTCMTATBaseERC2771": { + "src": "contracts/modules/lite/CCTCMTATBaseERC2771.sol:9", + "inherit": [ + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol:CCTCMTATBaseERC20CrossChain", + "contracts/modules/lite/CCTCMTATBaseERC1404.sol:CCTCMTATBaseERC1404", + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1199_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)1189_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:CCTCMTATBasePolicyEngine": { + "src": "contracts/modules/lite/CCTCMTATBasePolicyEngine.sol:21", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError", + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "initialize(address,(string,string,uint8),(string,(string,string,bytes32),string),address)", + "canTransfer(address,address,uint256)", + "canTransferFrom(address,address,address,uint256)", + "attachPolicyEngine(address)", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1199_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)1189_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/PolicyValidationModuleERC1404.sol:PolicyValidationModuleERC1404": { + "src": "contracts/modules/lite/PolicyValidationModuleERC1404.sol:15", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "messageForTransferRestriction(uint8)", + "detectTransferRestriction(address,address,uint256)", + "detectTransferRestrictionFrom(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/lite/ValidationModulePolicyEngine.sol:ValidationModulePolicyEngine": { + "src": "contracts/modules/lite/ValidationModulePolicyEngine.sol:10", + "inherit": [ + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "canTransfer(address,address,uint256)", + "canTransferFrom(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/standard/CCTBaseERC2771.sol:CCTBaseERC2771": { + "src": "contracts/modules/standard/CCTBaseERC2771.sol:13", + "inherit": [ + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module", + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "contracts/modules/standard/CCTCommon.sol:CCTCommon", + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "contracts/modules/standard/CCTCommon.sol:CCTCommon": { + "src": "contracts/modules/standard/CCTCommon.sol:34", + "inherit": [ + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule", + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin", + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:PolicyProtectedUpgradeable", + "@chainlink/policy-management/interfaces/IPolicyProtected.sol:IPolicyProtected", + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "initialize(address,(string,string,uint8),(string,(string,string,bytes32),string),address)", + "transfer(address,uint256)", + "transferFrom(address,address,uint256)", + "attachPolicyEngine(address)", + "decimals()", + "name()", + "symbol()", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IPolicyEngine)756": { + "label": "contract IPolicyEngine", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bytes_storage)": { + "label": "mapping(address => bytes)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)1329_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PolicyProtectedStorage)335_storage": { + "label": "struct PolicyProtectedUpgradeable.PolicyProtectedStorage", + "members": [ + { + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "offset": 0, + "slot": "0" + }, + { + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:chainlink.ace.PolicyProtected": [ + { + "contract": "PolicyProtectedUpgradeable", + "label": "policyEngine", + "type": "t_contract(IPolicyEngine)756", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:20", + "offset": 0, + "slot": "0" + }, + { + "contract": "PolicyProtectedUpgradeable", + "label": "senderContext", + "type": "t_mapping(t_address,t_bytes_storage)", + "src": "@chainlink/policy-management/core/PolicyProtectedUpgradeable.sol:21", + "offset": 0, + "slot": "1" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol:IDocumentEngine": { + "src": "submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol:9", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol:IRuleEngine": { + "src": "submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol:13", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643IComplianceContract", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead" + ], + "libraries": [], + "methods": [ + "transferred(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol:IRuleEngineERC1404": { + "src": "submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol:33", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/engine/IRuleEngine.sol:IRuleEngine", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643IComplianceContract", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance": { + "src": "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:30", + "inherit": [], + "libraries": [], + "methods": [ + "batchBalanceOf(address[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:ISnapshotEngine": { + "src": "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:8", + "inherit": [], + "libraries": [], + "methods": [ + "operateOnTransfer(address,address,uint256,uint256,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule": { + "src": "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:12", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643" + ], + "libraries": [], + "methods": [ + "setDocumentEngine(address)", + "documentEngine()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule": { + "src": "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:13", + "inherit": [], + "libraries": [], + "methods": [ + "setSnapshotEngine(address)", + "snapshotEngine()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol:ICMTATConstructor": { + "src": "submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol:11", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:9", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:41", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:24", + "inherit": [], + "libraries": [], + "methods": [ + "burn(address,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:7", + "inherit": [], + "libraries": [], + "methods": [ + "mint(address,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:7", + "inherit": [ + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165" + ], + "libraries": [], + "methods": [ + "crosschainMint(address,uint256)", + "crosschainBurn(address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:4", + "inherit": [], + "libraries": [], + "methods": [ + "getCCIPAdmin()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:59", + "inherit": [], + "libraries": [], + "methods": [ + "batchBurn(address[],uint256[],bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:98", + "inherit": [], + "libraries": [], + "methods": [ + "burnFrom(address,uint256)", + "burn(uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:29", + "inherit": [], + "libraries": [], + "methods": [ + "burnAndMint(address,address,uint256,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IForcedBurnERC20": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:41", + "inherit": [], + "libraries": [], + "methods": [ + "forcedBurn(address,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event": { + "src": "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:10", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:60", + "inherit": [], + "libraries": [], + "methods": [ + "tokenId()", + "terms()", + "information()", + "setTokenId(string)", + "setTerms((string,string,bytes32))", + "setInformation(string)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATCreditEvents": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:130", + "inherit": [], + "libraries": [], + "methods": [ + "creditEvents()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:26", + "inherit": [], + "libraries": [], + "methods": [ + "deactivateContract()", + "deactivated()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDebt": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:146", + "inherit": [], + "libraries": [], + "methods": [ + "debt()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:69", + "inherit": [], + "libraries": [], + "methods": [ + "batchTransfer(address[],uint256[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:225", + "inherit": [], + "libraries": [], + "methods": [ + "burn(address,uint256)", + "batchBurn(address[],uint256[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:257", + "inherit": [], + "libraries": [], + "methods": [ + "canTransfer(address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:49", + "inherit": [], + "libraries": [], + "methods": [ + "setName(string)", + "setSymbol(string)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:171", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement" + ], + "libraries": [], + "methods": [ + "freezePartialTokens(address,uint256)", + "unfreezePartialTokens(address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:142", + "inherit": [], + "libraries": [], + "methods": [ + "isFrozen(address)", + "setAddressFrozen(address,bool)", + "batchSetAddressFrozen(address[],bool[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:116", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643IComplianceContract": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:269", + "inherit": [], + "libraries": [], + "methods": [ + "transferred(address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:194", + "inherit": [], + "libraries": [], + "methods": [ + "mint(address,uint256)", + "batchMint(address[],uint256[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:20", + "inherit": [], + "libraries": [], + "methods": [ + "paused()", + "pause()", + "unpause()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:103", + "inherit": [], + "libraries": [], + "methods": [ + "version()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "detectTransferRestriction(address,address,uint256)", + "messageForTransferRestriction(uint8)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404Extend": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:45", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol:IERC1404" + ], + "libraries": [], + "methods": [ + "detectTransferRestrictionFrom(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:10", + "inherit": [], + "libraries": [], + "methods": [ + "getDocument(string)", + "getAllDocuments()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643CMTAT.sol:IERC1643CMTAT": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643CMTAT.sol:7", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:25", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:146", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead" + ], + "libraries": [], + "methods": [ + "canTransferFrom(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Document": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:164", + "inherit": [], + "libraries": [], + "methods": [ + "termsHash()", + "setTerms(bytes32,string)", + "metaData()", + "setMetaData(string)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:93", + "inherit": [], + "libraries": [], + "methods": [ + "getActiveBalanceOf(address)", + "getFrozenTokens(address)", + "freezePartialTokens(address,uint256,bytes)", + "unfreezePartialTokens(address,uint256,bytes)", + "forcedTransfer(address,address,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:58", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:69", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:12", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:36", + "inherit": [], + "libraries": [], + "methods": [ + "paused()", + "pause()", + "unpause()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:9", + "inherit": [], + "libraries": [], + "methods": [ + "getFrozenTokens(address)", + "forcedTransfer(address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:52", + "inherit": [], + "libraries": [], + "methods": [ + "setFrozenTokens(address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:63", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:113", + "inherit": [], + "libraries": [], + "methods": [ + "canTransact(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransferError": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:103", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError": { + "src": "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:91", + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon": { + "src": "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:23", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "decimals()", + "name()", + "symbol()", + "transfer(address,uint256)", + "transferFrom(address,address,uint256)", + "burnAndMint(address,address,uint256,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:CMTATBaseAccessControl": { + "src": "submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol:23", + "inherit": [ + "submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol:CMTATBaseCommon", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679", + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule", + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnMintERC20", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule", + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule", + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1199_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoleData)1189_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal": { + "src": "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:13", + "inherit": [ + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal": { + "src": "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:17", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal": { + "src": "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:13", + "inherit": [ + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal": { + "src": "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:15", + "inherit": [ + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [ + "submodules/CMTAT/contracts/modules/internal/common/EnforcementModuleLibrary.sol:EnforcementModuleLibrary" + ], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/internal/common/EnforcementModuleLibrary.sol:EnforcementModuleLibrary": { + "src": "submodules/CMTAT/contracts/modules/internal/common/EnforcementModuleLibrary.sol:10", + "version": { + "withMetadata": "19c513987d731636c34c64db80a9d19115265d444b3270dee763461882874dc9", + "withoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84", + "linkedWithoutMetadata": "7d0b86f2a3a59632b81bdfef84dcf6a4bd953ba90926be93775a83e7690dda84" + }, + "inherit": [], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:16", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "canTransact(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:ERC20BaseModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol:21", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol:IERC20BatchBalance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Base", + "submodules/CMTAT/contracts/interfaces/technical/IERC20Allowance.sol:IERC20Allowance", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "transferFrom(address,address,uint256)", + "decimals()", + "name()", + "symbol()", + "setName(string)", + "setSymbol(string)", + "batchBalanceOf(address[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:18", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "burn(address,uint256,bytes)", + "burn(address,uint256)", + "batchBurn(address[],uint256[],bytes)", + "batchBurn(address[],uint256[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:19", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "mint(address,uint256,bytes)", + "mint(address,uint256)", + "batchMint(address[],uint256[])", + "batchTransfer(address[],uint256[])" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:15", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "setAddressFrozen(address,bool)", + "setAddressFrozen(address,bool,bytes)", + "batchSetAddressFrozen(address[],bool[])", + "isFrozen(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:24", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "pause()", + "unpause()", + "deactivateContract()", + "paused()", + "deactivated()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:ValidationModuleCore": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol:15", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Compliance", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ComplianceRead", + "submodules/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol:ValidationModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleTransactCheck", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943TransactError", + "submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol:EnforcementModule", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643EnforcementEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Enforcement", + "submodules/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol:EnforcementModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol:PauseModule", + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATDeactivate", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Pause", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Pause", + "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:PausableUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "canTransfer(address,address,uint256)", + "canTransferFrom(address,address,address,uint256)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)1702_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:VersionModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol:14", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Version" + ], + "libraries": [], + "methods": [ + "version()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:DocumentEngineModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol:17", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/modules/IDocumentEngineModule.sol:IDocumentEngineModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol:IERC1643", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "documentEngine()", + "getDocument(string)", + "getAllDocuments()", + "setDocumentEngine(address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:ERC20EnforcementModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol:17", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20EnforcementSpecific", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943ERC20Enforcement", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20Enforcement", + "submodules/CMTAT/contracts/modules/internal/ERC20EnforcementModuleInternal.sol:ERC20EnforcementModuleInternal", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol:IERC7943FungibleEnforcementEventAndError", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementTokenFrozenEvent", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551ERC20EnforcementEvent", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "getFrozenTokens(address)", + "getActiveBalanceOf(address)", + "forcedTransfer(address,address,uint256,bytes)", + "forcedTransfer(address,address,uint256)", + "freezePartialTokens(address,uint256)", + "unfreezePartialTokens(address,uint256)", + "setFrozenTokens(address,uint256)", + "freezePartialTokens(address,uint256,bytes)", + "unfreezePartialTokens(address,uint256,bytes)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:ExtraInformationModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol:17", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/tokenization/ICMTAT.sol:ICMTATBase", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "setTokenId(string)", + "setTerms((string,string,bytes32))", + "setInformation(string)", + "tokenId()", + "terms()", + "information()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:SnapshotEngineModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol:16", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/modules/ISnapshotEngineModule.sol:ISnapshotEngineModule", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "setSnapshotEngine(address)", + "snapshotEngine()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:CCIPModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol:13", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IGetCCIPAdmin.sol:IGetCCIPAdmin" + ], + "libraries": [], + "methods": [ + "setCCIPAdmin(address)", + "getCCIPAdmin()" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": {}, + "layoutVersion": "1.2", + "flat": false, + "namespaces": {} + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:ERC20CrossChainModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol:21", + "inherit": [ + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnFromERC20", + "submodules/CMTAT/contracts/interfaces/technical/IERC7802.sol:IERC7802", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol:ERC20BurnModule", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Burn", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Burn", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Burn", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IBurnBatchERC20", + "submodules/CMTAT/contracts/modules/internal/ERC20BurnModuleInternal.sol:ERC20BurnModuleInternal", + "submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol:ERC20MintModule", + "submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol:IMintBatchERC20Event", + "submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7551.sol:IERC7551Mint", + "submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol:IERC5679Mint", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643BatchTransfer", + "submodules/CMTAT/contracts/interfaces/tokenization/IERC3643Partial.sol:IERC3643Mint", + "submodules/CMTAT/contracts/modules/internal/ERC20MintModuleInternal.sol:ERC20MintModuleInternal", + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable", + "@openzeppelin/contracts/interfaces/draft-IERC6093.sol:IERC20Errors", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol:IERC20Metadata", + "@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "crosschainMint(address,uint256)", + "crosschainBurn(address,uint256)", + "burnFrom(address,uint256)", + "burn(uint256)", + "supportsInterface(bytes4)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(ERC20Storage)1488_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:33", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:35", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:ERC2771Module": { + "src": "submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol:16", + "inherit": [ + "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol:ERC2771ContextUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + }, + "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:AccessControlModule": { + "src": "submodules/CMTAT/contracts/modules/wrapper/security/AccessControlModule.sol:8", + "inherit": [ + "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:AccessControlUpgradeable", + "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:ERC165Upgradeable", + "@openzeppelin/contracts/utils/introspection/IERC165.sol:IERC165", + "@openzeppelin/contracts/access/IAccessControl.sol:IAccessControl", + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable", + "@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable" + ], + "libraries": [], + "methods": [ + "hasRole(bytes32,address)" + ], + "linkReferences": [], + "errors": [], + "layout": { + "storage": [], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_struct(AccessControlStorage)1199_storage": { + "label": "struct AccessControlUpgradeable.AccessControlStorage", + "members": [ + { + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(InitializableStorage)2075_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoleData)1189_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "hasRole", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + } + }, + "layoutVersion": "1.2", + "flat": false, + "namespaces": { + "erc7201:openzeppelin.storage.AccessControl": [ + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)1189_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + }, + "solcVersion": "0.8.30" + } + } + ] +} \ No newline at end of file diff --git a/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol similarity index 82% rename from contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol rename to contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol index 6a69dda..2b3f323 100644 --- a/contracts/deployment/ComplianceTokenCMTATLiteStandalone.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol @@ -2,9 +2,9 @@ pragma solidity ^0.8.20; -import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; -import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {CCTCMTATBaseERC2771} from "../../modules/lite/CCTCMTATBaseERC2771.sol"; +import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; +import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; /** * @title ComplianceTokenCMTATLite diff --git a/contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol similarity index 87% rename from contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol rename to contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol index f2650d2..25a7ca7 100644 --- a/contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.20; import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; -import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; -import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {CCTCMTATBaseERC2771} from "../../modules/lite/CCTCMTATBaseERC2771.sol"; +import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; /** diff --git a/contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol similarity index 80% rename from contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol rename to contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol index 4b7ee01..e55e214 100644 --- a/contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol @@ -2,9 +2,9 @@ pragma solidity ^0.8.20; -import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; -import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {CCTCMTATBaseERC2771} from "../../modules/lite/CCTCMTATBaseERC2771.sol"; +import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; +import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; /** * @title ComplianceTokenCMTATLite diff --git a/contracts/deployment/ComplianceTokenCMTATStandalone.sol b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol similarity index 82% rename from contracts/deployment/ComplianceTokenCMTATStandalone.sol rename to contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol index e966bbb..652d1fa 100644 --- a/contracts/deployment/ComplianceTokenCMTATStandalone.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol @@ -2,9 +2,9 @@ pragma solidity ^0.8.20; -import {CCTBaseERC2771} from "../modules/standard/CCTBaseERC2771.sol"; -import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {CCTBaseERC2771} from "../../modules/standard/CCTBaseERC2771.sol"; +import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; +import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; /** diff --git a/contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol b/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol similarity index 86% rename from contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol rename to contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol index ca44049..26474d2 100644 --- a/contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.20; import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; -import {CCTBaseERC2771} from "../modules/standard/CCTBaseERC2771.sol"; -import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {CCTBaseERC2771} from "../../modules/standard/CCTBaseERC2771.sol"; +import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; /** diff --git a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol b/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol similarity index 77% rename from contracts/deployment/ComplianceTokenCMTATUpgradeable.sol rename to contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol index db88206..848cbc4 100644 --- a/contracts/deployment/ComplianceTokenCMTATUpgradeable.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.20; -import {CCTBaseERC2771} from "../modules/standard/CCTBaseERC2771.sol"; -import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {CCTBaseERC2771} from "../../modules/standard/CCTBaseERC2771.sol"; +import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; /** diff --git a/contracts/modules/chainlink-ace-modified/MintBurnExtractor.sol b/contracts/modules/chainlink-ace-modified/MintBurnExtractor.sol new file mode 100644 index 0000000..142180c --- /dev/null +++ b/contracts/modules/chainlink-ace-modified/MintBurnExtractor.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.20; + +import {IExtractor} from "@chainlink/policy-management/interfaces/IExtractor.sol"; +import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; + +/** + * @title MintBurnExtractor + * @notice Extracts parameters from CMTAT mint and burn function calls. + * @dev Mirrors ComplianceTokenMintBurnExtractor from @chainlink/ace but avoids + * the cross-package relative import of ComplianceTokenERC20 which is + * incompatible with Hardhat's module resolution. Selectors are inlined. + * Handles: + * - mint(address account, uint256 amount) → 0x40c10f19 + * - burnFrom(address account, uint256 amount) → 0x79cc6790 + * - burn(uint256 amount) → 0x42966c68 + */ +contract MintBurnExtractor is IExtractor { + string public constant override typeAndVersion = "MintBurnExtractor 1.0.0"; + + bytes32 public constant PARAM_ACCOUNT = keccak256("account"); + bytes32 public constant PARAM_AMOUNT = keccak256("amount"); + + // mint(address,uint256) + bytes4 private constant MINT_SELECTOR = bytes4(keccak256("mint(address,uint256)")); + // burnFrom(address,uint256) + bytes4 private constant BURN_FROM_SELECTOR = bytes4(keccak256("burnFrom(address,uint256)")); + // burn(uint256) + bytes4 private constant BURN_SELECTOR = bytes4(keccak256("burn(uint256)")); + + function extract(IPolicyEngine.Payload calldata payload) + external + pure + override + returns (IPolicyEngine.Parameter[] memory) + { + address account; + uint256 amount; + + if (payload.selector == MINT_SELECTOR || payload.selector == BURN_FROM_SELECTOR) { + (account, amount) = abi.decode(payload.data, (address, uint256)); + } else if (payload.selector == BURN_SELECTOR) { + account = payload.sender; + (amount) = abi.decode(payload.data, (uint256)); + } else { + revert IPolicyEngine.UnsupportedSelector(payload.selector); + } + + IPolicyEngine.Parameter[] memory result = new IPolicyEngine.Parameter[](2); + result[0] = IPolicyEngine.Parameter(PARAM_ACCOUNT, abi.encode(account)); + result[1] = IPolicyEngine.Parameter(PARAM_AMOUNT, abi.encode(amount)); + return result; + } +} diff --git a/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol b/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol index a432720..f0e8dbc 100644 --- a/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol +++ b/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.20; -import {IPolicyEngine} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; -import {IPolicyProtected} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyProtected.sol"; +import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; +import {IPolicyProtected} from "@chainlink/policy-management/interfaces/IPolicyProtected.sol"; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import {ERC165Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; diff --git a/contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol b/contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol new file mode 100644 index 0000000..f8930cc --- /dev/null +++ b/contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.20; + +import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; +import {Policy} from "@chainlink/policy-management/core/Policy.sol"; + +/** + * @title TransferValidationPolicy + * @notice A policy that validates ERC-20 transfers and mints against configurable amount limits. + * @dev Mimics CMTAT's RuleEngine validation pattern as a Chainlink ACE policy. + * + * This policy expects to be registered with the ERC20TransferExtractor, receiving three parameters: + * - parameters[0]: abi.encode(from) — sender address (address(0) for mints) + * - parameters[1]: abi.encode(to) — recipient address + * - parameters[2]: abi.encode(amount) — transfer amount + * + * Validation rules: + * - Mints (from == address(0)): rejected if amount > maxMintAmount + * - Standard transfers (from != address(0)): rejected if amount > maxTransferAmount + * - A limit of 0 means no restriction for that transfer type + */ +contract TransferValidationPolicy is Policy { + string public constant override typeAndVersion = "TransferValidationPolicy 1.0.0"; + + /** + * @notice Emitted when the maximum transfer amount is updated. + * @param maxTransferAmount The new maximum transfer amount. + */ + event MaxTransferAmountSet(uint256 maxTransferAmount); + + /** + * @notice Emitted when the maximum mint amount is updated. + * @param maxMintAmount The new maximum mint amount. + */ + event MaxMintAmountSet(uint256 maxMintAmount); + + /// @custom:storage-location erc7201:chainlink.ace.TransferValidationPolicy + struct TransferValidationPolicyStorage { + /// @notice Maximum amount allowed for standard transfers. 0 = no limit. + uint256 maxTransferAmount; + /// @notice Maximum amount allowed for mints. 0 = no limit. + uint256 maxMintAmount; + } + + // keccak256(abi.encode(uint256(keccak256("chainlink.ace.TransferValidationPolicy")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant TransferValidationPolicyStorageLocation = + 0xb4a6e2aee0be9e9e88c3153d71ee13d7f1b7e08f72e6a7e0b4e454e7d42f3e00; + + function _getTransferValidationPolicyStorage() + private + pure + returns (TransferValidationPolicyStorage storage $) + { + assembly { + $.slot := TransferValidationPolicyStorageLocation + } + } + + /** + * @notice Configures the policy with initial transfer and mint limits. + * @dev Decoded parameters: (uint256 maxTransferAmount, uint256 maxMintAmount). + * A value of 0 means no restriction for that type. + * @param parameters ABI-encoded (uint256, uint256). + */ + function configure(bytes calldata parameters) internal override { + (uint256 maxTransferAmount, uint256 maxMintAmount) = + abi.decode(parameters, (uint256, uint256)); + + TransferValidationPolicyStorage storage $ = _getTransferValidationPolicyStorage(); + $.maxTransferAmount = maxTransferAmount; + $.maxMintAmount = maxMintAmount; + + emit MaxTransferAmountSet(maxTransferAmount); + emit MaxMintAmountSet(maxMintAmount); + } + + /** + * @notice Updates the maximum transfer amount. + * @param maxTransferAmount The new limit. 0 disables the restriction. + */ + function setMaxTransferAmount(uint256 maxTransferAmount) external onlyOwner { + TransferValidationPolicyStorage storage $ = _getTransferValidationPolicyStorage(); + require(maxTransferAmount != $.maxTransferAmount, "value same as current"); + $.maxTransferAmount = maxTransferAmount; + emit MaxTransferAmountSet(maxTransferAmount); + } + + /** + * @notice Updates the maximum mint amount. + * @param maxMintAmount The new limit. 0 disables the restriction. + */ + function setMaxMintAmount(uint256 maxMintAmount) external onlyOwner { + TransferValidationPolicyStorage storage $ = _getTransferValidationPolicyStorage(); + require(maxMintAmount != $.maxMintAmount, "value same as current"); + $.maxMintAmount = maxMintAmount; + emit MaxMintAmountSet(maxMintAmount); + } + + /// @notice Returns the current maximum transfer amount. 0 means no limit. + function getMaxTransferAmount() external view returns (uint256) { + return _getTransferValidationPolicyStorage().maxTransferAmount; + } + + /// @notice Returns the current maximum mint amount. 0 means no limit. + function getMaxMintAmount() external view returns (uint256) { + return _getTransferValidationPolicyStorage().maxMintAmount; + } + + /** + * @notice Validates the transfer against configured limits. + * @dev Expected parameters (mapped from ERC20TransferExtractor via policyParameterNames): + * parameters[0] = abi.encode(from) + * parameters[1] = abi.encode(to) + * parameters[2] = abi.encode(amount) + * @return result PolicyResult.Continue if the transfer is valid; reverts otherwise. + */ + function run( + address, /*caller*/ + address, /*subject*/ + bytes4, /*selector*/ + bytes[] calldata parameters, + bytes calldata /*context*/ + ) + public + view + override + returns (IPolicyEngine.PolicyResult) + { + if (parameters.length != 3) { + revert InvalidParameters("expected 3 parameters: from, to, amount"); + } + + address from = abi.decode(parameters[0], (address)); + // to is not used for validation but is decoded for completeness + // address to = abi.decode(parameters[1], (address)); + uint256 amount = abi.decode(parameters[2], (uint256)); + + TransferValidationPolicyStorage storage $ = _getTransferValidationPolicyStorage(); + + if (from == address(0)) { + // Mint: check against mint limit + if ($.maxMintAmount > 0 && amount > $.maxMintAmount) { + revert IPolicyEngine.PolicyRejected("mint amount exceeds maximum"); + } + } else { + // Standard transfer or burn: check against transfer limit + if ($.maxTransferAmount > 0 && amount > $.maxTransferAmount) { + revert IPolicyEngine.PolicyRejected("transfer amount exceeds maximum"); + } + } + + return IPolicyEngine.PolicyResult.Continue; + } +} diff --git a/contracts/modules/demo/DemoImports.sol b/contracts/modules/demo/DemoImports.sol new file mode 100644 index 0000000..f294f3c --- /dev/null +++ b/contracts/modules/demo/DemoImports.sol @@ -0,0 +1,13 @@ +//SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +// This import ensures Hardhat compiles MockV3Aggregator so it is available +// as an artifact for deployment scripts. + +import {MockV3Aggregator} from "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol"; +import {PolicyEngine} from "@chainlink/policy-management/core/PolicyEngine.sol"; +import {PausePolicy} from "@chainlink/policy-management/policies/PausePolicy.sol"; +import {RoleBasedAccessControlPolicy} from "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol"; +import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMintPolicy.sol"; + \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index e2cef08..8c461bf 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -6,7 +6,7 @@ import {CMTATBaseCommon, CMTATBaseAccessControl} from "../../../submodules/CMTAT import {PolicyProtectedUpgradeable} from "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol"; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {IPolicyEngine} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; +import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index ddcb8b6..179bbf9 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {PolicyProtectedUpgradeable} from "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol"; -import {IPolicyEngine} from "@chainlink/ace/packages/policy-management/src/interfaces/IPolicyEngine.sol"; +import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedUpgradeable { diff --git a/contracts/test/PolicyEngineImport.sol b/contracts/test/PolicyEngineImport.sol deleted file mode 100644 index bce4f48..0000000 --- a/contracts/test/PolicyEngineImport.sol +++ /dev/null @@ -1,8 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.26; - -// Import PolicyEngine to make it available for Hardhat compilation and testing -import {PolicyEngine} from "@chainlink/ace/packages/policy-management/src/core/PolicyEngine.sol"; -// Use local modified copies with Hardhat-compatible import paths -import {PausePolicy} from "../modules/chainlink-ace-modified/PausePolicy.sol"; -import {RoleBasedAccessControlPolicy} from "../modules/chainlink-ace-modified/RoleBasedAccessControlPolicy.sol"; diff --git a/foundry.toml b/foundry.toml new file mode 100644 index 0000000..ae7a501 --- /dev/null +++ b/foundry.toml @@ -0,0 +1,7 @@ +[profile.default] +src = "contracts" +remappings = [ + "@chainlink/policy-management/=node_modules/@chainlink/ace/packages/policy-management/src/", + "@chainlink/cross-chain-identity/=node_modules/@chainlink/ace/packages/cross-chain-identity/src/", + "@chainlink/contracts/=node_modules/@chainlink/contracts/", +] diff --git a/hardhat.config.js b/hardhat.config.js index 55f5188..3474e20 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,3 +1,4 @@ +require('@nomicfoundation/hardhat-foundry') require('@nomicfoundation/hardhat-chai-matchers') require('@openzeppelin/hardhat-upgrades') diff --git a/package-lock.json b/package-lock.json index 4bd0a38..c391304 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@chainlink/ace": "^1.0.0", "@chainlink/contracts": "1.3.0", "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", + "@nomicfoundation/hardhat-foundry": "^1.2.1", "@nomicfoundation/hardhat-network-helpers": "^1.1.2", "@openzeppelin/contracts": "5.5.0", "@openzeppelin/contracts-upgradeable": "5.5.0", @@ -2205,6 +2206,19 @@ "hardhat": "^2.28.0" } }, + "node_modules/@nomicfoundation/hardhat-foundry": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.2.1.tgz", + "integrity": "sha512-pH1KeyI0sysgi7I7uQKPLXWl895EkuS6V41rSi820Ipqp/FScIwDh27RbevgC9zJ4ufSsSz34njm9cvRMGMNVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.0" + }, + "peerDependencies": { + "hardhat": "^2.26.0" + } + }, "node_modules/@nomicfoundation/hardhat-network-helpers": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz", @@ -9940,6 +9954,15 @@ "lodash.isequal": "^4.5.0" } }, + "@nomicfoundation/hardhat-foundry": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.2.1.tgz", + "integrity": "sha512-pH1KeyI0sysgi7I7uQKPLXWl895EkuS6V41rSi820Ipqp/FScIwDh27RbevgC9zJ4ufSsSz34njm9cvRMGMNVA==", + "dev": true, + "requires": { + "picocolors": "^1.1.0" + } + }, "@nomicfoundation/hardhat-network-helpers": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz", diff --git a/package.json b/package.json index 6d0a9cb..a9f6142 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "version": "1.0.0", "description": "", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "slither": "./scripts/slither.sh" }, "repository": { "type": "git", @@ -15,6 +16,7 @@ "@chainlink/ace": "^1.0.0", "@chainlink/contracts": "1.3.0", "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", + "@nomicfoundation/hardhat-foundry": "^1.2.1", "@nomicfoundation/hardhat-network-helpers": "^1.1.2", "@openzeppelin/contracts": "5.5.0", "@openzeppelin/contracts-upgradeable": "5.5.0", diff --git a/remappings.txt b/remappings.txt new file mode 100644 index 0000000..68280d9 --- /dev/null +++ b/remappings.txt @@ -0,0 +1,3 @@ +@chainlink/policy-management/=node_modules/@chainlink/ace/packages/policy-management/src/ +@chainlink/cross-chain-identity/=node_modules/@chainlink/ace/packages/cross-chain-identity/src/ +@chainlink/contracts/=node_modules/@chainlink/contracts/ diff --git a/reports/.gitkeep b/reports/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/demo.js b/scripts/demo.js new file mode 100644 index 0000000..84821e4 --- /dev/null +++ b/scripts/demo.js @@ -0,0 +1,355 @@ +/** + * Demo deployment script + * + * Deploys: + * 1. PolicyEngine (proxy) + * 2. ComplianceTokenCMTATStandalone + * 3. PausePolicy (proxy) – added to all external functions + * 4. RoleBasedAccessControlPolicy (proxy) – added to all external functions + * 5. MintBurnExtractor + * 6. SecureMintPolicy (proxy) – added to mint function + * 7. MockV3Aggregator (Hardhat-only reserve price feed for SecureMint) + * + * Script example - do not use it for production + */ +const { ethers, upgrades } = require("hardhat"); +const { ZeroAddress, keccak256, toUtf8Bytes, AbiCoder } = require("ethers"); + +/* ============ Role Constants ============ */ +const MINTER_ROLE = keccak256(toUtf8Bytes("MINTER_ROLE")); +const BURNER_ROLE = keccak256(toUtf8Bytes("BURNER_ROLE")); +const BURNER_FROM_ROLE = keccak256(toUtf8Bytes("BURNER_FROM_ROLE")); +const ENFORCER_ROLE = keccak256(toUtf8Bytes("ENFORCER_ROLE")); +const ERC20ENFORCER_ROLE = keccak256(toUtf8Bytes("ERC20ENFORCER_ROLE")); +const DEFAULT_ADMIN_ROLE = "0x0000000000000000000000000000000000000000000000000000000000000000"; + +/* ============ Helpers ============ */ + +async function deployPolicyEngine(defaultAllow, initialOwner) { + const Factory = await ethers.getContractFactory("PolicyEngine"); + const policyEngine = await upgrades.deployProxy( + Factory, + [defaultAllow, initialOwner], + { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } + ); + await policyEngine.waitForDeployment(); + return policyEngine; +} + +async function deployRBACPolicy(policyEngineAddress, ownerAddress) { + const Factory = await ethers.getContractFactory("RoleBasedAccessControlPolicy"); + const rbacPolicy = await upgrades.deployProxy( + Factory, + [policyEngineAddress, ownerAddress, "0x"], + { initializer: "initialize", unsafeAllow: ["constructor", "missing-initializer", "missing-initializer-call"], silenceWarnings: true } + ); + await rbacPolicy.waitForDeployment(); + return rbacPolicy; +} + +async function deployPausePolicy(policyEngineAddress, ownerAddress, initiallyPaused = false) { + const abiCoder = AbiCoder.defaultAbiCoder(); + const configParams = abiCoder.encode(["bool"], [initiallyPaused]); + const Factory = await ethers.getContractFactory("PausePolicy"); + const pausePolicy = await upgrades.deployProxy( + Factory, + [policyEngineAddress, ownerAddress, configParams], + { initializer: "initialize", unsafeAllow: ["constructor", "missing-initializer", "missing-initializer-call"], silenceWarnings: true } + ); + await pausePolicy.waitForDeployment(); + return pausePolicy; +} + +async function deploySecureMintPolicy(policyEngineAddress, ownerAddress, configParams) { + const Factory = await ethers.getContractFactory("SecureMintPolicy"); + const secureMintPolicy = await upgrades.deployProxy( + Factory, + [policyEngineAddress, ownerAddress, configParams], + { initializer: "initialize", unsafeAllow: ["constructor", "missing-initializer", "missing-initializer-call"], silenceWarnings: true } + ); + await secureMintPolicy.waitForDeployment(); + return secureMintPolicy; +} + +async function deployMockAggregator(decimals, initialAnswer) { + const Factory = await ethers.getContractFactory("MockV3Aggregator"); + const mock = await Factory.deploy(decimals, initialAnswer); + await mock.waitForDeployment(); + return mock; +} + +async function main() { + const network = await ethers.provider.getNetwork(); + const isHardhatNetwork = network.chainId === 31337n; + + const signers = await ethers.getSigners(); + const deployer = signers[0]; + + if (isHardhatNetwork) { + console.log("Hardhat network detected, using account:", deployer.address); + } else { + console.log("Deploying to network:", network.name, "with account:", deployer.address); + } + + const admin = deployer.address; + const tokenDecimals = 8; + + /* ============================================================ + * 1. Deploy PolicyEngine (defaultAllow = true) + * ============================================================ */ + console.log("\n--- Step 1: Deploy PolicyEngine ---"); + const policyEngine = await deployPolicyEngine(true, admin); + const policyEngineAddress = await policyEngine.getAddress(); + console.log("PolicyEngine deployed to:", policyEngineAddress); + + /* ============================================================ + * 2. Deploy ComplianceTokenCMTATStandalone + * ============================================================ */ + console.log("\n--- Step 2: Deploy ComplianceTokenCMTATStandalone ---"); + const forwarderIrrevocable = ZeroAddress; + const ERC20Attributes = { + name: "Security Token", + symbol: "ST", + decimalsIrrevocable: tokenDecimals, + }; + const terms = { + name: "Token Terms v1", + uri: "https://cmta.ch/standards/cmta-token-cmtat", + documentHash: keccak256(toUtf8Bytes("terms-v1")), + }; + const extraInformationAttributes = { + tokenId: "1234567890", + terms: terms, + information: "CMTAT smart contract", + }; + + const CMTATFactory = await ethers.getContractFactory("ComplianceTokenCMTATStandalone", deployer); + const cmtat = await CMTATFactory.deploy( + forwarderIrrevocable, + admin, + ERC20Attributes, + extraInformationAttributes, + policyEngineAddress + ); + await cmtat.waitForDeployment(); + const cmtatAddress = await cmtat.getAddress(); + console.log("ComplianceTokenCMTATStandalone deployed to:", cmtatAddress); + + /* ============================================================ + * 3. Deploy PausePolicy + * ============================================================ */ + console.log("\n--- Step 3: Deploy PausePolicy ---"); + const pausePolicy = await deployPausePolicy(policyEngineAddress, admin, false); + const pausePolicyAddress = await pausePolicy.getAddress(); + console.log("PausePolicy deployed to:", pausePolicyAddress, "(initially unpaused)"); + + /* ============================================================ + * 4. Deploy RoleBasedAccessControlPolicy + * ============================================================ */ + console.log("\n--- Step 4: Deploy RoleBasedAccessControlPolicy ---"); + const rbacPolicy = await deployRBACPolicy(policyEngineAddress, admin); + const rbacPolicyAddress = await rbacPolicy.getAddress(); + console.log("RoleBasedAccessControlPolicy deployed to:", rbacPolicyAddress); + + /* ============================================================ + * 5. Deploy MockV3Aggregator + SecureMintPolicy + * ============================================================ */ + console.log("\n--- Step 5: Deploy SecureMintPolicy ---"); + + // Deploy a mock reserve price feed (Hardhat only) + // Initial answer = 1,000,000 * 10^8 (reserves of 1M tokens with 8 decimals) + const reserveAmount = 1_000_000n * 10n ** BigInt(tokenDecimals); + const mockFeed = await deployMockAggregator(tokenDecimals, reserveAmount); + const mockFeedAddress = await mockFeed.getAddress(); + console.log("MockV3Aggregator (reserve feed) deployed to:", mockFeedAddress); + + // Encode SecureMintPolicy configuration parameters: + // (address reservesFeed, ReserveMarginConfigs(mode, amount), uint256 maxStalenessSeconds, TokenMetadata(tokenAddress, tokenDecimals)) + const abiCoder = AbiCoder.defaultAbiCoder(); + const secureMintConfigParams = abiCoder.encode( + ["address", "tuple(uint8,uint256)", "uint256", "tuple(address,uint8)"], + [ + mockFeedAddress, + [0, 0], // ReserveMarginMode.None, amount=0 + 0, // maxStalenessSeconds=0 (no staleness check for demo) + [cmtatAddress, tokenDecimals], + ] + ); + + const secureMintPolicy = await deploySecureMintPolicy(policyEngineAddress, admin, secureMintConfigParams); + const secureMintPolicyAddress = await secureMintPolicy.getAddress(); + console.log("SecureMintPolicy deployed to:", secureMintPolicyAddress); + + /* ============================================================ + * 6. Deploy MintBurnExtractor + * ============================================================ */ + console.log("\n--- Step 6: Deploy MintBurnExtractor ---"); + const ExtractorFactory = await ethers.getContractFactory("MintBurnExtractor"); + const mintBurnExtractor = await ExtractorFactory.deploy(); + await mintBurnExtractor.waitForDeployment(); + const extractorAddress = await mintBurnExtractor.getAddress(); + console.log("MintBurnExtractor deployed to:", extractorAddress); + + /* ============================================================ + * 7. Collect function selectors + * ============================================================ */ + console.log("\n--- Step 7: Configure PolicyEngine ---"); + + const selectors = { + // Mint / Burn + mint: cmtat.interface.getFunction("mint(address,uint256)").selector, + burn: cmtat.interface.getFunction("burn(address,uint256)").selector, + burnFrom: cmtat.interface.getFunction("burnFrom(address,uint256)").selector, + // Transfers + transfer: cmtat.interface.getFunction("transfer(address,uint256)").selector, + transferFrom: cmtat.interface.getFunction("transferFrom(address,address,uint256)").selector, + // Enforcement + forcedTransfer: cmtat.interface.getFunction("forcedTransfer(address,address,uint256)").selector, + freezePartial: cmtat.interface.getFunction("freezePartialTokens(address,uint256)").selector, + unfreezePartial: cmtat.interface.getFunction("unfreezePartialTokens(address,uint256)").selector, + // Admin + setName: cmtat.interface.getFunction("setName").selector, + setSymbol: cmtat.interface.getFunction("setSymbol").selector, + }; + + console.log("Function selectors:"); + for (const [name, sel] of Object.entries(selectors)) { + console.log(` ${name}: ${sel}`); + } + + /* ============================================================ + * 8. Register extractor for mint selector + * ============================================================ */ + console.log("\n--- Step 8: Set extractor for mint selector ---"); + await policyEngine.connect(deployer).setExtractor(selectors.mint, extractorAddress); + console.log("Extractor set for mint selector"); + + /* ============================================================ + * 9. Add PausePolicy to all external functions + * ============================================================ */ + console.log("\n--- Step 9: Add PausePolicy to all functions ---"); + const allSelectors = Object.entries(selectors); + for (const [name, sel] of allSelectors) { + await policyEngine.connect(deployer).addPolicy(cmtatAddress, sel, pausePolicyAddress, []); + console.log(` PausePolicy added for: ${name} (${sel})`); + } + + /* ============================================================ + * 10. Add RBAC policy to all external functions + * ============================================================ */ + console.log("\n--- Step 10: Add RBAC policy to all functions ---"); + for (const [name, sel] of allSelectors) { + await policyEngine.connect(deployer).addPolicy(cmtatAddress, sel, rbacPolicyAddress, []); + console.log(` RBAC policy added for: ${name} (${sel})`); + } + + /* ============================================================ + * 11. Add SecureMint policy to mint function + * ============================================================ */ + console.log("\n--- Step 11: Add SecureMint policy to mint ---"); + // SecureMintPolicy expects 1 parameter: "amount" + // The extractor produces parameters named keccak256("amount") and keccak256("account") + const PARAM_AMOUNT = keccak256(toUtf8Bytes("amount")); + await policyEngine.connect(deployer).addPolicy( + cmtatAddress, + selectors.mint, + secureMintPolicyAddress, + [PARAM_AMOUNT] + ); + console.log("SecureMint policy added for mint selector"); + + /* ============================================================ + * 12. Grant operation allowances on RBAC policy + * ============================================================ */ + console.log("\n--- Step 12: Grant RBAC operation allowances ---"); + + // Map selectors to their logical roles + const roleMapping = [ + { selector: selectors.mint, role: MINTER_ROLE, name: "mint → MINTER_ROLE" }, + { selector: selectors.burn, role: BURNER_ROLE, name: "burn → BURNER_ROLE" }, + { selector: selectors.burnFrom, role: BURNER_FROM_ROLE, name: "burnFrom → BURNER_FROM_ROLE" }, + { selector: selectors.transfer, role: DEFAULT_ADMIN_ROLE, name: "transfer → DEFAULT_ADMIN_ROLE" }, + { selector: selectors.transferFrom, role: DEFAULT_ADMIN_ROLE, name: "transferFrom → DEFAULT_ADMIN_ROLE" }, + { selector: selectors.forcedTransfer, role: ENFORCER_ROLE, name: "forcedTransfer → ENFORCER_ROLE" }, + { selector: selectors.freezePartial, role: ERC20ENFORCER_ROLE, name: "freezePartialTokens → ERC20ENFORCER_ROLE" }, + { selector: selectors.unfreezePartial, role: ERC20ENFORCER_ROLE, name: "unfreezePartialTokens → ERC20ENFORCER_ROLE" }, + { selector: selectors.setName, role: DEFAULT_ADMIN_ROLE, name: "setName → DEFAULT_ADMIN_ROLE" }, + { selector: selectors.setSymbol, role: DEFAULT_ADMIN_ROLE, name: "setSymbol → DEFAULT_ADMIN_ROLE" }, + ]; + + for (const { selector, role, name } of roleMapping) { + await rbacPolicy.connect(deployer).grantOperationAllowanceToRole(selector, role); + console.log(` ${name}`); + } + + /* ============================================================ + * 13. Grant roles to the admin account + * ============================================================ */ + console.log("\n--- Step 13: Grant roles to admin ---"); + const rolesToGrant = [ + { role: MINTER_ROLE, name: "MINTER_ROLE" }, + { role: BURNER_ROLE, name: "BURNER_ROLE" }, + { role: BURNER_FROM_ROLE, name: "BURNER_FROM_ROLE" }, + { role: ENFORCER_ROLE, name: "ENFORCER_ROLE" }, + { role: ERC20ENFORCER_ROLE, name: "ERC20ENFORCER_ROLE" }, + ]; + + for (const { role, name } of rolesToGrant) { + await rbacPolicy.connect(deployer).grantRole(role, admin); + console.log(` Granted ${name} to admin`); + } + + /* ============================================================ + * Summary + * ============================================================ */ + + // Resolve implementation addresses for all proxy-deployed contracts + const policyEngineImpl = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); + const pausePolicyImpl = await upgrades.erc1967.getImplementationAddress(pausePolicyAddress); + const rbacPolicyImpl = await upgrades.erc1967.getImplementationAddress(rbacPolicyAddress); + const secureMintPolicyImpl = await upgrades.erc1967.getImplementationAddress(secureMintPolicyAddress); + + // PolicyEngine uses Transparent Proxy, so it also has a ProxyAdmin + const policyEngineAdmin = await upgrades.erc1967.getAdminAddress(policyEngineAddress); + + console.log("\n========================================"); + console.log("Demo deployment complete!"); + console.log("========================================"); + + console.log("\n--- Proxy Contracts (interact via these addresses) ---"); + console.log("PolicyEngine (proxy): ", policyEngineAddress); + console.log("PausePolicy (proxy): ", pausePolicyAddress); + console.log("RBAC Policy (proxy): ", rbacPolicyAddress); + console.log("SecureMint Policy (proxy): ", secureMintPolicyAddress); + + console.log("\n--- Implementation Contracts ---"); + console.log("PolicyEngine (impl): ", policyEngineImpl); + console.log("PausePolicy (impl): ", pausePolicyImpl); + console.log("RBAC Policy (impl): ", rbacPolicyImpl); + console.log("SecureMint Policy (impl): ", secureMintPolicyImpl); + + console.log("\n--- Proxy Admin ---"); + console.log("PolicyEngine ProxyAdmin: ", policyEngineAdmin); + + console.log("\n--- Non-Proxy Contracts ---"); + console.log("Token (Standalone): ", cmtatAddress); + console.log("MintBurn Extractor: ", extractorAddress); + console.log("Mock Reserve Feed: ", mockFeedAddress); + + console.log("\n--- Configuration ---"); + console.log(`Reserve amount: 1,000,000 tokens (${reserveAmount} raw with ${tokenDecimals} decimals)`); + console.log("Admin account: ", admin); + + console.log("\n--- Policy Configuration ---"); + console.log(" - PausePolicy protects ALL listed external functions (initially unpaused)"); + console.log(" - RBAC policy protects ALL listed external functions"); + console.log(" - SecureMint policy protects mint() (reserve-backed minting)"); + console.log(" - Policy execution order per function: PausePolicy → RBAC → (SecureMint on mint)"); + console.log(" - Admin has MINTER, BURNER, BURNER_FROM, ENFORCER, ERC20ENFORCER roles"); + console.log("========================================"); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/deploy-lite.js b/scripts/lite/deploy-lite-standalone.js similarity index 52% rename from scripts/deploy-lite.js rename to scripts/lite/deploy-lite-standalone.js index d363279..704eb3f 100644 --- a/scripts/deploy-lite.js +++ b/scripts/lite/deploy-lite-standalone.js @@ -1,13 +1,16 @@ /** * Script example - do not use it for production */ -const { ethers } = require("hardhat"); +const { ethers, upgrades } = require("hardhat"); const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); - -async function deployPolicyEngine(deployer) { - const factory = await ethers.getContractFactory('PolicyEngine', deployer); - const contract = await factory.deploy(); +async function deployPolicyEngine(initialOwner) { + const Factory = await ethers.getContractFactory("PolicyEngine"); + const contract = await upgrades.deployProxy( + Factory, + [true, initialOwner], + { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } + ); await contract.waitForDeployment(); return contract; } @@ -16,44 +19,40 @@ async function main() { const network = await ethers.provider.getNetwork(); const isHardhatNetwork = network.chainId === 31337n; - let deployer; + const signers = await ethers.getSigners(); + const deployer = signers[0]; + if (isHardhatNetwork) { - const signers = await ethers.getSigners(); - deployer = signers[0]; console.log("Hardhat network detected, using account:", deployer.address); } else { - // On live networks, the deployer comes from the hardhat config (e.g. private key / mnemonic) - const signers = await ethers.getSigners(); - deployer = signers[0]; console.log("Deploying to network:", network.name, "with account:", deployer.address); } // To change - // Replace these with actual deployed contract addresses or deploy mocks before this const forwarderIrrevocable = ZeroAddress; const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; const ERC20Attributes = { name: "Security Token", symbol: "ST", - decimalsIrrevocable: 8 // Compliant with CMTAT spec but can be different + decimalsIrrevocable: 8, }; const terms = { name: "Token Terms v1", uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: keccak256(toUtf8Bytes("terms-v1")) + documentHash: keccak256(toUtf8Bytes("terms-v1")), }; const extraInformationAttributes = { - tokenId: "1234567890", // ISIN or identifier + tokenId: "1234567890", terms: terms, - information: "CMTAT smart contract" + information: "CMTAT smart contract", }; - const policyEngineContract = await deployPolicyEngine(deployer); + const policyEngineContract = await deployPolicyEngine(admin); const policyEngineAddress = await policyEngineContract.getAddress(); + const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); - // Get contract factory and deploy - const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTATLiteStandalone", deployer); - const cmtat = await CMTATStandalone.deploy( + const CMTATFactory = await ethers.getContractFactory("ComplianceTokenCMTATLiteStandalone", deployer); + const cmtat = await CMTATFactory.deploy( forwarderIrrevocable, admin, ERC20Attributes, @@ -62,11 +61,12 @@ async function main() { ); await cmtat.waitForDeployment(); - - console.log("ComplianceTokenCMTATLite deployed to:", await cmtat.getAddress()); + console.log("PolicyEngine (proxy): ", policyEngineAddress); + console.log("PolicyEngine (impl): ", policyEngineImplAddress); + console.log("ComplianceTokenCMTATLiteStandalone: ", await cmtat.getAddress()); } main().catch((error) => { console.error(error); process.exitCode = 1; -}); \ No newline at end of file +}); diff --git a/scripts/lite/deploy-lite-upgradeable.js b/scripts/lite/deploy-lite-upgradeable.js new file mode 100644 index 0000000..9c6c366 --- /dev/null +++ b/scripts/lite/deploy-lite-upgradeable.js @@ -0,0 +1,75 @@ +/** + * Script example - do not use it for production + */ +const { ethers, upgrades } = require("hardhat"); +const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); + +async function deployPolicyEngine(initialOwner) { + const Factory = await ethers.getContractFactory("PolicyEngine"); + const contract = await upgrades.deployProxy( + Factory, + [true, initialOwner], + { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } + ); + await contract.waitForDeployment(); + return contract; +} + +async function main() { + const network = await ethers.provider.getNetwork(); + const isHardhatNetwork = network.chainId === 31337n; + + const signers = await ethers.getSigners(); + const deployer = signers[0]; + + if (isHardhatNetwork) { + console.log("Hardhat network detected, using account:", deployer.address); + } else { + console.log("Deploying to network:", network.name, "with account:", deployer.address); + } + + // To change + const forwarderIrrevocable = ZeroAddress; + const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; + const ERC20Attributes = ["Security Token", "ST", 8]; + const terms = { + name: "Token Terms v1", + uri: "https://cmta.ch/standards/cmta-token-cmtat", + documentHash: keccak256(toUtf8Bytes("terms-v1")), + }; + const extraInformationAttributes = ["1234567890", [terms.name, terms.uri, terms.documentHash], "CMTAT smart contract"]; + + const policyEngineContract = await deployPolicyEngine(admin); + const policyEngineAddress = await policyEngineContract.getAddress(); + + const Factory = await ethers.getContractFactory("ComplianceTokenCMTATLiteUpgradeable", deployer); + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ERC20Attributes, + extraInformationAttributes, + policyEngineAddress, + ], + { + initializer: "initialize", + constructorArgs: [forwarderIrrevocable, admin, ERC20Attributes, extraInformationAttributes, policyEngineAddress], + unsafeAllow: ["missing-initializer", "constructor"], + silenceWarnings: true, + } + ); + + await cmtat.waitForDeployment(); + const cmtatProxyAddress = await cmtat.getAddress(); + const cmtatImplAddress = await upgrades.erc1967.getImplementationAddress(cmtatProxyAddress); + const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); + console.log("PolicyEngine (proxy): ", policyEngineAddress); + console.log("PolicyEngine (impl): ", policyEngineImplAddress); + console.log("ComplianceTokenCMTATLiteUpgradeable (proxy): ", cmtatProxyAddress); + console.log("ComplianceTokenCMTATLiteUpgradeable (impl): ", cmtatImplAddress); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/lite/deploy-lite-uups.js b/scripts/lite/deploy-lite-uups.js new file mode 100644 index 0000000..5551d54 --- /dev/null +++ b/scripts/lite/deploy-lite-uups.js @@ -0,0 +1,76 @@ +/** + * Script example - do not use it for production + */ +const { ethers, upgrades } = require("hardhat"); +const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); + +async function deployPolicyEngine(initialOwner) { + const Factory = await ethers.getContractFactory("PolicyEngine"); + const contract = await upgrades.deployProxy( + Factory, + [true, initialOwner], + { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } + ); + await contract.waitForDeployment(); + return contract; +} + +async function main() { + const network = await ethers.provider.getNetwork(); + const isHardhatNetwork = network.chainId === 31337n; + + const signers = await ethers.getSigners(); + const deployer = signers[0]; + + if (isHardhatNetwork) { + console.log("Hardhat network detected, using account:", deployer.address); + } else { + console.log("Deploying to network:", network.name, "with account:", deployer.address); + } + + // To change + const forwarderIrrevocable = ZeroAddress; + const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; + const ERC20Attributes = ["Security Token", "ST", 8]; + const terms = { + name: "Token Terms v1", + uri: "https://cmta.ch/standards/cmta-token-cmtat", + documentHash: keccak256(toUtf8Bytes("terms-v1")), + }; + const extraInformationAttributes = ["1234567890", [terms.name, terms.uri, terms.documentHash], "CMTAT smart contract"]; + + const policyEngineContract = await deployPolicyEngine(admin); + const policyEngineAddress = await policyEngineContract.getAddress(); + + const Factory = await ethers.getContractFactory("ComplianceTokenCMTATLiteUUPSUpgradeable", deployer); + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ERC20Attributes, + extraInformationAttributes, + policyEngineAddress, + ], + { + initializer: "initialize", + constructorArgs: [forwarderIrrevocable], + unsafeAllow: ["missing-initializer", "constructor"], + silenceWarnings: true, + kind: "uups", + } + ); + + await cmtat.waitForDeployment(); + const cmtatProxyAddress = await cmtat.getAddress(); + const cmtatImplAddress = await upgrades.erc1967.getImplementationAddress(cmtatProxyAddress); + const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); + console.log("PolicyEngine (proxy): ", policyEngineAddress); + console.log("PolicyEngine (impl): ", policyEngineImplAddress); + console.log("ComplianceTokenCMTATLiteUUPSUpgradeable (proxy): ", cmtatProxyAddress); + console.log("ComplianceTokenCMTATLiteUUPSUpgradeable (impl): ", cmtatImplAddress); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/slither.sh b/scripts/slither.sh new file mode 100755 index 0000000..6af8f30 --- /dev/null +++ b/scripts/slither.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -euo pipefail + +REPORTS_DIR="reports" +TIMESTAMP=$(date +"%Y%m%d_%H%M%S") +JSON_REPORT="${REPORTS_DIR}/slither-report-${TIMESTAMP}.json" +MD_REPORT="${REPORTS_DIR}/slither-report-${TIMESTAMP}.md" + +mkdir -p "$REPORTS_DIR" + +# Compile first so Slither can skip its own compile step +echo "Compiling contracts..." +npx hardhat compile + +echo "Running Slither analysis..." + +# Run Slither with JSON output +slither . --json "$JSON_REPORT" --checklist --markdown-root "$(pwd)/" > "$MD_REPORT" 2>&1 || true + +echo "" +echo "Reports generated:" +echo " JSON: $JSON_REPORT" +echo " Markdown: $MD_REPORT" diff --git a/scripts/deploy-standard.js b/scripts/standard/deploy-standard-standalone.js similarity index 51% rename from scripts/deploy-standard.js rename to scripts/standard/deploy-standard-standalone.js index 21ba026..e1cf55f 100644 --- a/scripts/deploy-standard.js +++ b/scripts/standard/deploy-standard-standalone.js @@ -1,12 +1,16 @@ /** * Script example - do not use it for production */ -const { ethers } = require("hardhat"); +const { ethers, upgrades } = require("hardhat"); const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); -async function deployPolicyEngine(deployer) { - const factory = await ethers.getContractFactory('PolicyEngine', deployer); - const contract = await factory.deploy(); +async function deployPolicyEngine(initialOwner) { + const Factory = await ethers.getContractFactory("PolicyEngine"); + const contract = await upgrades.deployProxy( + Factory, + [true, initialOwner], + { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } + ); await contract.waitForDeployment(); return contract; } @@ -15,57 +19,54 @@ async function main() { const network = await ethers.provider.getNetwork(); const isHardhatNetwork = network.chainId === 31337n; - let deployer; + const signers = await ethers.getSigners(); + const deployer = signers[0]; + if (isHardhatNetwork) { - const signers = await ethers.getSigners(); - deployer = signers[0]; console.log("Hardhat network detected, using account:", deployer.address); } else { - const signers = await ethers.getSigners(); - deployer = signers[0]; console.log("Deploying to network:", network.name, "with account:", deployer.address); } // To change - // Replace these with actual deployed contract addresses or deploy mocks before this const forwarderIrrevocable = ZeroAddress; const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; const ERC20Attributes = { name: "Security Token", symbol: "ST", - decimalsIrrevocable: 0 // Compliant with CMTAT spec but can be different + decimalsIrrevocable: 0, }; const terms = { name: "Token Terms v2", uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: keccak256(toUtf8Bytes("terms-v2")) + documentHash: keccak256(toUtf8Bytes("terms-v2")), }; const extraInformationAttributes = { - tokenId: "1234567890", // ISIN or identifier + tokenId: "1234567890", terms: terms, - information: "CMTAT smart contract" + information: "CMTAT smart contract", }; - const policyEngineContract = await deployPolicyEngine(deployer); + const policyEngineContract = await deployPolicyEngine(admin); const policyEngineAddress = await policyEngineContract.getAddress(); - console.log("Policy Engine deployed to:", policyEngineAddress); + const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); - // Get contract factory and deploy - const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTATStandalone", deployer); - const cmtat = await CMTATStandalone.deploy( + const CMTATFactory = await ethers.getContractFactory("ComplianceTokenCMTATStandalone", deployer); + const cmtat = await CMTATFactory.deploy( forwarderIrrevocable, admin, ERC20Attributes, extraInformationAttributes, - policyEngineAddress, + policyEngineAddress ); await cmtat.waitForDeployment(); - - console.log("ComplianceTokenCMTAT deployed to:", await cmtat.getAddress()); + console.log("PolicyEngine (proxy): ", policyEngineAddress); + console.log("PolicyEngine (impl): ", policyEngineImplAddress); + console.log("ComplianceTokenCMTATStandalone: ", await cmtat.getAddress()); } main().catch((error) => { console.error(error); process.exitCode = 1; -}); \ No newline at end of file +}); diff --git a/scripts/standard/deploy-standard-upgradeable.js b/scripts/standard/deploy-standard-upgradeable.js new file mode 100644 index 0000000..2534f46 --- /dev/null +++ b/scripts/standard/deploy-standard-upgradeable.js @@ -0,0 +1,75 @@ +/** + * Script example - do not use it for production + */ +const { ethers, upgrades } = require("hardhat"); +const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); + +async function deployPolicyEngine(initialOwner) { + const Factory = await ethers.getContractFactory("PolicyEngine"); + const contract = await upgrades.deployProxy( + Factory, + [true, initialOwner], + { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } + ); + await contract.waitForDeployment(); + return contract; +} + +async function main() { + const network = await ethers.provider.getNetwork(); + const isHardhatNetwork = network.chainId === 31337n; + + const signers = await ethers.getSigners(); + const deployer = signers[0]; + + if (isHardhatNetwork) { + console.log("Hardhat network detected, using account:", deployer.address); + } else { + console.log("Deploying to network:", network.name, "with account:", deployer.address); + } + + // To change + const forwarderIrrevocable = ZeroAddress; + const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; + const ERC20Attributes = ["Security Token", "ST", 0]; + const terms = { + name: "Token Terms v2", + uri: "https://cmta.ch/standards/cmta-token-cmtat", + documentHash: keccak256(toUtf8Bytes("terms-v2")), + }; + const extraInformationAttributes = ["1234567890", [terms.name, terms.uri, terms.documentHash], "CMTAT smart contract"]; + + const policyEngineContract = await deployPolicyEngine(admin); + const policyEngineAddress = await policyEngineContract.getAddress(); + + const Factory = await ethers.getContractFactory("ComplianceTokenCMTATUpgradeable", deployer); + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ERC20Attributes, + extraInformationAttributes, + policyEngineAddress, + ], + { + initializer: "initialize", + constructorArgs: [forwarderIrrevocable], + unsafeAllow: ["missing-initializer", "constructor"], + silenceWarnings: true, + } + ); + + await cmtat.waitForDeployment(); + const cmtatProxyAddress = await cmtat.getAddress(); + const cmtatImplAddress = await upgrades.erc1967.getImplementationAddress(cmtatProxyAddress); + const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); + console.log("PolicyEngine (proxy): ", policyEngineAddress); + console.log("PolicyEngine (impl): ", policyEngineImplAddress); + console.log("ComplianceTokenCMTATUpgradeable (proxy): ", cmtatProxyAddress); + console.log("ComplianceTokenCMTATUpgradeable (impl): ", cmtatImplAddress); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/standard/deploy-standard-uups.js b/scripts/standard/deploy-standard-uups.js new file mode 100644 index 0000000..82121a6 --- /dev/null +++ b/scripts/standard/deploy-standard-uups.js @@ -0,0 +1,76 @@ +/** + * Script example - do not use it for production + */ +const { ethers, upgrades } = require("hardhat"); +const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); + +async function deployPolicyEngine(initialOwner) { + const Factory = await ethers.getContractFactory("PolicyEngine"); + const contract = await upgrades.deployProxy( + Factory, + [true, initialOwner], + { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } + ); + await contract.waitForDeployment(); + return contract; +} + +async function main() { + const network = await ethers.provider.getNetwork(); + const isHardhatNetwork = network.chainId === 31337n; + + const signers = await ethers.getSigners(); + const deployer = signers[0]; + + if (isHardhatNetwork) { + console.log("Hardhat network detected, using account:", deployer.address); + } else { + console.log("Deploying to network:", network.name, "with account:", deployer.address); + } + + // To change + const forwarderIrrevocable = ZeroAddress; + const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; + const ERC20Attributes = ["Security Token", "ST", 0]; + const terms = { + name: "Token Terms v2", + uri: "https://cmta.ch/standards/cmta-token-cmtat", + documentHash: keccak256(toUtf8Bytes("terms-v2")), + }; + const extraInformationAttributes = ["1234567890", [terms.name, terms.uri, terms.documentHash], "CMTAT smart contract"]; + + const policyEngineContract = await deployPolicyEngine(admin); + const policyEngineAddress = await policyEngineContract.getAddress(); + + const Factory = await ethers.getContractFactory("ComplianceTokenCMTATUUPSUpgradeable", deployer); + const cmtat = await upgrades.deployProxy( + Factory, + [ + admin, + ERC20Attributes, + extraInformationAttributes, + policyEngineAddress, + ], + { + initializer: "initialize", + constructorArgs: [forwarderIrrevocable], + unsafeAllow: ["missing-initializer", "constructor"], + silenceWarnings: true, + kind: "uups", + } + ); + + await cmtat.waitForDeployment(); + const cmtatProxyAddress = await cmtat.getAddress(); + const cmtatImplAddress = await upgrades.erc1967.getImplementationAddress(cmtatProxyAddress); + const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); + console.log("PolicyEngine (proxy): ", policyEngineAddress); + console.log("PolicyEngine (impl): ", policyEngineImplAddress); + console.log("ComplianceTokenCMTATUUPSUpgradeable (proxy): ", cmtatProxyAddress); + console.log("ComplianceTokenCMTATUUPSUpgradeable (impl): ", cmtatImplAddress); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/slither.config.json b/slither.config.json new file mode 100644 index 0000000..9c5208f --- /dev/null +++ b/slither.config.json @@ -0,0 +1,5 @@ +{ + "filter_paths": "node_modules,submodules,contracts/test", + "hardhat_ignore_compile": false, + "compile_force_framework": "hardhat" +} From 51dc44ea8dc96261b676d4ac4b794fa6affd39c6 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Mon, 23 Mar 2026 15:45:39 +0000 Subject: [PATCH 17/57] remove unnecessary scripts --- scripts/deploy-lite.js | 72 -------------------------------------- scripts/deploy-standard.js | 71 ------------------------------------- 2 files changed, 143 deletions(-) delete mode 100644 scripts/deploy-lite.js delete mode 100644 scripts/deploy-standard.js diff --git a/scripts/deploy-lite.js b/scripts/deploy-lite.js deleted file mode 100644 index d363279..0000000 --- a/scripts/deploy-lite.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Script example - do not use it for production - */ -const { ethers } = require("hardhat"); -const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); - - -async function deployPolicyEngine(deployer) { - const factory = await ethers.getContractFactory('PolicyEngine', deployer); - const contract = await factory.deploy(); - await contract.waitForDeployment(); - return contract; -} - -async function main() { - const network = await ethers.provider.getNetwork(); - const isHardhatNetwork = network.chainId === 31337n; - - let deployer; - if (isHardhatNetwork) { - const signers = await ethers.getSigners(); - deployer = signers[0]; - console.log("Hardhat network detected, using account:", deployer.address); - } else { - // On live networks, the deployer comes from the hardhat config (e.g. private key / mnemonic) - const signers = await ethers.getSigners(); - deployer = signers[0]; - console.log("Deploying to network:", network.name, "with account:", deployer.address); - } - - // To change - // Replace these with actual deployed contract addresses or deploy mocks before this - const forwarderIrrevocable = ZeroAddress; - const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; - const ERC20Attributes = { - name: "Security Token", - symbol: "ST", - decimalsIrrevocable: 8 // Compliant with CMTAT spec but can be different - }; - const terms = { - name: "Token Terms v1", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: keccak256(toUtf8Bytes("terms-v1")) - }; - const extraInformationAttributes = { - tokenId: "1234567890", // ISIN or identifier - terms: terms, - information: "CMTAT smart contract" - }; - - const policyEngineContract = await deployPolicyEngine(deployer); - const policyEngineAddress = await policyEngineContract.getAddress(); - - // Get contract factory and deploy - const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTATLiteStandalone", deployer); - const cmtat = await CMTATStandalone.deploy( - forwarderIrrevocable, - admin, - ERC20Attributes, - extraInformationAttributes, - policyEngineAddress - ); - - await cmtat.waitForDeployment(); - - console.log("ComplianceTokenCMTATLite deployed to:", await cmtat.getAddress()); -} - -main().catch((error) => { - console.error(error); - process.exitCode = 1; -}); \ No newline at end of file diff --git a/scripts/deploy-standard.js b/scripts/deploy-standard.js deleted file mode 100644 index 21ba026..0000000 --- a/scripts/deploy-standard.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Script example - do not use it for production - */ -const { ethers } = require("hardhat"); -const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); - -async function deployPolicyEngine(deployer) { - const factory = await ethers.getContractFactory('PolicyEngine', deployer); - const contract = await factory.deploy(); - await contract.waitForDeployment(); - return contract; -} - -async function main() { - const network = await ethers.provider.getNetwork(); - const isHardhatNetwork = network.chainId === 31337n; - - let deployer; - if (isHardhatNetwork) { - const signers = await ethers.getSigners(); - deployer = signers[0]; - console.log("Hardhat network detected, using account:", deployer.address); - } else { - const signers = await ethers.getSigners(); - deployer = signers[0]; - console.log("Deploying to network:", network.name, "with account:", deployer.address); - } - - // To change - // Replace these with actual deployed contract addresses or deploy mocks before this - const forwarderIrrevocable = ZeroAddress; - const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; - const ERC20Attributes = { - name: "Security Token", - symbol: "ST", - decimalsIrrevocable: 0 // Compliant with CMTAT spec but can be different - }; - const terms = { - name: "Token Terms v2", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: keccak256(toUtf8Bytes("terms-v2")) - }; - const extraInformationAttributes = { - tokenId: "1234567890", // ISIN or identifier - terms: terms, - information: "CMTAT smart contract" - }; - - const policyEngineContract = await deployPolicyEngine(deployer); - const policyEngineAddress = await policyEngineContract.getAddress(); - console.log("Policy Engine deployed to:", policyEngineAddress); - - // Get contract factory and deploy - const CMTATStandalone = await ethers.getContractFactory("ComplianceTokenCMTATStandalone", deployer); - const cmtat = await CMTATStandalone.deploy( - forwarderIrrevocable, - admin, - ERC20Attributes, - extraInformationAttributes, - policyEngineAddress, - ); - - await cmtat.waitForDeployment(); - - console.log("ComplianceTokenCMTAT deployed to:", await cmtat.getAddress()); -} - -main().catch((error) => { - console.error(error); - process.exitCode = 1; -}); \ No newline at end of file From 579ab22de8abde656bf0949db71cc2ed58436e10 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Mon, 23 Mar 2026 15:46:17 +0000 Subject: [PATCH 18/57] remove transfer validation policy prototype --- .../TransferValidationPolicy.sol | 154 ------------------ 1 file changed, 154 deletions(-) delete mode 100644 contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol diff --git a/contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol b/contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol deleted file mode 100644 index f8930cc..0000000 --- a/contracts/modules/chainlink-ace-modified/TransferValidationPolicy.sol +++ /dev/null @@ -1,154 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.20; - -import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; -import {Policy} from "@chainlink/policy-management/core/Policy.sol"; - -/** - * @title TransferValidationPolicy - * @notice A policy that validates ERC-20 transfers and mints against configurable amount limits. - * @dev Mimics CMTAT's RuleEngine validation pattern as a Chainlink ACE policy. - * - * This policy expects to be registered with the ERC20TransferExtractor, receiving three parameters: - * - parameters[0]: abi.encode(from) — sender address (address(0) for mints) - * - parameters[1]: abi.encode(to) — recipient address - * - parameters[2]: abi.encode(amount) — transfer amount - * - * Validation rules: - * - Mints (from == address(0)): rejected if amount > maxMintAmount - * - Standard transfers (from != address(0)): rejected if amount > maxTransferAmount - * - A limit of 0 means no restriction for that transfer type - */ -contract TransferValidationPolicy is Policy { - string public constant override typeAndVersion = "TransferValidationPolicy 1.0.0"; - - /** - * @notice Emitted when the maximum transfer amount is updated. - * @param maxTransferAmount The new maximum transfer amount. - */ - event MaxTransferAmountSet(uint256 maxTransferAmount); - - /** - * @notice Emitted when the maximum mint amount is updated. - * @param maxMintAmount The new maximum mint amount. - */ - event MaxMintAmountSet(uint256 maxMintAmount); - - /// @custom:storage-location erc7201:chainlink.ace.TransferValidationPolicy - struct TransferValidationPolicyStorage { - /// @notice Maximum amount allowed for standard transfers. 0 = no limit. - uint256 maxTransferAmount; - /// @notice Maximum amount allowed for mints. 0 = no limit. - uint256 maxMintAmount; - } - - // keccak256(abi.encode(uint256(keccak256("chainlink.ace.TransferValidationPolicy")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 private constant TransferValidationPolicyStorageLocation = - 0xb4a6e2aee0be9e9e88c3153d71ee13d7f1b7e08f72e6a7e0b4e454e7d42f3e00; - - function _getTransferValidationPolicyStorage() - private - pure - returns (TransferValidationPolicyStorage storage $) - { - assembly { - $.slot := TransferValidationPolicyStorageLocation - } - } - - /** - * @notice Configures the policy with initial transfer and mint limits. - * @dev Decoded parameters: (uint256 maxTransferAmount, uint256 maxMintAmount). - * A value of 0 means no restriction for that type. - * @param parameters ABI-encoded (uint256, uint256). - */ - function configure(bytes calldata parameters) internal override { - (uint256 maxTransferAmount, uint256 maxMintAmount) = - abi.decode(parameters, (uint256, uint256)); - - TransferValidationPolicyStorage storage $ = _getTransferValidationPolicyStorage(); - $.maxTransferAmount = maxTransferAmount; - $.maxMintAmount = maxMintAmount; - - emit MaxTransferAmountSet(maxTransferAmount); - emit MaxMintAmountSet(maxMintAmount); - } - - /** - * @notice Updates the maximum transfer amount. - * @param maxTransferAmount The new limit. 0 disables the restriction. - */ - function setMaxTransferAmount(uint256 maxTransferAmount) external onlyOwner { - TransferValidationPolicyStorage storage $ = _getTransferValidationPolicyStorage(); - require(maxTransferAmount != $.maxTransferAmount, "value same as current"); - $.maxTransferAmount = maxTransferAmount; - emit MaxTransferAmountSet(maxTransferAmount); - } - - /** - * @notice Updates the maximum mint amount. - * @param maxMintAmount The new limit. 0 disables the restriction. - */ - function setMaxMintAmount(uint256 maxMintAmount) external onlyOwner { - TransferValidationPolicyStorage storage $ = _getTransferValidationPolicyStorage(); - require(maxMintAmount != $.maxMintAmount, "value same as current"); - $.maxMintAmount = maxMintAmount; - emit MaxMintAmountSet(maxMintAmount); - } - - /// @notice Returns the current maximum transfer amount. 0 means no limit. - function getMaxTransferAmount() external view returns (uint256) { - return _getTransferValidationPolicyStorage().maxTransferAmount; - } - - /// @notice Returns the current maximum mint amount. 0 means no limit. - function getMaxMintAmount() external view returns (uint256) { - return _getTransferValidationPolicyStorage().maxMintAmount; - } - - /** - * @notice Validates the transfer against configured limits. - * @dev Expected parameters (mapped from ERC20TransferExtractor via policyParameterNames): - * parameters[0] = abi.encode(from) - * parameters[1] = abi.encode(to) - * parameters[2] = abi.encode(amount) - * @return result PolicyResult.Continue if the transfer is valid; reverts otherwise. - */ - function run( - address, /*caller*/ - address, /*subject*/ - bytes4, /*selector*/ - bytes[] calldata parameters, - bytes calldata /*context*/ - ) - public - view - override - returns (IPolicyEngine.PolicyResult) - { - if (parameters.length != 3) { - revert InvalidParameters("expected 3 parameters: from, to, amount"); - } - - address from = abi.decode(parameters[0], (address)); - // to is not used for validation but is decoded for completeness - // address to = abi.decode(parameters[1], (address)); - uint256 amount = abi.decode(parameters[2], (uint256)); - - TransferValidationPolicyStorage storage $ = _getTransferValidationPolicyStorage(); - - if (from == address(0)) { - // Mint: check against mint limit - if ($.maxMintAmount > 0 && amount > $.maxMintAmount) { - revert IPolicyEngine.PolicyRejected("mint amount exceeds maximum"); - } - } else { - // Standard transfer or burn: check against transfer limit - if ($.maxTransferAmount > 0 && amount > $.maxTransferAmount) { - revert IPolicyEngine.PolicyRejected("transfer amount exceeds maximum"); - } - } - - return IPolicyEngine.PolicyResult.Continue; - } -} From e9d962d9338335dded4a13a4fd9eb6b5f21ecbe6 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Tue, 24 Mar 2026 21:40:23 +0000 Subject: [PATCH 19/57] Change branch to master for CMTAT submodule, delete no neccessary deployment files, fix approval and transfer check, fix tests --- .gitmodules | 2 +- ...omplianceTokenCMTATLiteUUPSUpgradeable.sol | 34 ------------------- .../ComplianceTokenCMTATLiteUpgradeable.sol | 33 ------------------ .../ComplianceTokenCMTATUUPSUpgradeable.sol | 32 ----------------- .../lite/CCTCMTATBaseERC20CrossChain.sol | 6 ++++ .../lite/ValidationModulePolicyEngine.sol | 15 ++++---- submodules/CMTAT | 2 +- 7 files changed, 14 insertions(+), 110 deletions(-) delete mode 100644 contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol delete mode 100644 contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol delete mode 100644 contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol diff --git a/.gitmodules b/.gitmodules index 40fe4b9..bac966d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "submodules/CMTAT"] path = submodules/CMTAT url = https://github.com/CMTA/CMTAT - branch = dev + branch = master \ No newline at end of file diff --git a/contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol deleted file mode 100644 index f2650d2..0000000 --- a/contracts/deployment/ComplianceTokenCMTATLiteUUPSUpgradeable.sol +++ /dev/null @@ -1,34 +0,0 @@ -//SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - -import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; -import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; -import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; - - -/** - * @title ComplianceTokenCMTATLiteUUPSUpgradeable - * @author Chainlink - * @notice UUPS upgradeable Lite ComplianceToken contract with Chainlink ACE policy validation on CMTA transfers - */ -contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC2771, UUPSUpgradeable { - bytes32 public constant PROXY_UPGRADE_ROLE = keccak256("PROXY_UPGRADE_ROLE"); - - /** - * @notice Contract version for UUPS proxy deployment - * @param forwarderIrrevocable address of the forwarder, required for the gasless support - */ - /// @custom:oz-upgrades-unsafe-allow constructor - constructor( - address forwarderIrrevocable - ) ERC2771Module(forwarderIrrevocable) { - // Disable the possibility to initialize the implementation - _disableInitializers(); - } - - /*////////////////////////////////////////////////////////////// - INTERNAL/PRIVATE FUNCTIONS - //////////////////////////////////////////////////////////////*/ - function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyRole(PROXY_UPGRADE_ROLE) {} -} diff --git a/contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol deleted file mode 100644 index 4b7ee01..0000000 --- a/contracts/deployment/ComplianceTokenCMTATLiteUpgradeable.sol +++ /dev/null @@ -1,33 +0,0 @@ -//SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - -import {CCTCMTATBaseERC2771} from "../modules/lite/CCTCMTATBaseERC2771.sol"; -import {ICMTATConstructor} from "../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; - -/** - * @title ComplianceTokenCMTATLite - * @author Chainlink - * @notice Standalone Compliance Token contract with Chainlink ACE policy validation on CMTA transfers - */ -contract ComplianceTokenCMTATLiteUpgradeable is CCTCMTATBaseERC2771 { - /** - * @notice Contract version for standalone deployment - * @param forwarderIrrevocable address of the forwarder, required for the gasless support - * @param admin address of the admin of contract (Access Control) - * @param ERC20Attributes_ ERC20 name, symbol and decimals - * @param extraInformationAttributes_ tokenId, terms, information - * @param snapshotEngine_ address of the snapshot engine - * @param documentEngine_ address of the document engine - * @param policyEngine_ address of the policy engine - */ - /// @custom:oz-upgrades-unsafe-allow constructor - constructor( - address forwarderIrrevocable, - address admin, - ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, - ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - address policyEngine_ - ) ERC2771Module(forwarderIrrevocable) {} -} \ No newline at end of file diff --git a/contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol b/contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol deleted file mode 100644 index ca44049..0000000 --- a/contracts/deployment/ComplianceTokenCMTATUUPSUpgradeable.sol +++ /dev/null @@ -1,32 +0,0 @@ -//SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - -import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; -import {CCTBaseERC2771} from "../modules/standard/CCTBaseERC2771.sol"; -import {ERC2771Module} from "../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; - - -/** - * @title ComplianceTokenCMTATUUPSUpgradeable - * @author Chainlink - * @notice UUPS upgradeable ComplianceToken contract with Chainlink ACE policy validation on all public functions - */ -contract ComplianceTokenCMTATUUPSUpgradeable is CCTBaseERC2771, UUPSUpgradeable { - /** - * @notice Contract version for UUPS proxy deployment - * @param forwarderIrrevocable address of the forwarder, required for the gasless support - */ - /// @custom:oz-upgrades-unsafe-allow constructor - constructor( - address forwarderIrrevocable - ) ERC2771Module(forwarderIrrevocable) { - // Disable the possibility to initialize the implementation - _disableInitializers(); - } - - /*////////////////////////////////////////////////////////////// - INTERNAL/PRIVATE FUNCTIONS - //////////////////////////////////////////////////////////////*/ - function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyOwner {} -} diff --git a/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol index b48f6b5..b06cb50 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol @@ -14,6 +14,12 @@ import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/acce abstract contract CCTCMTATBaseERC20CrossChain is ERC20CrossChainModule, CCIPModule, CCTCMTATBaseERC1404 { /* ============ State Functions ============ */ + /** + * @dev revert if the contract is in pause state + */ + function approve(address spender, uint256 value) public virtual override(ERC20Upgradeable) whenNotPaused returns (bool) { + return ERC20Upgradeable.approve(spender, value); + } function transfer(address to, uint256 value) public virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (bool) { return CMTATBaseCommon.transfer(to, value); } diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index 179bbf9..b772b77 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -109,15 +109,12 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr /* ============ State functions ============ */ function _transferred(address spender, address from, address to, uint256 /* value */) internal virtual returns (bool) { - if(!_canTransferGenericByModuleAndRevert(spender, from, to)) { - return false; - } else { - IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine()); - if (address(policyEngine_) != address(0)){ - bytes memory context = getContext(); - policyEngine_.run( - IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})); - } + _canTransferGenericByModuleAndRevert(spender, from, to); + IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine()); + if (address(policyEngine_) != address(0)){ + bytes memory context = getContext(); + policyEngine_.run( + IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})); } return true; } diff --git a/submodules/CMTAT b/submodules/CMTAT index 012ccc4..49544f4 160000 --- a/submodules/CMTAT +++ b/submodules/CMTAT @@ -1 +1 @@ -Subproject commit 012ccc409c4205da2b38f23ce21496b3486bc663 +Subproject commit 49544f4de1993008acfc9e848d0bf03bd31d8579 From 0718b164e58eb71255996997378e679a088e7f1e Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Wed, 25 Mar 2026 10:24:35 +0000 Subject: [PATCH 20/57] Add _msgSender() for forward sender passthrough --- contracts/modules/lite/ValidationModulePolicyEngine.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index b772b77..db3fe3e 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -93,7 +93,7 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr if (address(policyEngine_) != address(0)) { bytes memory context = getContext(); try policyEngine_.check( - IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + IPolicyEngine.Payload({selector: msg.sig, sender: _msgSender(), data: msg.data[4:], context: context}) ) { return true; @@ -114,7 +114,7 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr if (address(policyEngine_) != address(0)){ bytes memory context = getContext(); policyEngine_.run( - IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})); + IPolicyEngine.Payload({selector: msg.sig, sender: _msgSender(), data: msg.data[4:], context: context})); } return true; } From 60e9cd42ae2bf968b0194e11324d3a1d8f194cca Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Wed, 25 Mar 2026 11:41:16 +0000 Subject: [PATCH 21/57] Remove unused imports, fix solidity docs --- contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol | 2 +- contracts/modules/standard/CCTCommon.sol | 2 +- test/common/ace/RBACPolicyCommon.js | 2 +- test/deployment/liteStandaloneDeployment.test.js | 1 - test/deployment/liteUUPSUpgradeableDeployment.test.js | 3 +-- test/deployment/liteUpgradeableDeployment.test.js | 2 +- 6 files changed, 5 insertions(+), 7 deletions(-) diff --git a/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol index b06cb50..c15f7a9 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol @@ -129,7 +129,7 @@ abstract contract CCTCMTATBaseERC20CrossChain is ERC20CrossChainModule, CCIPModu /** * @custom:access-control - * - the caller must have the `BURNER_FROM_ROLE`. + * - the caller must have the `BURNER_SELF_ROLE`. * - We don't allow token holder to burn their own tokens if they don't have this role. */ function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) onlyRole(BURNER_SELF_ROLE) whenNotPaused{} diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index fdf7b55..72fb411 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -287,7 +287,7 @@ abstract contract CCTCommon is /** * @custom:access-control - * - the caller must have the `BURNER_FROM_ROLE`. + * - the caller must have the `BURNER_ROLE`. * - We don't allow token holder to burn their own tokens if they don't have this role. */ function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) runPolicy{} diff --git a/test/common/ace/RBACPolicyCommon.js b/test/common/ace/RBACPolicyCommon.js index 2df2f3a..8f2d5e8 100644 --- a/test/common/ace/RBACPolicyCommon.js +++ b/test/common/ace/RBACPolicyCommon.js @@ -1,5 +1,5 @@ const { expect } = require('chai') -const { MINTER_ROLE, BURNER_ROLE } = require('../../deploymentUtils') +const { MINTER_ROLE } = require('../../deploymentUtils') /** * Tests RoleBasedAccessControlPolicy behavior on standard (PolicyEngine-based) contracts. diff --git a/test/deployment/liteStandaloneDeployment.test.js b/test/deployment/liteStandaloneDeployment.test.js index 3907247..bb585fc 100644 --- a/test/deployment/liteStandaloneDeployment.test.js +++ b/test/deployment/liteStandaloneDeployment.test.js @@ -1,4 +1,3 @@ -const { expect } = require('chai') const { fixture, loadFixture, diff --git a/test/deployment/liteUUPSUpgradeableDeployment.test.js b/test/deployment/liteUUPSUpgradeableDeployment.test.js index 3421520..f8e463a 100644 --- a/test/deployment/liteUUPSUpgradeableDeployment.test.js +++ b/test/deployment/liteUUPSUpgradeableDeployment.test.js @@ -4,8 +4,7 @@ const { fixture, loadFixture, deployPolicyEngine, - deployCCTLiteUUPSUpgradeable, - DEFAULT_ADMIN_ROLE + deployCCTLiteUUPSUpgradeable } = require('../deploymentUtils') // Reuse CMTAT common modules diff --git a/test/deployment/liteUpgradeableDeployment.test.js b/test/deployment/liteUpgradeableDeployment.test.js index 03bac9e..d9535d1 100644 --- a/test/deployment/liteUpgradeableDeployment.test.js +++ b/test/deployment/liteUpgradeableDeployment.test.js @@ -1,4 +1,4 @@ -const { ethers, upgrades } = require('hardhat') +const { ethers } = require('hardhat') const { expect } = require('chai') const { fixture, From 48f644a35e64abf8c313b45ff6710192a23677cb Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Wed, 25 Mar 2026 12:02:31 +0000 Subject: [PATCH 22/57] Add missing context clear --- contracts/modules/lite/ValidationModulePolicyEngine.sol | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index db3fe3e..7217db5 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -115,6 +115,9 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr bytes memory context = getContext(); policyEngine_.run( IPolicyEngine.Payload({selector: msg.sig, sender: _msgSender(), data: msg.data[4:], context: context})); + if (context.length > 0) { + clearContext(); + } } return true; } From 6de8d553dba1165ffa4d9a6133f8f67acdd82622 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Tue, 14 Apr 2026 15:16:13 +0100 Subject: [PATCH 23/57] Add transfer validation policy and mock rules, add more tests --- ...omplianceTokenCMTATLiteUUPSUpgradeable.sol | 2 +- .../ComplianceTokenCMTATLiteUpgradeable.sol | 7 +- .../ComplianceTokenCMTATUpgradeable.sol | 5 +- .../custom/ERC20TransferFromExtractor.sol | 58 +++ .../custom/TransferValidationPolicy.sol | 131 +++++ .../chainlink-ace/mocks/TransferRuleMocks.sol | 118 +++++ .../modified}/MintBurnExtractor.sol | 0 .../modified}/PolicyProtectedUpgradeable.sol | 0 contracts/modules/demo/DemoImports.sol | 1 + .../modules/lite/CCTCMTATBasePolicyEngine.sol | 2 +- .../lite/ValidationModulePolicyEngine.sol | 41 +- contracts/modules/standard/CCTCommon.sol | 2 +- reports/.gitkeep | 0 scripts/demo.js | 105 +++- scripts/slither.sh | 2 +- slither.config.json | 3 +- test/common/ace/RBACPolicyCommon.js | 257 +++++++++- test/custom/transferValidationPolicy.test.js | 457 ++++++++++++++++++ .../liteStandaloneDeployment.test.js | 8 + .../liteUUPSUpgradeableDeployment.test.js | 8 + .../liteUpgradeableDeployment.test.js | 8 + test/deploymentUtils.js | 6 + 22 files changed, 1195 insertions(+), 26 deletions(-) create mode 100644 contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol create mode 100644 contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol create mode 100644 contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol rename contracts/modules/{chainlink-ace-modified => chainlink-ace/modified}/MintBurnExtractor.sol (100%) rename contracts/modules/{chainlink-ace-modified => chainlink-ace/modified}/PolicyProtectedUpgradeable.sol (100%) delete mode 100644 reports/.gitkeep create mode 100644 test/custom/transferValidationPolicy.test.js diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol index 25a7ca7..312134c 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol @@ -10,7 +10,7 @@ import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper /** * @title ComplianceTokenCMTATLiteUUPSUpgradeable * @author Chainlink - * @notice UUPS upgradeable Lite ComplianceToken contract with Chainlink ACE policy validation on CMTA transfers + * @notice UUPS upgradeable lite ComplianceToken contract with Chainlink ACE policy validation on CMTA transfers */ contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC2771, UUPSUpgradeable { bytes32 public constant PROXY_UPGRADE_ROLE = keccak256("PROXY_UPGRADE_ROLE"); diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol index e55e214..1a95f27 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol @@ -9,7 +9,7 @@ import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper /** * @title ComplianceTokenCMTATLite * @author Chainlink - * @notice Standalone Compliance Token contract with Chainlink ACE policy validation on CMTA transfers + * @notice Standalone upgradeable lite Compliance Token contract with Chainlink ACE policy validation on CMTA transfers */ contract ComplianceTokenCMTATLiteUpgradeable is CCTCMTATBaseERC2771 { /** @@ -29,5 +29,8 @@ contract ComplianceTokenCMTATLiteUpgradeable is CCTCMTATBaseERC2771 { ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, address policyEngine_ - ) ERC2771Module(forwarderIrrevocable) {} + ) ERC2771Module(forwarderIrrevocable) { + // Disable the possibility to initialize the implementation + _disableInitializers(); + } } \ No newline at end of file diff --git a/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol b/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol index 848cbc4..77c7a7e 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol @@ -19,5 +19,8 @@ contract ComplianceTokenCMTATUpgradeable is CCTBaseERC2771 { /// @custom:oz-upgrades-unsafe-allow constructor constructor( address forwarderIrrevocable - ) ERC2771Module(forwarderIrrevocable) {} + ) ERC2771Module(forwarderIrrevocable) { + // Disable the possibility to initialize the implementation + _disableInitializers(); + } } \ No newline at end of file diff --git a/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol b/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol new file mode 100644 index 0000000..ff35d3f --- /dev/null +++ b/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.20; + +import {IExtractor} from "@chainlink/policy-management/interfaces/IExtractor.sol"; +import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +/** + * @title ERC20TransferFromExtractor + * @notice Extends the standard ERC20TransferExtractor by also extracting the + * spender address, enabling policies to validate transferFrom approvals. + * @dev Handles: + * - transfer(address to, uint256 amount): + * spender = sender, from = sender, to = decoded, amount = decoded + * - transferFrom(address from, address to, uint256 amount): + * spender = sender, from = decoded, to = decoded, amount = decoded + * + * Returns 4 parameters: [spender, from, to, amount] + */ +contract ERC20TransferFromExtractor is IExtractor { + string public constant override typeAndVersion = "ERC20TransferFromExtractor 1.0.0"; + + bytes32 public constant PARAM_SPENDER = keccak256("spender"); + bytes32 public constant PARAM_FROM = keccak256("from"); + bytes32 public constant PARAM_TO = keccak256("to"); + bytes32 public constant PARAM_AMOUNT = keccak256("amount"); + + function extract(IPolicyEngine.Payload calldata payload) + external + pure + override + returns (IPolicyEngine.Parameter[] memory) + { + address spender; + address from; + address to; + uint256 amount; + + if (payload.selector == IERC20.transfer.selector) { + spender = payload.sender; + from = payload.sender; + (to, amount) = abi.decode(payload.data, (address, uint256)); + } else if (payload.selector == IERC20.transferFrom.selector) { + spender = payload.sender; + (from, to, amount) = abi.decode(payload.data, (address, address, uint256)); + } else { + revert IPolicyEngine.UnsupportedSelector(payload.selector); + } + + IPolicyEngine.Parameter[] memory result = new IPolicyEngine.Parameter[](4); + result[0] = IPolicyEngine.Parameter(PARAM_SPENDER, abi.encode(spender)); + result[1] = IPolicyEngine.Parameter(PARAM_FROM, abi.encode(from)); + result[2] = IPolicyEngine.Parameter(PARAM_TO, abi.encode(to)); + result[3] = IPolicyEngine.Parameter(PARAM_AMOUNT, abi.encode(amount)); + + return result; + } +} diff --git a/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol new file mode 100644 index 0000000..0edbdc5 --- /dev/null +++ b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol @@ -0,0 +1,131 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {Policy} from "@chainlink/policy-management/core/Policy.sol"; +import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; +import {IRule} from "../../../../submodules/CMTAT/contracts/mocks/RuleEngine/interfaces/IRule.sol"; + +/** + * @title TransferValidationPolicy + * @notice A policy that validates ERC-20 transfers by running an array of IRule + * contracts, mimicking CMTAT's _canTransferWithRuleEngine() behavior. + * @dev Works with both ERC20TransferExtractor (3 params) and + * ERC20TransferFromExtractor (4 params): + * + * 3 parameters: [from, to, amount] + * → uses detectTransferRestriction(from, to, amount) + * + * 4 parameters: [spender, from, to, amount] + * → uses detectTransferRestrictionFrom(spender, from, to, amount) + * + * Each IRule is checked in order. If any rule returns a non-zero code + * the policy reverts with PolicyRejected containing the rule's message. + */ +contract TransferValidationPolicy is Policy { + string public constant override typeAndVersion = "TransferValidationPolicy 1.0.0"; + + /// @custom:storage-location erc7201:cmta.TransferValidationPolicy + struct TransferValidationStorage { + IRule[] rules; + } + + // keccak256(abi.encode(uint256(keccak256("cmta.TransferValidationPolicy")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant STORAGE_LOCATION = + 0x9d1bc980e8a6a99b0c67a28b08c935a5db13a988e2a9b52481bff1e80ee16800; + + function _getStorage() private pure returns (TransferValidationStorage storage $) { + assembly { + $.slot := STORAGE_LOCATION + } + } + + /** + * @inheritdoc Policy + * @dev Decodes an array of IRule addresses to set as initial rules. + * Pass empty bytes if no initial rules are needed. + */ + function configure(bytes calldata parameters) internal override onlyInitializing { + if (parameters.length > 0) { + address[] memory ruleAddrs = abi.decode(parameters, (address[])); + TransferValidationStorage storage $ = _getStorage(); + for (uint256 i = 0; i < ruleAddrs.length; ++i) { + $.rules.push(IRule(ruleAddrs[i])); + } + } + } + + /** + * @notice Replaces all rules with a new set. + * @param rules_ The new array of IRule contracts. + */ + function setRules(IRule[] calldata rules_) external onlyOwner { + TransferValidationStorage storage $ = _getStorage(); + delete $.rules; + for (uint256 i = 0; i < rules_.length; ++i) { + $.rules.push(rules_[i]); + } + } + + /** + * @notice Returns the current rules. + */ + function rules() external view returns (IRule[] memory) { + return _getStorage().rules; + } + + /** + * @notice Returns the number of rules. + */ + function rulesCount() external view returns (uint256) { + return _getStorage().rules.length; + } + + /** + * @inheritdoc Policy + * @dev Supports both 3-param (transfer) and 4-param (transferFrom) layouts. + * With 4 parameters, uses detectTransferRestrictionFrom to also validate + * the spender. + */ + function run( + address, /* caller */ + address, /* subject */ + bytes4, /* selector */ + bytes[] calldata parameters, + bytes calldata /* context */ + ) public view override returns (IPolicyEngine.PolicyResult) { + TransferValidationStorage storage $ = _getStorage(); + uint256 len = $.rules.length; + + if (parameters.length >= 4) { + // ERC20TransferFromExtractor layout: [spender, from, to, amount] + address spender = abi.decode(parameters[0], (address)); + address from = abi.decode(parameters[1], (address)); + address to = abi.decode(parameters[2], (address)); + uint256 amount = abi.decode(parameters[3], (uint256)); + + for (uint256 i = 0; i < len; ++i) { + uint8 code = $.rules[i].detectTransferRestrictionFrom(spender, from, to, amount); + if (code != 0) { + string memory message = $.rules[i].messageForTransferRestriction(code); + revert IPolicyEngine.PolicyRejected(message); + } + } + } else { + // ERC20TransferExtractor layout: [from, to, amount] + address from = abi.decode(parameters[0], (address)); + address to = abi.decode(parameters[1], (address)); + uint256 amount = abi.decode(parameters[2], (uint256)); + + for (uint256 i = 0; i < len; ++i) { + uint8 code = $.rules[i].detectTransferRestriction(from, to, amount); + if (code != 0) { + string memory message = $.rules[i].messageForTransferRestriction(code); + revert IPolicyEngine.PolicyRejected(message); + } + } + } + + return IPolicyEngine.PolicyResult.Continue; + } +} diff --git a/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol b/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol new file mode 100644 index 0000000..28b587f --- /dev/null +++ b/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +import {IRule} from "../../../../submodules/CMTAT/contracts/mocks/RuleEngine/interfaces/IRule.sol"; + +/** + * @title MaxAmountRule + * @notice Rejects transfers where the amount exceeds a configurable maximum. + */ +contract MaxAmountRule is IRule { + uint256 public immutable maxAmount; + uint8 constant AMOUNT_TOO_HIGH = 13; + + constructor(uint256 maxAmount_) { + maxAmount = maxAmount_; + } + + function detectTransferRestriction( + address, /* from */ + address, /* to */ + uint256 amount + ) public view override returns (uint8) { + return amount > maxAmount + ? AMOUNT_TOO_HIGH + : uint8(REJECTED_CODE_BASE.TRANSFER_OK); + } + + function detectTransferRestrictionFrom( + address, /* spender */ + address from, + address to, + uint256 amount + ) public view override returns (uint8) { + return detectTransferRestriction(from, to, amount); + } + + function canTransfer( + address from, + address to, + uint256 amount + ) public view override returns (bool) { + return detectTransferRestriction(from, to, amount) == 0; + } + + function canReturnTransferRestrictionCode(uint8 code) public pure override returns (bool) { + return code == AMOUNT_TOO_HIGH; + } + + function messageForTransferRestriction(uint8 code) external pure override returns (string memory) { + return code == AMOUNT_TOO_HIGH ? "Amount exceeds maximum" : "Unknown code"; + } +} + +/** + * @title RestrictedAddressRule + * @notice Rejects transfers involving addresses on a restricted list. + */ +contract RestrictedAddressRule is IRule { + uint8 constant FROM_RESTRICTED = 14; + uint8 constant TO_RESTRICTED = 15; + + mapping(address => bool) public restricted; + address public owner; + + modifier onlyOwner() { + require(msg.sender == owner, "only owner"); + _; + } + + constructor(address[] memory restricted_) { + owner = msg.sender; + for (uint256 i = 0; i < restricted_.length; ++i) { + restricted[restricted_[i]] = true; + } + } + + function setRestricted(address account, bool status) external onlyOwner { + restricted[account] = status; + } + + function detectTransferRestriction( + address from, + address to, + uint256 /* amount */ + ) public view override returns (uint8) { + if (restricted[from]) return FROM_RESTRICTED; + if (restricted[to]) return TO_RESTRICTED; + return uint8(REJECTED_CODE_BASE.TRANSFER_OK); + } + + function detectTransferRestrictionFrom( + address, /* spender */ + address from, + address to, + uint256 amount + ) public view override returns (uint8) { + return detectTransferRestriction(from, to, amount); + } + + function canTransfer( + address from, + address to, + uint256 amount + ) public view override returns (bool) { + return detectTransferRestriction(from, to, amount) == 0; + } + + function canReturnTransferRestrictionCode(uint8 code) public pure override returns (bool) { + return code == FROM_RESTRICTED || code == TO_RESTRICTED; + } + + function messageForTransferRestriction(uint8 code) external pure override returns (string memory) { + if (code == FROM_RESTRICTED) return "Sender is restricted"; + if (code == TO_RESTRICTED) return "Recipient is restricted"; + return "Unknown code"; + } +} diff --git a/contracts/modules/chainlink-ace-modified/MintBurnExtractor.sol b/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol similarity index 100% rename from contracts/modules/chainlink-ace-modified/MintBurnExtractor.sol rename to contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol diff --git a/contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol b/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol similarity index 100% rename from contracts/modules/chainlink-ace-modified/PolicyProtectedUpgradeable.sol rename to contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol diff --git a/contracts/modules/demo/DemoImports.sol b/contracts/modules/demo/DemoImports.sol index f294f3c..3260a78 100644 --- a/contracts/modules/demo/DemoImports.sol +++ b/contracts/modules/demo/DemoImports.sol @@ -10,4 +10,5 @@ import {PolicyEngine} from "@chainlink/policy-management/core/PolicyEngine.sol"; import {PausePolicy} from "@chainlink/policy-management/policies/PausePolicy.sol"; import {RoleBasedAccessControlPolicy} from "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol"; import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMintPolicy.sol"; +import {ERC20TransferExtractor} from "@chainlink/policy-management/extractors/ERC20TransferExtractor.sol"; \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index 8c461bf..47a3462 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.20; import {CMTATBaseCommon, CMTATBaseAccessControl} from "../../../submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol"; -import {PolicyProtectedUpgradeable} from "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index 7217db5..2a47ee8 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -3,8 +3,9 @@ pragma solidity ^0.8.20; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; -import {PolicyProtectedUpgradeable} from "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedUpgradeable { @@ -69,32 +70,42 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr } } - // Note: parameters are kept to retain the interface, even if not used function _canTransferFromWithPolicyEngine( - address /* spender */, - address /* from */, - address /* to */, - uint256 /* value*/ + address spender, + address from, + address to, + uint256 value ) internal view virtual returns (bool) { - return _tryRunPolicies(); + return _tryCheckPolicies( + IERC20.transferFrom.selector, + spender, + abi.encode(from, to, value) + ); } - // Note: parameters are kept to retain the interface, even if not used function _canTransferWithPolicyEngine( - address /* from */, - address /* to */, - uint256 /* value */ + address from, + address to, + uint256 value ) internal view virtual returns (bool) { - return _tryRunPolicies(); + return _tryCheckPolicies( + IERC20.transfer.selector, + from, + abi.encode(to, value) + ); } - function _tryRunPolicies() internal view returns(bool) { + function _tryCheckPolicies( + bytes4 selector, + address sender, + bytes memory data + ) internal view returns (bool) { IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine()); if (address(policyEngine_) != address(0)) { bytes memory context = getContext(); try policyEngine_.check( - IPolicyEngine.Payload({selector: msg.sig, sender: _msgSender(), data: msg.data[4:], context: context}) - ) + IPolicyEngine.Payload({selector: selector, sender: sender, data: data, context: context}) + ) { return true; } diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index 72fb411..34d7d62 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -28,7 +28,7 @@ import {IBurnMintERC20} from "../../../submodules/CMTAT/contracts/interfaces/tec import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; /* ==== Chainlink ACE === */ -import {PolicyProtectedUpgradeable} from "../chainlink-ace-modified/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; abstract contract CCTCommon is diff --git a/reports/.gitkeep b/reports/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/demo.js b/scripts/demo.js index 84821e4..dd7bbec 100644 --- a/scripts/demo.js +++ b/scripts/demo.js @@ -9,6 +9,10 @@ * 5. MintBurnExtractor * 6. SecureMintPolicy (proxy) – added to mint function * 7. MockV3Aggregator (Hardhat-only reserve price feed for SecureMint) + * 8. ERC20TransferExtractor – set for transfer() + * 9. ERC20TransferFromExtractor – set for transferFrom() + * 10. MaxAmountRule + RestrictedAddressRule (mock IRule contracts) + * 11. TransferValidationPolicy (proxy) – added to transfer() and transferFrom() * * Script example - do not use it for production */ @@ -258,6 +262,95 @@ async function main() { ); console.log("SecureMint policy added for mint selector"); + /* ============================================================ + * 11b. Deploy ERC20TransferExtractor + ERC20TransferFromExtractor + * ============================================================ */ + console.log("\n--- Step 11b: Deploy Transfer Extractors ---"); + + const ERC20ExtractorFactory = await ethers.getContractFactory("ERC20TransferExtractor"); + const erc20TransferExtractor = await ERC20ExtractorFactory.deploy(); + await erc20TransferExtractor.waitForDeployment(); + const erc20TransferExtractorAddress = await erc20TransferExtractor.getAddress(); + console.log("ERC20TransferExtractor deployed to:", erc20TransferExtractorAddress); + + const ERC20FromExtractorFactory = await ethers.getContractFactory("ERC20TransferFromExtractor"); + const erc20TransferFromExtractor = await ERC20FromExtractorFactory.deploy(); + await erc20TransferFromExtractor.waitForDeployment(); + const erc20TransferFromExtractorAddress = await erc20TransferFromExtractor.getAddress(); + console.log("ERC20TransferFromExtractor deployed to:", erc20TransferFromExtractorAddress); + + /* ============================================================ + * 11c. Deploy mock rules + TransferValidationPolicy + * ============================================================ */ + console.log("\n--- Step 11c: Deploy TransferValidationPolicy with mock rules ---"); + + // Deploy MaxAmountRule (max 1000 tokens) + const MaxAmountRuleFactory = await ethers.getContractFactory("MaxAmountRule"); + const maxTransferAmount = 1000n * 10n ** BigInt(tokenDecimals); + const maxAmountRule = await MaxAmountRuleFactory.deploy(maxTransferAmount); + await maxAmountRule.waitForDeployment(); + const maxAmountRuleAddress = await maxAmountRule.getAddress(); + console.log("MaxAmountRule deployed to:", maxAmountRuleAddress, `(max: ${maxTransferAmount})`); + + // Deploy RestrictedAddressRule (no initially restricted addresses) + const RestrictedAddressRuleFactory = await ethers.getContractFactory("RestrictedAddressRule"); + const restrictedAddressRule = await RestrictedAddressRuleFactory.deploy([]); + await restrictedAddressRule.waitForDeployment(); + const restrictedAddressRuleAddress = await restrictedAddressRule.getAddress(); + console.log("RestrictedAddressRule deployed to:", restrictedAddressRuleAddress); + + // Deploy TransferValidationPolicy with both rules + const transferPolicyConfigParams = abiCoder.encode( + ["address[]"], + [[maxAmountRuleAddress, restrictedAddressRuleAddress]] + ); + const TransferPolicyFactory = await ethers.getContractFactory("TransferValidationPolicy"); + const transferPolicy = await upgrades.deployProxy( + TransferPolicyFactory, + [policyEngineAddress, admin, transferPolicyConfigParams], + { initializer: "initialize", unsafeAllow: ["constructor", "missing-initializer", "missing-initializer-call"], silenceWarnings: true } + ); + await transferPolicy.waitForDeployment(); + const transferPolicyAddress = await transferPolicy.getAddress(); + console.log("TransferValidationPolicy deployed to:", transferPolicyAddress); + + /* ============================================================ + * 11d. Set extractors and add TransferValidationPolicy + * ============================================================ */ + console.log("\n--- Step 11d: Register extractors & TransferValidationPolicy ---"); + + // Set ERC20TransferExtractor for transfer() + await policyEngine.connect(deployer).setExtractor(selectors.transfer, erc20TransferExtractorAddress); + console.log("ERC20TransferExtractor set for transfer selector"); + + // Set ERC20TransferFromExtractor for transferFrom() + await policyEngine.connect(deployer).setExtractor(selectors.transferFrom, erc20TransferFromExtractorAddress); + console.log("ERC20TransferFromExtractor set for transferFrom selector"); + + // Parameter name constants + const PARAM_SPENDER = keccak256(toUtf8Bytes("spender")); + const PARAM_FROM = keccak256(toUtf8Bytes("from")); + const PARAM_TO = keccak256(toUtf8Bytes("to")); + const PARAM_AMOUNT_TRANSFER = keccak256(toUtf8Bytes("amount")); + + // Add TransferValidationPolicy to transfer() — expects [from, to, amount] + await policyEngine.connect(deployer).addPolicy( + cmtatAddress, + selectors.transfer, + transferPolicyAddress, + [PARAM_FROM, PARAM_TO, PARAM_AMOUNT_TRANSFER] + ); + console.log("TransferValidationPolicy added for transfer (3 params: from, to, amount)"); + + // Add TransferValidationPolicy to transferFrom() — expects [spender, from, to, amount] + await policyEngine.connect(deployer).addPolicy( + cmtatAddress, + selectors.transferFrom, + transferPolicyAddress, + [PARAM_SPENDER, PARAM_FROM, PARAM_TO, PARAM_AMOUNT_TRANSFER] + ); + console.log("TransferValidationPolicy added for transferFrom (4 params: spender, from, to, amount)"); + /* ============================================================ * 12. Grant operation allowances on RBAC policy * ============================================================ */ @@ -308,6 +401,7 @@ async function main() { const pausePolicyImpl = await upgrades.erc1967.getImplementationAddress(pausePolicyAddress); const rbacPolicyImpl = await upgrades.erc1967.getImplementationAddress(rbacPolicyAddress); const secureMintPolicyImpl = await upgrades.erc1967.getImplementationAddress(secureMintPolicyAddress); + const transferPolicyImpl = await upgrades.erc1967.getImplementationAddress(transferPolicyAddress); // PolicyEngine uses Transparent Proxy, so it also has a ProxyAdmin const policyEngineAdmin = await upgrades.erc1967.getAdminAddress(policyEngineAddress); @@ -321,12 +415,14 @@ async function main() { console.log("PausePolicy (proxy): ", pausePolicyAddress); console.log("RBAC Policy (proxy): ", rbacPolicyAddress); console.log("SecureMint Policy (proxy): ", secureMintPolicyAddress); + console.log("Transfer Policy (proxy): ", transferPolicyAddress); console.log("\n--- Implementation Contracts ---"); console.log("PolicyEngine (impl): ", policyEngineImpl); console.log("PausePolicy (impl): ", pausePolicyImpl); console.log("RBAC Policy (impl): ", rbacPolicyImpl); console.log("SecureMint Policy (impl): ", secureMintPolicyImpl); + console.log("Transfer Policy (impl): ", transferPolicyImpl); console.log("\n--- Proxy Admin ---"); console.log("PolicyEngine ProxyAdmin: ", policyEngineAdmin); @@ -334,6 +430,10 @@ async function main() { console.log("\n--- Non-Proxy Contracts ---"); console.log("Token (Standalone): ", cmtatAddress); console.log("MintBurn Extractor: ", extractorAddress); + console.log("ERC20Transfer Extractor: ", erc20TransferExtractorAddress); + console.log("ERC20TransferFrom Extractor:", erc20TransferFromExtractorAddress); + console.log("MaxAmountRule: ", maxAmountRuleAddress); + console.log("RestrictedAddressRule: ", restrictedAddressRuleAddress); console.log("Mock Reserve Feed: ", mockFeedAddress); console.log("\n--- Configuration ---"); @@ -344,7 +444,10 @@ async function main() { console.log(" - PausePolicy protects ALL listed external functions (initially unpaused)"); console.log(" - RBAC policy protects ALL listed external functions"); console.log(" - SecureMint policy protects mint() (reserve-backed minting)"); - console.log(" - Policy execution order per function: PausePolicy → RBAC → (SecureMint on mint)"); + console.log(" - TransferValidationPolicy protects transfer() and transferFrom()"); + console.log(" → MaxAmountRule: max", maxTransferAmount.toString(), "raw units per transfer"); + console.log(" → RestrictedAddressRule: no addresses initially restricted"); + console.log(" - Policy execution order per function: PausePolicy → RBAC → (SecureMint on mint) → (TransferValidation on transfer/transferFrom)"); console.log(" - Admin has MINTER, BURNER, BURNER_FROM, ENFORCER, ERC20ENFORCER roles"); console.log("========================================"); } diff --git a/scripts/slither.sh b/scripts/slither.sh index 6af8f30..f068c3c 100755 --- a/scripts/slither.sh +++ b/scripts/slither.sh @@ -10,7 +10,7 @@ mkdir -p "$REPORTS_DIR" # Compile first so Slither can skip its own compile step echo "Compiling contracts..." -npx hardhat compile +forge build echo "Running Slither analysis..." diff --git a/slither.config.json b/slither.config.json index 9c5208f..911c4f3 100644 --- a/slither.config.json +++ b/slither.config.json @@ -1,5 +1,4 @@ { "filter_paths": "node_modules,submodules,contracts/test", - "hardhat_ignore_compile": false, - "compile_force_framework": "hardhat" + "compile_force_framework": "foundry" } diff --git a/test/common/ace/RBACPolicyCommon.js b/test/common/ace/RBACPolicyCommon.js index 8f2d5e8..59fb819 100644 --- a/test/common/ace/RBACPolicyCommon.js +++ b/test/common/ace/RBACPolicyCommon.js @@ -1,5 +1,5 @@ const { expect } = require('chai') -const { MINTER_ROLE } = require('../../deploymentUtils') +const { MINTER_ROLE, BURNER_ROLE, BURNER_FROM_ROLE, BURNER_SELF_ROLE, ENFORCER_ROLE, ERC20ENFORCER_ROLE, DEFAULT_ADMIN_ROLE, DOCUMENT_ROLE, SNAPSHOOTER_ROLE, CROSS_CHAIN_ROLE } = require('../../deploymentUtils') /** * Tests RoleBasedAccessControlPolicy behavior on standard (PolicyEngine-based) contracts. @@ -12,11 +12,79 @@ const { MINTER_ROLE } = require('../../deploymentUtils') * this.attacker – unauthorized signer * this.policyEngine – PolicyEngine instance * this.rbacPolicy – RoleBasedAccessControlPolicy instance + * this.rbacPolicyAddress – address of rbacPolicy + * this.cmtatAddress – address of cmtat * this.mintSelector – bytes4 selector for mint(address,uint256) * this.burnSelector – bytes4 selector for burn(address,uint256) */ function RBACPolicyCommon () { context('RoleBasedAccessControlPolicy', function () { + beforeEach(async function () { + // Set up forcedTransfer selector + policy + role + this.forcedTransferSelector = this.cmtat.interface.getFunction('forcedTransfer(address,address,uint256)').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.forcedTransferSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.forcedTransferSelector, ENFORCER_ROLE) + await this.rbacPolicy.connect(this.admin).grantRole(ENFORCER_ROLE, this.admin.address) + + // Set up freezePartialTokens selector + policy + role + this.freezeSelector = this.cmtat.interface.getFunction('freezePartialTokens(address,uint256)').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.freezeSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.freezeSelector, ERC20ENFORCER_ROLE) + + // Set up unfreezePartialTokens selector + policy + role + this.unfreezeSelector = this.cmtat.interface.getFunction('unfreezePartialTokens(address,uint256)').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.unfreezeSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.unfreezeSelector, ERC20ENFORCER_ROLE) + await this.rbacPolicy.connect(this.admin).grantRole(ERC20ENFORCER_ROLE, this.admin.address) + + // Set up setName selector + policy + role (DEFAULT_ADMIN_ROLE granted by RBAC configure()) + this.setNameSelector = this.cmtat.interface.getFunction('setName').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.setNameSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.setNameSelector, DEFAULT_ADMIN_ROLE) + + // Set up setTokenId selector + policy + role + this.setTokenIdSelector = this.cmtat.interface.getFunction('setTokenId').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.setTokenIdSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.setTokenIdSelector, DEFAULT_ADMIN_ROLE) + + // Set up setDocumentEngine selector + policy + role + this.setDocumentEngineSelector = this.cmtat.interface.getFunction('setDocumentEngine').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.setDocumentEngineSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.setDocumentEngineSelector, DOCUMENT_ROLE) + await this.rbacPolicy.connect(this.admin).grantRole(DOCUMENT_ROLE, this.admin.address) + + // Set up setSnapshotEngine selector + policy + role + this.setSnapshotEngineSelector = this.cmtat.interface.getFunction('setSnapshotEngine').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.setSnapshotEngineSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.setSnapshotEngineSelector, SNAPSHOOTER_ROLE) + await this.rbacPolicy.connect(this.admin).grantRole(SNAPSHOOTER_ROLE, this.admin.address) + + // Set up setCCIPAdmin selector + policy + role + this.setCCIPAdminSelector = this.cmtat.interface.getFunction('setCCIPAdmin').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.setCCIPAdminSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.setCCIPAdminSelector, DEFAULT_ADMIN_ROLE) + + // Set up crosschainMint selector + policy + role + this.crosschainMintSelector = this.cmtat.interface.getFunction('crosschainMint').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.crosschainMintSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.crosschainMintSelector, CROSS_CHAIN_ROLE) + + // Set up crosschainBurn selector + policy + role + this.crosschainBurnSelector = this.cmtat.interface.getFunction('crosschainBurn').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.crosschainBurnSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.crosschainBurnSelector, CROSS_CHAIN_ROLE) + + // Set up burnFrom selector + policy + role + this.burnFromSelector = this.cmtat.interface.getFunction('burnFrom').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnFromSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.burnFromSelector, BURNER_FROM_ROLE) + + // Set up burn(uint256) self-burn selector + policy + role + this.selfBurnSelector = this.cmtat.interface.getFunction('burn(uint256)').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.selfBurnSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.selfBurnSelector, BURNER_SELF_ROLE) + }) + it('testAllowMintByMinterRole', async function () { await this.cmtat.connect(this.admin).mint(this.address1, 100n) expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) @@ -96,6 +164,193 @@ function RBACPolicyCommon () { this.rbacPolicy.connect(this.attacker).grantOperationAllowanceToRole(this.mintSelector, testRole) ).to.be.revertedWithCustomError(this.rbacPolicy, 'OwnableUnauthorizedAccount') }) + + // ---- forcedTransfer ---- + + it('testAllowForcedTransferByEnforcerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.admin)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) + }) + + it('testRejectForcedTransferWithoutEnforcerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await expect( + this.cmtat.connect(this.address1)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowForcedTransferAfterGrantingEnforcerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.rbacPolicy.connect(this.admin).grantRole(ENFORCER_ROLE, this.address2) + await this.cmtat.connect(this.address2)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) + }) + + it('testRejectForcedTransferAfterRevokingEnforcerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.rbacPolicy.connect(this.admin).grantRole(ENFORCER_ROLE, this.address2) + await this.rbacPolicy.connect(this.admin).revokeRole(ENFORCER_ROLE, this.address2) + await expect( + this.cmtat.connect(this.address2)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + // ---- freezePartialTokens / unfreezePartialTokens ---- + + it('testAllowFreezeByERC20EnforcerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 50n) + expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(50n) + }) + + it('testRejectFreezeWithoutERC20EnforcerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await expect( + this.cmtat.connect(this.address1)['freezePartialTokens(address,uint256)'](this.address1, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowUnfreezeByERC20EnforcerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 50n) + await this.cmtat.connect(this.admin)['unfreezePartialTokens(address,uint256)'](this.address1, 30n) + expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(20n) + }) + + it('testRejectUnfreezeWithoutERC20EnforcerRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 50n) + await expect( + this.cmtat.connect(this.address1)['unfreezePartialTokens(address,uint256)'](this.address1, 30n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + // ---- setName (ERC20 Attribute Management) ---- + + it('testAllowSetNameByAdminRole', async function () { + await this.cmtat.connect(this.admin).setName('New Name') + expect(await this.cmtat.name()).to.equal('New Name') + }) + + it('testRejectSetNameWithoutAdminRole', async function () { + await expect( + this.cmtat.connect(this.address1).setName('New Name') + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + // ---- setTokenId (Extra Information Management) ---- + + it('testAllowSetTokenIdByAdminRole', async function () { + await this.cmtat.connect(this.admin).setTokenId('NEW_ISIN') + expect(await this.cmtat.tokenId()).to.equal('NEW_ISIN') + }) + + it('testRejectSetTokenIdWithoutAdminRole', async function () { + await expect( + this.cmtat.connect(this.address1).setTokenId('NEW_ISIN') + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + // ---- setDocumentEngine (Document Management) ---- + + it('testAllowSetDocumentEngineByDocumentRole', async function () { + await this.cmtat.connect(this.admin).setDocumentEngine(this.address1) + }) + + it('testRejectSetDocumentEngineWithoutDocumentRole', async function () { + await expect( + this.cmtat.connect(this.address1).setDocumentEngine(this.address2) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + // ---- setSnapshotEngine (Snapshots) ---- + + it('testAllowSetSnapshotEngineBySnapshooterRole', async function () { + await this.cmtat.connect(this.admin).setSnapshotEngine(this.address1) + }) + + it('testRejectSetSnapshotEngineWithoutSnapshooterRole', async function () { + await expect( + this.cmtat.connect(this.address1).setSnapshotEngine(this.address2) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + // ---- setCCIPAdmin ---- + + it('testAllowSetCCIPAdminByAdminRole', async function () { + await this.cmtat.connect(this.admin).setCCIPAdmin(this.address1) + expect(await this.cmtat.getCCIPAdmin()).to.equal(this.address1) + }) + + it('testRejectSetCCIPAdminWithoutAdminRole', async function () { + await expect( + this.cmtat.connect(this.address1).setCCIPAdmin(this.address2) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + // ---- crosschainMint / crosschainBurn (CROSS_CHAIN_ROLE) ---- + + it('testRejectCrosschainMintWithoutCrossChainRole', async function () { + await expect( + this.cmtat.connect(this.address1).crosschainMint(this.address2, 100n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowCrosschainMintWithCrossChainRole', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(CROSS_CHAIN_ROLE, this.address1) + await this.cmtat.connect(this.address1).crosschainMint(this.address2, 100n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(100n) + }) + + it('testRejectCrosschainBurnWithoutCrossChainRole', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(CROSS_CHAIN_ROLE, this.admin) + await this.cmtat.connect(this.admin).crosschainMint(this.address1, 100n) + await expect( + this.cmtat.connect(this.address1).crosschainBurn(this.address1, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowCrosschainBurnWithCrossChainRole', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(CROSS_CHAIN_ROLE, this.admin) + await this.cmtat.connect(this.admin).crosschainMint(this.address1, 100n) + await this.cmtat.connect(this.admin).crosschainBurn(this.address1, 50n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) + }) + + // ---- burnFrom (BURNER_FROM_ROLE) ---- + + it('testRejectBurnFromWithoutBurnerFromRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await expect( + this.cmtat.connect(this.address1).burnFrom(this.address1, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowBurnFromWithBurnerFromRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.address1).approve(this.admin, 50n) + await this.rbacPolicy.connect(this.admin).grantRole(BURNER_FROM_ROLE, this.admin) + await this.cmtat.connect(this.admin).burnFrom(this.address1, 50n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) + }) + + // ---- burn(uint256) self-burn (BURNER_SELF_ROLE) ---- + + it('testRejectSelfBurnWithoutBurnerSelfRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await expect( + this.cmtat.connect(this.address1)['burn(uint256)'](50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testAllowSelfBurnWithBurnerSelfRole', async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.rbacPolicy.connect(this.admin).grantRole(BURNER_SELF_ROLE, this.address1) + await this.cmtat.connect(this.address1)['burn(uint256)'](50n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) + }) }) } diff --git a/test/custom/transferValidationPolicy.test.js b/test/custom/transferValidationPolicy.test.js new file mode 100644 index 0000000..f7c71f1 --- /dev/null +++ b/test/custom/transferValidationPolicy.test.js @@ -0,0 +1,457 @@ +const { ethers, upgrades } = require('hardhat') +const { expect } = require('chai') +const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') +const { + fixture, + MINTER_ROLE, + DEPLOYMENT_DECIMAL, + TERMS, + deployPolicyEngine, + deployCCTLiteStandalone +} = require('../deploymentUtils') + +// Parameter name hashes matching the ERC20TransferFromExtractor +const PARAM_SPENDER = ethers.keccak256(ethers.toUtf8Bytes('spender')) +const PARAM_FROM = ethers.keccak256(ethers.toUtf8Bytes('from')) +const PARAM_TO = ethers.keccak256(ethers.toUtf8Bytes('to')) +const PARAM_AMOUNT = ethers.keccak256(ethers.toUtf8Bytes('amount')) +const TRANSFER_PARAM_NAMES = [PARAM_SPENDER, PARAM_FROM, PARAM_TO, PARAM_AMOUNT] + +/** + * Deploy TransferValidationPolicy via upgrades.deployProxy + */ +async function deployTransferValidationPolicy (policyEngineAddress, ownerAddress, ruleAddresses) { + const abiCoder = ethers.AbiCoder.defaultAbiCoder() + const configParams = ruleAddresses.length > 0 + ? abiCoder.encode(['address[]'], [ruleAddresses]) + : '0x' + const Factory = await ethers.getContractFactory('TransferValidationPolicy') + const policy = await upgrades.deployProxy( + Factory, + [policyEngineAddress, ownerAddress, configParams], + { initializer: 'initialize', unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], silenceWarnings: true } + ) + return policy +} + +/** + * Deploy ERC20TransferFromExtractor (plain deploy, no proxy needed) + */ +async function deployERC20TransferFromExtractor () { + const extractor = await ethers.deployContract('ERC20TransferFromExtractor') + return extractor +} + +describe('TransferValidationPolicy', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)) + + // Deploy PolicyEngine (defaultAllow = true so mint/burn work without extra policies) + this.policyEngine = await deployPolicyEngine(true, this.admin.address) + this.policyEngineAddress = await this.policyEngine.getAddress() + + // Deploy Lite Standalone token + this.cmtat = await deployCCTLiteStandalone( + this._.address, + this.admin.address, + this.policyEngineAddress + ) + this.cmtatAddress = await this.cmtat.getAddress() + + // Deploy ERC20TransferFromExtractor + this.extractor = await deployERC20TransferFromExtractor() + this.extractorAddress = await this.extractor.getAddress() + + // Get transfer/transferFrom selectors + this.transferSelector = this.cmtat.interface.getFunction('transfer(address,uint256)').selector + this.transferFromSelector = this.cmtat.interface.getFunction('transferFrom(address,address,uint256)').selector + + // Set extractor for transfer and transferFrom selectors on the policy engine + await this.policyEngine.connect(this.admin).setExtractor(this.transferSelector, this.extractorAddress) + await this.policyEngine.connect(this.admin).setExtractor(this.transferFromSelector, this.extractorAddress) + + // Mint tokens to admin for test transfers + await this.cmtat.connect(this.admin).mint(this.admin.address, 1000n) + }) + + describe('MaxAmountRule', function () { + beforeEach(async function () { + // Deploy MaxAmountRule with max = 100 + this.maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]) + this.maxAmountRuleAddress = await this.maxAmountRule.getAddress() + + // Deploy TransferValidationPolicy with the MaxAmountRule + this.transferPolicy = await deployTransferValidationPolicy( + this.policyEngineAddress, + this.admin.address, + [this.maxAmountRuleAddress] + ) + this.transferPolicyAddress = await this.transferPolicy.getAddress() + + // Add TransferValidationPolicy to the PolicyEngine for transfer and transferFrom + await this.policyEngine.connect(this.admin).addPolicy( + this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES + ) + await this.policyEngine.connect(this.admin).addPolicy( + this.cmtatAddress, this.transferFromSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES + ) + }) + + describe('transfer', function () { + it('should allow transfer within max amount', async function () { + await expect( + this.cmtat.connect(this.admin).transfer(this.address1.address, 50n) + ).to.not.be.reverted + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(50n) + }) + + it('should allow transfer at exact max amount', async function () { + await expect( + this.cmtat.connect(this.admin).transfer(this.address1.address, 100n) + ).to.not.be.reverted + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n) + }) + + it('should reject transfer exceeding max amount', async function () { + await expect( + this.cmtat.connect(this.admin).transfer(this.address1.address, 101n) + ).to.be.reverted + }) + }) + + describe('transferFrom', function () { + beforeEach(async function () { + // Admin approves address1 to spend + await this.cmtat.connect(this.admin).approve(this.address1.address, 500n) + }) + + it('should allow transferFrom within max amount', async function () { + await expect( + this.cmtat.connect(this.address1).transferFrom(this.admin.address, this.address2.address, 50n) + ).to.not.be.reverted + expect(await this.cmtat.balanceOf(this.address2.address)).to.equal(50n) + }) + + it('should reject transferFrom exceeding max amount', async function () { + await expect( + this.cmtat.connect(this.address1).transferFrom(this.admin.address, this.address2.address, 101n) + ).to.be.reverted + }) + }) + + describe('canTransfer', function () { + it('should return true for transfer within max amount', async function () { + expect( + await this.cmtat.canTransfer(this.admin.address, this.address1.address, 50n) + ).to.be.true + }) + + it('should return false for transfer exceeding max amount', async function () { + expect( + await this.cmtat.canTransfer(this.admin.address, this.address1.address, 101n) + ).to.be.false + }) + }) + + describe('canTransferFrom', function () { + it('should return true for transferFrom within max amount', async function () { + expect( + await this.cmtat.canTransferFrom(this.address1.address, this.admin.address, this.address2.address, 50n) + ).to.be.true + }) + + it('should return false for transferFrom exceeding max amount', async function () { + expect( + await this.cmtat.canTransferFrom(this.address1.address, this.admin.address, this.address2.address, 101n) + ).to.be.false + }) + }) + }) + + describe('RestrictedAddressRule', function () { + beforeEach(async function () { + // Deploy RestrictedAddressRule with address2 restricted initially + this.restrictedRule = await ethers.deployContract('RestrictedAddressRule', [[this.address2.address]]) + this.restrictedRuleAddress = await this.restrictedRule.getAddress() + + // Deploy TransferValidationPolicy with the RestrictedAddressRule + this.transferPolicy = await deployTransferValidationPolicy( + this.policyEngineAddress, + this.admin.address, + [this.restrictedRuleAddress] + ) + this.transferPolicyAddress = await this.transferPolicy.getAddress() + + // Add TransferValidationPolicy for transfer and transferFrom + await this.policyEngine.connect(this.admin).addPolicy( + this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES + ) + await this.policyEngine.connect(this.admin).addPolicy( + this.cmtatAddress, this.transferFromSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES + ) + }) + + describe('transfer', function () { + it('should allow transfer to unrestricted address', async function () { + await expect( + this.cmtat.connect(this.admin).transfer(this.address1.address, 50n) + ).to.not.be.reverted + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(50n) + }) + + it('should reject transfer to restricted address', async function () { + await expect( + this.cmtat.connect(this.admin).transfer(this.address2.address, 50n) + ).to.be.reverted + }) + + it('should reject transfer from restricted address', async function () { + // First give address2 some tokens via unrestricted path (remove restriction temporarily) + await this.restrictedRule.setRestricted(this.address2.address, false) + await this.cmtat.connect(this.admin).transfer(this.address2.address, 100n) + // Re-restrict + await this.restrictedRule.setRestricted(this.address2.address, true) + + await expect( + this.cmtat.connect(this.address2).transfer(this.address1.address, 50n) + ).to.be.reverted + }) + + it('should allow transfer after removing restriction', async function () { + await this.restrictedRule.setRestricted(this.address2.address, false) + await expect( + this.cmtat.connect(this.admin).transfer(this.address2.address, 50n) + ).to.not.be.reverted + expect(await this.cmtat.balanceOf(this.address2.address)).to.equal(50n) + }) + }) + + describe('canTransfer', function () { + it('should return true for unrestricted addresses', async function () { + expect( + await this.cmtat.canTransfer(this.admin.address, this.address1.address, 50n) + ).to.be.true + }) + + it('should return false when recipient is restricted', async function () { + expect( + await this.cmtat.canTransfer(this.admin.address, this.address2.address, 50n) + ).to.be.false + }) + + it('should return false when sender is restricted', async function () { + expect( + await this.cmtat.canTransfer(this.address2.address, this.address1.address, 50n) + ).to.be.false + }) + }) + }) + + describe('Multiple rules (MaxAmount + RestrictedAddress)', function () { + beforeEach(async function () { + this.maxAmountRule = await ethers.deployContract('MaxAmountRule', [200n]) + this.restrictedRule = await ethers.deployContract('RestrictedAddressRule', [[this.address3.address]]) + + this.transferPolicy = await deployTransferValidationPolicy( + this.policyEngineAddress, + this.admin.address, + [await this.maxAmountRule.getAddress(), await this.restrictedRule.getAddress()] + ) + this.transferPolicyAddress = await this.transferPolicy.getAddress() + + await this.policyEngine.connect(this.admin).addPolicy( + this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES + ) + await this.policyEngine.connect(this.admin).addPolicy( + this.cmtatAddress, this.transferFromSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES + ) + }) + + it('should allow valid transfer (within amount, unrestricted)', async function () { + await expect( + this.cmtat.connect(this.admin).transfer(this.address1.address, 100n) + ).to.not.be.reverted + }) + + it('should reject transfer exceeding max amount even to unrestricted address', async function () { + await expect( + this.cmtat.connect(this.admin).transfer(this.address1.address, 201n) + ).to.be.reverted + }) + + it('should reject transfer to restricted address even within max amount', async function () { + await expect( + this.cmtat.connect(this.admin).transfer(this.address3.address, 50n) + ).to.be.reverted + }) + + it('canTransfer should return false when either rule rejects', async function () { + // Exceeds max + expect( + await this.cmtat.canTransfer(this.admin.address, this.address1.address, 201n) + ).to.be.false + // Restricted recipient + expect( + await this.cmtat.canTransfer(this.admin.address, this.address3.address, 50n) + ).to.be.false + }) + + it('canTransfer should return true when both rules pass', async function () { + expect( + await this.cmtat.canTransfer(this.admin.address, this.address1.address, 100n) + ).to.be.true + }) + }) + + describe('Policy management', function () { + it('should work with no rules configured', async function () { + // Deploy policy with no rules — all transfers should pass + this.transferPolicy = await deployTransferValidationPolicy( + this.policyEngineAddress, + this.admin.address, + [] + ) + this.transferPolicyAddress = await this.transferPolicy.getAddress() + + await this.policyEngine.connect(this.admin).addPolicy( + this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES + ) + + await expect( + this.cmtat.connect(this.admin).transfer(this.address1.address, 500n) + ).to.not.be.reverted + }) + + it('should allow owner to update rules via setRules', async function () { + // Start with no rules + this.transferPolicy = await deployTransferValidationPolicy( + this.policyEngineAddress, + this.admin.address, + [] + ) + this.transferPolicyAddress = await this.transferPolicy.getAddress() + + await this.policyEngine.connect(this.admin).addPolicy( + this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES + ) + + // Transfer should succeed with no rules + await expect( + this.cmtat.connect(this.admin).transfer(this.address1.address, 500n) + ).to.not.be.reverted + + // Now add a MaxAmountRule via setRules + const maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]) + await this.transferPolicy.connect(this.admin).setRules([await maxAmountRule.getAddress()]) + + // Transfer above max should now fail + await expect( + this.cmtat.connect(this.admin).transfer(this.address2.address, 101n) + ).to.be.reverted + + // Transfer within max should still succeed + await expect( + this.cmtat.connect(this.admin).transfer(this.address2.address, 50n) + ).to.not.be.reverted + }) + + it('should not allow non-owner to call setRules', async function () { + this.transferPolicy = await deployTransferValidationPolicy( + this.policyEngineAddress, + this.admin.address, + [] + ) + + const maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]) + await expect( + this.transferPolicy.connect(this.address1).setRules([await maxAmountRule.getAddress()]) + ).to.be.reverted + }) + + it('should report correct rules and rulesCount', async function () { + const rule1 = await ethers.deployContract('MaxAmountRule', [100n]) + const rule2 = await ethers.deployContract('RestrictedAddressRule', [[]]) + + this.transferPolicy = await deployTransferValidationPolicy( + this.policyEngineAddress, + this.admin.address, + [await rule1.getAddress(), await rule2.getAddress()] + ) + + expect(await this.transferPolicy.rulesCount()).to.equal(2n) + const rules = await this.transferPolicy.rules() + expect(rules[0]).to.equal(await rule1.getAddress()) + expect(rules[1]).to.equal(await rule2.getAddress()) + }) + }) + + describe('No policy attached (defaultAllow = true)', function () { + it('should allow transfers when no policy is registered for transfer selector', async function () { + // PolicyEngine has defaultAllow = true and no policy for transfer + await expect( + this.cmtat.connect(this.admin).transfer(this.address1.address, 500n) + ).to.not.be.reverted + }) + + it('canTransfer should return true when no policy is registered', async function () { + expect( + await this.cmtat.canTransfer(this.admin.address, this.address1.address, 500n) + ).to.be.true + }) + }) + + describe('canTransfer with module-level restrictions', function () { + beforeEach(async function () { + // Set up MaxAmountRule policy on transfer selector + this.maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]) + this.transferPolicy = await deployTransferValidationPolicy( + this.policyEngineAddress, + this.admin.address, + [await this.maxAmountRule.getAddress()] + ) + this.transferPolicyAddress = await this.transferPolicy.getAddress() + + await this.policyEngine.connect(this.admin).addPolicy( + this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES + ) + + // Give address1 some tokens + await this.cmtat.connect(this.admin).transfer(this.address1.address, 50n) + }) + + it('canTransfer should return false when sender is frozen', async function () { + await this.cmtat.connect(this.admin).setAddressFrozen(this.address1.address, true) + expect( + await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n) + ).to.be.false + }) + + it('canTransfer should return false when recipient is frozen', async function () { + await this.cmtat.connect(this.admin).setAddressFrozen(this.address2.address, true) + expect( + await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n) + ).to.be.false + }) + + it('canTransfer should return false when contract is paused', async function () { + await this.cmtat.connect(this.admin).pause() + expect( + await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n) + ).to.be.false + }) + + it('canTransfer should return false when transfer exceeds active balance (frozen tokens)', async function () { + // Freeze 40 of address1's 50 tokens → active balance = 10 + await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1.address, 40n) + expect( + await this.cmtat.canTransfer(this.address1.address, this.address2.address, 20n) + ).to.be.false + }) + + it('canTransfer should return true for valid transfer with no module restrictions', async function () { + expect( + await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n) + ).to.be.true + }) + }) +}) diff --git a/test/deployment/liteStandaloneDeployment.test.js b/test/deployment/liteStandaloneDeployment.test.js index bb585fc..d9e14cc 100644 --- a/test/deployment/liteStandaloneDeployment.test.js +++ b/test/deployment/liteStandaloneDeployment.test.js @@ -12,6 +12,9 @@ const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20B const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') +const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon') +const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon') +const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon') describe('ComplianceTokenCMTATLiteStandalone', function () { beforeEach(async function () { @@ -27,6 +30,7 @@ describe('ComplianceTokenCMTATLiteStandalone', function () { }) // Core CMTAT commons + VersionModuleCommon() PauseModuleCommon() ERC20MintModuleCommon() ERC20BurnModuleCommon() @@ -35,4 +39,8 @@ describe('ComplianceTokenCMTATLiteStandalone', function () { // Extensions ERC20EnforcementModuleCommon() + + // options + ERC20CrossChainModuleCommon() + CCIPModuleCommon() }) diff --git a/test/deployment/liteUUPSUpgradeableDeployment.test.js b/test/deployment/liteUUPSUpgradeableDeployment.test.js index f8e463a..de37ab7 100644 --- a/test/deployment/liteUUPSUpgradeableDeployment.test.js +++ b/test/deployment/liteUUPSUpgradeableDeployment.test.js @@ -14,6 +14,9 @@ const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20B const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') +const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon') +const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon') +const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon') const PROXY_UPGRADE_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PROXY_UPGRADE_ROLE')) @@ -94,6 +97,7 @@ describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { }) // Core CMTAT commons + VersionModuleCommon() PauseModuleCommon() ERC20MintModuleCommon() ERC20BurnModuleCommon() @@ -102,4 +106,8 @@ describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { // Extensions ERC20EnforcementModuleCommon() + + // options + ERC20CrossChainModuleCommon() + CCIPModuleCommon() }) diff --git a/test/deployment/liteUpgradeableDeployment.test.js b/test/deployment/liteUpgradeableDeployment.test.js index d9535d1..64c3b31 100644 --- a/test/deployment/liteUpgradeableDeployment.test.js +++ b/test/deployment/liteUpgradeableDeployment.test.js @@ -14,6 +14,9 @@ const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20B const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') +const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon') +const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon') +const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon') describe('ComplianceTokenCMTATLiteUpgradeable', function () { beforeEach(async function () { @@ -44,6 +47,7 @@ describe('ComplianceTokenCMTATLiteUpgradeable', function () { }) // Core CMTAT commons + VersionModuleCommon() PauseModuleCommon() ERC20MintModuleCommon() ERC20BurnModuleCommon() @@ -52,4 +56,8 @@ describe('ComplianceTokenCMTATLiteUpgradeable', function () { // Extensions ERC20EnforcementModuleCommon() + + // options + ERC20CrossChainModuleCommon() + CCIPModuleCommon() }) diff --git a/test/deploymentUtils.js b/test/deploymentUtils.js index b32a31d..3638633 100644 --- a/test/deploymentUtils.js +++ b/test/deploymentUtils.js @@ -17,6 +17,9 @@ const BURNER_SELF_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_SELF_ROLE') const PAUSER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PAUSER_ROLE')) const ENFORCER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('ENFORCER_ROLE')) const ERC20ENFORCER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('ERC20ENFORCER_ROLE')) +const DOCUMENT_ROLE = ethers.keccak256(ethers.toUtf8Bytes('DOCUMENT_ROLE')) +const SNAPSHOOTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('SNAPSHOOTER_ROLE')) +const CROSS_CHAIN_ROLE = ethers.keccak256(ethers.toUtf8Bytes('CROSS_CHAIN_ROLE')) const DEFAULT_ADMIN_ROLE = '0x0000000000000000000000000000000000000000000000000000000000000000' /** @@ -208,6 +211,9 @@ module.exports = { PAUSER_ROLE, ENFORCER_ROLE, ERC20ENFORCER_ROLE, + DOCUMENT_ROLE, + SNAPSHOOTER_ROLE, + CROSS_CHAIN_ROLE, DEFAULT_ADMIN_ROLE, fixture, loadFixture, From 7ac29594b038a2906e6badb04d2b95f67fa18f69 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Wed, 15 Apr 2026 13:42:42 +0100 Subject: [PATCH 24/57] Update README --- README.md | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 149 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index badc2e3..b9c9ff8 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,109 @@ All CMTAT functional modules are preserved in both variants: - `PolicyProtectedUpgradeable` — Chainlink ACE integration with ERC-7201 storage, `runPolicy` modifier, and policy engine lifecycle management - `ValidationModulePolicyEngine` (Lite) — hybrid validation combining CMTAT module checks with PolicyEngine - `PolicyValidationModuleERC1404` (Lite) — ERC-1404 transfer restriction codes with PolicyEngine awareness +- `TransferValidationPolicy` — Chainlink ACE policy that validates transfers using CMTAT's `IRule` interface (see [TransferValidationPolicy](#transfervalidationpolicy) below) +- `ERC20TransferFromExtractor` — Extractor that produces 4 parameters (`spender`, `from`, `to`, `amount`) for `transfer()` and `transferFrom()` + +## TransferValidationPolicy + +`TransferValidationPolicy` is a Chainlink ACE policy that bridges CMTAT's `IRule` interface with the PolicyEngine, enabling reuse of existing transfer restriction rules as ACE policies. + +### How it works + +The policy accepts an array of `IRule` contracts. When the PolicyEngine invokes the policy during a `transfer()` or `transferFrom()`, each rule is evaluated in order. If any rule returns a non-zero restriction code, the policy reverts with `PolicyRejected` containing the rule's human-readable message. + +It supports two extractor layouts: + +| Extractor | Parameters | Used by | +|-----------|------------|---------| +| `ERC20TransferExtractor` | `[from, to, amount]` | Calls `detectTransferRestriction(from, to, amount)` | +| `ERC20TransferFromExtractor` | `[spender, from, to, amount]` | Calls `detectTransferRestrictionFrom(spender, from, to, amount)` | + +### Mock rules + +Two mock `IRule` implementations are provided in `contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol` for testing and demonstration: + +- **`MaxAmountRule`** — Rejects transfers where the amount exceeds a configurable maximum (restriction code `13`) +- **`RestrictedAddressRule`** — Rejects transfers involving addresses on a configurable restricted list (codes `14`/`15` for sender/recipient) + +### Setup + +1. Deploy the extractor and set it on the PolicyEngine: + +```javascript +const extractor = await ethers.deployContract('ERC20TransferFromExtractor') +const transferSelector = cmtat.interface.getFunction('transfer(address,uint256)').selector +const transferFromSelector = cmtat.interface.getFunction('transferFrom(address,address,uint256)').selector + +await policyEngine.setExtractor(transferSelector, await extractor.getAddress()) +await policyEngine.setExtractor(transferFromSelector, await extractor.getAddress()) +``` + +2. Deploy rule contracts and the policy: + +```javascript +const maxAmountRule = await ethers.deployContract('MaxAmountRule', [1000n]) +const restrictedRule = await ethers.deployContract('RestrictedAddressRule', [[]]) + +const configParams = abiCoder.encode(['address[]'], [ + [await maxAmountRule.getAddress(), await restrictedRule.getAddress()] +]) + +const policy = await upgrades.deployProxy( + await ethers.getContractFactory('TransferValidationPolicy'), + [policyEngineAddress, adminAddress, configParams], + { initializer: 'initialize', unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'] } +) +``` + +3. Register the policy for transfer selectors with parameter names: + +```javascript +const PARAM_SPENDER = keccak256(toUtf8Bytes('spender')) +const PARAM_FROM = keccak256(toUtf8Bytes('from')) +const PARAM_TO = keccak256(toUtf8Bytes('to')) +const PARAM_AMOUNT = keccak256(toUtf8Bytes('amount')) + +await policyEngine.addPolicy( + cmtatAddress, transferSelector, policyAddress, + [PARAM_SPENDER, PARAM_FROM, PARAM_TO, PARAM_AMOUNT] +) +await policyEngine.addPolicy( + cmtatAddress, transferFromSelector, policyAddress, + [PARAM_SPENDER, PARAM_FROM, PARAM_TO, PARAM_AMOUNT] +) +``` + +4. Rules can be updated at any time by the policy owner: + +```javascript +await policy.setRules([newRuleAddress1, newRuleAddress2]) +``` + +### Writing custom rules + +Implement the `IRule` interface to create custom transfer restriction logic: + +```solidity +contract MyCustomRule is IRule { + function detectTransferRestriction(address from, address to, uint256 amount) + public view override returns (uint8) { + // Return 0 for allowed, non-zero for rejected + } + + function detectTransferRestrictionFrom(address spender, address from, address to, uint256 amount) + public view override returns (uint8) { + // Validate spender + transfer params + } + + function messageForTransferRestriction(uint8 code) + external pure override returns (string memory) { + // Return human-readable rejection reason + } + + // ... canTransfer(), canReturnTransferRestrictionCode() +} +``` ## Library @@ -113,10 +216,53 @@ npx hardhat test ``` # Scripts -You can use example scripts to deploy, e.g. for local Hardhat Network deployment: + +## Deployment scripts + +Individual deployment scripts are available for each contract variant: + +| Script | Description | +|--------|-------------| +| `scripts/lite/deploy-lite-standalone.js` | Lite standalone (no proxy) | +| `scripts/lite/deploy-lite-upgradeable.js` | Lite transparent proxy | +| `scripts/lite/deploy-lite-uups.js` | Lite UUPS proxy | +| `scripts/standard/deploy-standard-standalone.js` | Standard standalone (no proxy) | +| `scripts/standard/deploy-standard-upgradeable.js` | Standard transparent proxy | +| `scripts/standard/deploy-standard-uups.js` | Standard UUPS proxy | + +Run any script with: + +```shell +npx hardhat run scripts/lite/deploy-lite-standalone.js +``` + +## Demo script + +`scripts/demo.js` provides a complete end-to-end deployment of the Standard variant with the full Chainlink ACE policy stack. It deploys and wires together all contracts in the correct order: + +1. **PolicyEngine** (proxy) — central policy orchestrator with `defaultAllow = true` +2. **ComplianceTokenCMTATStandalone** — the token contract, attached to the PolicyEngine +3. **PausePolicy** (proxy) — added to all external functions (mint, burn, transfer, enforcement, admin) +4. **RoleBasedAccessControlPolicy** (proxy) — added to all external functions with role-to-selector mappings +5. **MockV3Aggregator** — mock Chainlink reserve price feed (Hardhat network only) +6. **SecureMintPolicy** (proxy) — added to `mint()`, enforces reserve-backed minting via price feed +7. **MintBurnExtractor** — set for `mint()` selector, extracts `account` and `amount` parameters +8. **ERC20TransferExtractor** — set for `transfer()` selector +9. **ERC20TransferFromExtractor** — set for `transferFrom()` selector +10. **MaxAmountRule** + **RestrictedAddressRule** — mock IRule contracts for transfer validation +11. **TransferValidationPolicy** (proxy) — added to `transfer()` and `transferFrom()` with both rules + +The script also configures RBAC operation allowances and grants roles (`MINTER_ROLE`, `BURNER_ROLE`, `BURNER_FROM_ROLE`, `ENFORCER_ROLE`, `ERC20ENFORCER_ROLE`) to the admin account. + +Policy execution order per function: +- `mint()` → PausePolicy → RBAC → SecureMintPolicy +- `transfer()` / `transferFrom()` → PausePolicy → RBAC → TransferValidationPolicy +- All other functions → PausePolicy → RBAC + +Run the demo on a local Hardhat network: ```shell -npx hardhat run {path_to_script} +npx hardhat run scripts/demo.js ``` # Static Analysis (Slither) @@ -147,7 +293,7 @@ slither --version ## Running -Make sure the virtual environment is active and contracts compile successfully before running: +Slither uses Foundry for compilation. Make sure `forge` is installed and the virtual environment is active: ```shell source cct/bin/activate From ce10f8863e63b41ef13fd4a77d200d2a5a038972 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Wed, 15 Apr 2026 13:45:05 +0100 Subject: [PATCH 25/57] Create CMTAT base test module to test unchanged CMTAT functionality, add it to standard token tests. Also add policy validation on standard token transfers --- contracts/modules/standard/CCTCommon.sol | 7 +- test/common/cmtat/BurnModuleCommon.js | 42 +++++++ test/common/cmtat/CMTATModuleCommon.js | 23 ++++ test/common/cmtat/ERC20BaseCommon.js | 108 ++++++++++++++++++ test/common/cmtat/ERC20EnforcementCommon.js | 88 ++++++++++++++ test/common/cmtat/MintModuleCommon.js | 47 ++++++++ test/deployment/standaloneDeployment.test.js | 2 + test/deployment/upgradeableDeployment.test.js | 2 + .../uupsUpgradeableDeployment.test.js | 2 + 9 files changed, 318 insertions(+), 3 deletions(-) create mode 100644 test/common/cmtat/BurnModuleCommon.js create mode 100644 test/common/cmtat/CMTATModuleCommon.js create mode 100644 test/common/cmtat/ERC20BaseCommon.js create mode 100644 test/common/cmtat/ERC20EnforcementCommon.js create mode 100644 test/common/cmtat/MintModuleCommon.js diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index 34d7d62..0256880 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -121,7 +121,7 @@ abstract contract CCTCommon is PUBLIC/EXTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ /* ============ State Functions ============ */ - function transfer(address to, uint256 value) public virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (bool) { + function transfer(address to, uint256 value) public virtual override(ERC20Upgradeable, CMTATBaseCommon) runPolicy returns (bool) { return CMTATBaseCommon.transfer(to, value); } /* @@ -135,6 +135,7 @@ abstract contract CCTCommon is public virtual override(ERC20Upgradeable, CMTATBaseCommon) + runPolicy returns (bool) { return CMTATBaseCommon.transferFrom(from, to, value); @@ -264,7 +265,7 @@ abstract contract CCTCommon is * @custom:access-control * - the caller must have the `DEFAULT_ADMIN_ROLE`. */ - function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) runPolicy {} + function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) runPolicy{} /** * @dev @@ -275,7 +276,7 @@ abstract contract CCTCommon is * @custom:access-control * - the caller must have the `CROSS_CHAIN_ROLE`. */ - function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) runPolicy {} + function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) runPolicy{} /** diff --git a/test/common/cmtat/BurnModuleCommon.js b/test/common/cmtat/BurnModuleCommon.js new file mode 100644 index 0000000..d01e78f --- /dev/null +++ b/test/common/cmtat/BurnModuleCommon.js @@ -0,0 +1,42 @@ +const { expect } = require('chai') + +function BurnModuleCommon () { + context('ERC20 Burn Module', function () { + beforeEach(async function () { + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + }) + + it('testCanBurnByAdmin', async function () { + this.logs = await this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 50n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) + await expect(this.logs).to.emit(this.cmtat, 'Transfer').withArgs(this.address1, ethers.ZeroAddress, 50n) + }) + + it('testCannotBurnByNonBurner', async function () { + await expect( + this.cmtat.connect(this.address1)['burn(address,uint256)'](this.address1, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testCannotBurnMoreThanBalance', async function () { + await expect( + this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 200n) + ).to.be.revertedWithCustomError(this.cmtat, 'ERC20InsufficientBalance') + }) + + it('testBatchBurn', async function () { + await this.cmtat.connect(this.admin).mint(this.address2, 200n) + await this.cmtat.connect(this.admin).batchBurn([this.address1, this.address2], [30n, 50n]) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(70n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(150n) + }) + + it('testBurnAndMint', async function () { + await this.cmtat.connect(this.admin).burnAndMint(this.address1, this.address2, 30n, 50n, '0x') + expect(await this.cmtat.balanceOf(this.address1)).to.equal(70n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) + }) + }) +} + +module.exports = BurnModuleCommon diff --git a/test/common/cmtat/CMTATModuleCommon.js b/test/common/cmtat/CMTATModuleCommon.js new file mode 100644 index 0000000..bb03559 --- /dev/null +++ b/test/common/cmtat/CMTATModuleCommon.js @@ -0,0 +1,23 @@ +const ERC20BaseCommon = require('./ERC20BaseCommon') +const MintModuleCommon = require('./MintModuleCommon') +const BurnModuleCommon = require('./BurnModuleCommon') +const ERC20EnforcementCommon = require('./ERC20EnforcementCommon') + +/** + * Aggregates all CMTAT module tests for standard (PolicyEngine-based) contracts. + * + * Each submodule can also be imported individually for selective testing. + * + * Required `this` context (set up by each standard deployment test): + * this.cmtat, this.admin, this.address1, this.address2, this.address3, this.attacker + * this.policyEngine, this.rbacPolicy, this.rbacPolicyAddress, this.cmtatAddress + * this.mintSelector, this.burnSelector + */ +function CMTATModuleCommon () { + ERC20BaseCommon() + MintModuleCommon() + BurnModuleCommon() + ERC20EnforcementCommon() +} + +module.exports = CMTATModuleCommon diff --git a/test/common/cmtat/ERC20BaseCommon.js b/test/common/cmtat/ERC20BaseCommon.js new file mode 100644 index 0000000..e9e5be0 --- /dev/null +++ b/test/common/cmtat/ERC20BaseCommon.js @@ -0,0 +1,108 @@ +const { expect } = require('chai') +const { DEFAULT_ADMIN_ROLE } = require('../../deploymentUtils') + +function ERC20BaseCommon () { + context('ERC20 Base Module', function () { + context('Token structure', function () { + it('testHasTheDefinedName', async function () { + expect(await this.cmtat.name()).to.equal('CMTA Token') + }) + + it('testHasTheDefinedSymbol', async function () { + expect(await this.cmtat.symbol()).to.equal('CMTAT') + }) + + it('testDecimalsEqual0', async function () { + expect(await this.cmtat.decimals()).to.equal(0) + }) + }) + + context('Balance & Transfer', function () { + const TOKEN_AMOUNTS = [31n, 32n, 33n] + const TOKEN_INITIAL_SUPPLY = TOKEN_AMOUNTS.reduce((a, b) => a + b) + + beforeEach(async function () { + // Grant DEFAULT_ADMIN_ROLE for transfer/transferFrom selectors + const transferSelector = this.cmtat.interface.getFunction('transfer(address,uint256)').selector + const transferFromSelector = this.cmtat.interface.getFunction('transferFrom(address,address,uint256)').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, transferSelector, this.rbacPolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, transferFromSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(transferSelector, DEFAULT_ADMIN_ROLE) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(transferFromSelector, DEFAULT_ADMIN_ROLE) + + await this.cmtat.connect(this.admin).mint(this.address1, TOKEN_AMOUNTS[0]) + await this.cmtat.connect(this.admin).mint(this.address2, TOKEN_AMOUNTS[1]) + await this.cmtat.connect(this.admin).mint(this.address3, TOKEN_AMOUNTS[2]) + }) + + it('testHasTheCorrectBalanceBatch', async function () { + const ADDRESSES = [this.address1, this.address2, this.address3] + const result = await this.cmtat.batchBalanceOf(ADDRESSES) + expect(result[0][0]).to.equal(TOKEN_AMOUNTS[0]) + expect(result[0][1]).to.equal(TOKEN_AMOUNTS[1]) + expect(result[1]).to.equal(TOKEN_INITIAL_SUPPLY) + }) + + it('testTransferFromOneAccountToAnother', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address1) + const AMOUNT = 11n + this.logs = await this.cmtat.connect(this.address1).transfer(this.address2, AMOUNT) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(TOKEN_AMOUNTS[0] - AMOUNT) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(TOKEN_AMOUNTS[1] + AMOUNT) + await expect(this.logs).to.emit(this.cmtat, 'Transfer').withArgs(this.address1, this.address2, AMOUNT) + }) + + it('testCannotTransferMoreTokensThanOwn', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address1) + const BALANCE = await this.cmtat.balanceOf(this.address1) + await expect( + this.cmtat.connect(this.address1).transfer(this.address2, 50n) + ).to.be.revertedWithCustomError(this.cmtat, 'ERC20InsufficientBalance') + .withArgs(this.address1.address, BALANCE, 50n) + }) + + it('testTransferFromWithAllowance', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address3) + await this.cmtat.connect(this.address1).approve(this.address3, 20n) + const AMOUNT = 11n + this.logs = await this.cmtat.connect(this.address3).transferFrom(this.address1, this.address2, AMOUNT) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(TOKEN_AMOUNTS[0] - AMOUNT) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(TOKEN_AMOUNTS[1] + AMOUNT) + await expect(this.logs).to.emit(this.cmtat, 'Transfer').withArgs(this.address1, this.address2, AMOUNT) + }) + + it('testCannotTransferFromWithInsufficientAllowance', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address3) + await this.cmtat.connect(this.address1).approve(this.address3, 20n) + await expect( + this.cmtat.connect(this.address3).transferFrom(this.address1, this.address2, 31n) + ).to.be.revertedWithCustomError(this.cmtat, 'ERC20InsufficientAllowance') + .withArgs(this.address3.address, 20n, 31n) + }) + + it('testTransferRejectedWithoutRole', async function () { + await expect( + this.cmtat.connect(this.address1).transfer(this.address2, 10n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testTransferFromRejectedWithoutRole', async function () { + await this.cmtat.connect(this.address1).approve(this.address3, 20n) + await expect( + this.cmtat.connect(this.address3).transferFrom(this.address1, this.address2, 10n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + }) + + context('Allowance', function () { + it('testApproveAllowance', async function () { + expect(await this.cmtat.allowance(this.address1, this.address3)).to.equal(0n) + this.logs = await this.cmtat.connect(this.address1).approve(this.address3, 20n) + expect(await this.cmtat.allowance(this.address1, this.address3)).to.equal(20n) + await expect(this.logs).to.emit(this.cmtat, 'Approval').withArgs(this.address1, this.address3, 20n) + }) + }) + }) +} + +module.exports = ERC20BaseCommon diff --git a/test/common/cmtat/ERC20EnforcementCommon.js b/test/common/cmtat/ERC20EnforcementCommon.js new file mode 100644 index 0000000..37c7f45 --- /dev/null +++ b/test/common/cmtat/ERC20EnforcementCommon.js @@ -0,0 +1,88 @@ +const { expect } = require('chai') +const { + ENFORCER_ROLE, + ERC20ENFORCER_ROLE, + DEFAULT_ADMIN_ROLE +} = require('../../deploymentUtils') + +function ERC20EnforcementCommon () { + context('ERC20 Enforcement Module', function () { + beforeEach(async function () { + // Set up freeze/unfreeze/forcedTransfer with RBAC + const freezeSelector = this.cmtat.interface.getFunction('freezePartialTokens(address,uint256)').selector + const unfreezeSelector = this.cmtat.interface.getFunction('unfreezePartialTokens(address,uint256)').selector + const forcedTransferSelector = this.cmtat.interface.getFunction('forcedTransfer(address,address,uint256)').selector + + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, freezeSelector, this.rbacPolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, unfreezeSelector, this.rbacPolicyAddress, []) + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, forcedTransferSelector, this.rbacPolicyAddress, []) + + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(freezeSelector, ERC20ENFORCER_ROLE) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(unfreezeSelector, ERC20ENFORCER_ROLE) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(forcedTransferSelector, ENFORCER_ROLE) + + await this.rbacPolicy.connect(this.admin).grantRole(ERC20ENFORCER_ROLE, this.admin.address) + await this.rbacPolicy.connect(this.admin).grantRole(ENFORCER_ROLE, this.admin.address) + + // Set up transfer for testing + const transferSelector = this.cmtat.interface.getFunction('transfer(address,uint256)').selector + await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, transferSelector, this.rbacPolicyAddress, []) + await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(transferSelector, DEFAULT_ADMIN_ROLE) + + await this.cmtat.connect(this.admin).mint(this.address1, 100n) + }) + + it('testFreezePartialTokens', async function () { + await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 50n) + expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(50n) + }) + + it('testCannotFreezeWithoutRole', async function () { + await expect( + this.cmtat.connect(this.address1)['freezePartialTokens(address,uint256)'](this.address1, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testUnfreezePartialTokens', async function () { + await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 50n) + await this.cmtat.connect(this.admin)['unfreezePartialTokens(address,uint256)'](this.address1, 30n) + expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(20n) + }) + + it('testCannotTransferFrozenTokens', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address1) + await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 60n) + // Active balance = 100 - 60 = 40, so transferring 50 should fail + await expect( + this.cmtat.connect(this.address1).transfer(this.address2, 50n) + ).to.be.revertedWithCustomError(this.cmtat, 'ERC7943InsufficientUnfrozenBalance') + }) + + it('testCanTransferActiveBalance', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address1) + await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 60n) + // Active balance = 40, transferring 40 should work + await this.cmtat.connect(this.address1).transfer(this.address2, 40n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(40n) + }) + + it('testForcedTransfer', async function () { + await this.cmtat.connect(this.admin)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) + }) + + it('testCannotForcedTransferWithoutRole', async function () { + await expect( + this.cmtat.connect(this.address1)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testGetActiveBalance', async function () { + await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 30n) + expect(await this.cmtat.getActiveBalanceOf(this.address1)).to.equal(70n) + }) + }) +} + +module.exports = ERC20EnforcementCommon diff --git a/test/common/cmtat/MintModuleCommon.js b/test/common/cmtat/MintModuleCommon.js new file mode 100644 index 0000000..1b18718 --- /dev/null +++ b/test/common/cmtat/MintModuleCommon.js @@ -0,0 +1,47 @@ +const { expect } = require('chai') +const { MINTER_ROLE } = require('../../deploymentUtils') + +const ZERO_ADDRESS = ethers.ZeroAddress + +function MintModuleCommon () { + context('ERC20 Mint Module', function () { + it('testCanBeMintedByAdmin', async function () { + expect(await this.cmtat.balanceOf(this.address1)).to.equal(0n) + this.logs = await this.cmtat.connect(this.admin).mint(this.address1, 20n) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(20n) + expect(await this.cmtat.totalSupply()).to.equal(20n) + await expect(this.logs).to.emit(this.cmtat, 'Transfer').withArgs(ZERO_ADDRESS, this.address1, 20n) + await expect(this.logs).to.emit(this.cmtat, 'Mint').withArgs(this.admin, this.address1, 20n, '0x') + }) + + it('testCanMintByNewMinter', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) + await this.cmtat.connect(this.address1).mint(this.address2, 50n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) + }) + + it('testCannotMintByNonMinter', async function () { + await expect( + this.cmtat.connect(this.address1).mint(this.address1, 20n) + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') + }) + + it('testBatchMint', async function () { + const holders = [this.address1, this.address2, this.address3] + const amounts = [10n, 100n, 1000n] + await this.cmtat.connect(this.admin).batchMint(holders, amounts) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(10n) + expect(await this.cmtat.balanceOf(this.address2)).to.equal(100n) + expect(await this.cmtat.balanceOf(this.address3)).to.equal(1000n) + expect(await this.cmtat.totalSupply()).to.equal(1110n) + }) + + it('testCannotMintToZeroAddress', async function () { + await expect( + this.cmtat.connect(this.admin).mint(ZERO_ADDRESS, 20n) + ).to.be.revertedWithCustomError(this.cmtat, 'ERC20InvalidReceiver') + }) + }) +} + +module.exports = MintModuleCommon diff --git a/test/deployment/standaloneDeployment.test.js b/test/deployment/standaloneDeployment.test.js index 2458aa5..4563c19 100644 --- a/test/deployment/standaloneDeployment.test.js +++ b/test/deployment/standaloneDeployment.test.js @@ -15,6 +15,7 @@ const PausePolicyCommon = require('../common/ace/PausePolicyCommon') const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') +const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon') describe('ComplianceTokenCMTATStandalone', function () { beforeEach(async function () { @@ -64,4 +65,5 @@ describe('ComplianceTokenCMTATStandalone', function () { RBACPolicyCommon() CombinedPolicyCommon() PolicyEngineCommon() + CMTATModuleCommon() }) diff --git a/test/deployment/upgradeableDeployment.test.js b/test/deployment/upgradeableDeployment.test.js index 89d8728..922ecae 100644 --- a/test/deployment/upgradeableDeployment.test.js +++ b/test/deployment/upgradeableDeployment.test.js @@ -17,6 +17,7 @@ const PausePolicyCommon = require('../common/ace/PausePolicyCommon') const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') +const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon') describe('ComplianceTokenCMTATUpgradeable', function () { beforeEach(async function () { @@ -80,4 +81,5 @@ describe('ComplianceTokenCMTATUpgradeable', function () { RBACPolicyCommon() CombinedPolicyCommon() PolicyEngineCommon() + CMTATModuleCommon() }) diff --git a/test/deployment/uupsUpgradeableDeployment.test.js b/test/deployment/uupsUpgradeableDeployment.test.js index 1b2f71b..fccba52 100644 --- a/test/deployment/uupsUpgradeableDeployment.test.js +++ b/test/deployment/uupsUpgradeableDeployment.test.js @@ -17,6 +17,7 @@ const PausePolicyCommon = require('../common/ace/PausePolicyCommon') const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') +const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon') describe('ComplianceTokenCMTATUUPSUpgradeable', function () { beforeEach(async function () { @@ -124,4 +125,5 @@ describe('ComplianceTokenCMTATUUPSUpgradeable', function () { RBACPolicyCommon() CombinedPolicyCommon() PolicyEngineCommon() + CMTATModuleCommon() }) From 0f02683363e055c5ef8aae45571709eaadb74241 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Wed, 15 Apr 2026 16:29:28 +0100 Subject: [PATCH 26/57] Add snapshot and document engines to tokens, change tests and optimize deployment fixtures. Reuse more CMTAT test common modules for full coverage --- .../ComplianceTokenCMTATLiteStandalone.sol | 10 +- .../ComplianceTokenCMTATStandalone.sol | 10 +- contracts/modules/demo/DemoImports.sol | 2 + .../modules/lite/CCTCMTATBasePolicyEngine.sol | 24 ++- contracts/modules/standard/CCTCommon.sol | 24 ++- scripts/demo.js | 99 +++++++---- scripts/lite/deploy-lite-standalone.js | 4 +- scripts/lite/deploy-lite-upgradeable.js | 2 + scripts/lite/deploy-lite-uups.js | 2 + .../standard/deploy-standard-standalone.js | 4 +- .../standard/deploy-standard-upgradeable.js | 2 + scripts/standard/deploy-standard-uups.js | 2 + test/common/ace/RBACPolicyCommon.js | 66 ------- test/common/cmtat/CMTATModuleCommon.js | 21 +++ test/common/cmtat/DocumentModuleCommon.js | 131 ++++++++++++++ test/common/cmtat/ERC20BaseCommon.js | 26 --- test/common/cmtat/ERC20EnforcementCommon.js | 28 --- test/common/cmtat/SnapshotModuleCommon.js | 37 ++++ .../liteStandaloneDeployment.test.js | 44 +++-- .../liteUUPSUpgradeableDeployment.test.js | 48 ++++-- .../liteUpgradeableDeployment.test.js | 48 ++++-- test/deployment/standaloneDeployment.test.js | 51 +----- test/deployment/upgradeableDeployment.test.js | 55 +----- .../uupsUpgradeableDeployment.test.js | 55 +----- test/deploymentUtils.js | 163 ++++++++++++++++-- 25 files changed, 601 insertions(+), 357 deletions(-) create mode 100644 test/common/cmtat/DocumentModuleCommon.js create mode 100644 test/common/cmtat/SnapshotModuleCommon.js diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol index 2b3f323..1837d46 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol @@ -5,6 +5,8 @@ pragma solidity ^0.8.20; import {CCTCMTATBaseERC2771} from "../../modules/lite/CCTCMTATBaseERC2771.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; +import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; /** * @title ComplianceTokenCMTATLite @@ -28,14 +30,18 @@ contract ComplianceTokenCMTATLiteStandalone is CCTCMTATBaseERC2771 { address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - address policyEngine_ + address policyEngine_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_ ) ERC2771Module(forwarderIrrevocable) { // Initialize the contract to avoid front-running initialize( admin, ERC20Attributes_, extraInformationAttributes_, - policyEngine_ + policyEngine_, + snapshotEngine_, + documentEngine_ ); } } \ No newline at end of file diff --git a/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol index 652d1fa..b080bb1 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol @@ -5,6 +5,8 @@ pragma solidity ^0.8.20; import {CCTBaseERC2771} from "../../modules/standard/CCTBaseERC2771.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; +import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol"; /** @@ -28,14 +30,18 @@ contract ComplianceTokenCMTATStandalone is CCTBaseERC2771 { address admin_, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - address policyEngine_ + address policyEngine_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_ ) ERC2771Module(forwarderIrrevocable_) { // Initialize the contract to avoid front-running initialize( admin_, ERC20Attributes_, extraInformationAttributes_, - policyEngine_ + policyEngine_, + snapshotEngine_, + documentEngine_ ); } } \ No newline at end of file diff --git a/contracts/modules/demo/DemoImports.sol b/contracts/modules/demo/DemoImports.sol index 3260a78..dc0bd70 100644 --- a/contracts/modules/demo/DemoImports.sol +++ b/contracts/modules/demo/DemoImports.sol @@ -11,4 +11,6 @@ import {PausePolicy} from "@chainlink/policy-management/policies/PausePolicy.sol import {RoleBasedAccessControlPolicy} from "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol"; import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMintPolicy.sol"; import {ERC20TransferExtractor} from "@chainlink/policy-management/extractors/ERC20TransferExtractor.sol"; +import {SnapshotEngineMock} from "../../../submodules/CMTAT/contracts/mocks/SnapshotEngineMock.sol"; +import {DocumentEngineMock} from "../../../submodules/CMTAT/contracts/mocks/DocumentEngineMock.sol"; \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index 47a3462..c9e51ba 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -39,13 +39,17 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - address policyEngine_ + address policyEngine_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_ ) public virtual initializer { _initialize( admin, ERC20Attributes_, extraInformationAttributes_, - policyEngine_ + policyEngine_, + snapshotEngine_, + documentEngine_ ); } @@ -56,13 +60,17 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - address policyEngine_ + address policyEngine_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_ ) internal virtual onlyInitializing{ __CMTAT_init( admin, ERC20Attributes_, extraInformationAttributes_, - policyEngine_ + policyEngine_, + snapshotEngine_, + documentEngine_ ); } @@ -73,7 +81,9 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - address policyEngine_ + address policyEngine_, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_ ) internal virtual onlyInitializing { /* OpenZeppelin library */ // OZ init_unchained functions are called firstly due to inheritance @@ -88,6 +98,10 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation /* Wrapper modules */ __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_); + /* Engine modules */ + __SnapshotEngineModule_init_unchained(snapshotEngine_); + __DocumentEngineModule_init_unchained(documentEngine_); + /* Chainlink-ACE policy module */ __PolicyProtected_init_unchained(policyEngine_); } diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index 0256880..47bb654 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -42,13 +42,17 @@ abstract contract CCTCommon is address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - address policyEngine + address policyEngine, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_ ) public virtual initializer { _initialize( admin, ERC20Attributes_, extraInformationAttributes_, - policyEngine + policyEngine, + snapshotEngine_, + documentEngine_ ); } @@ -56,13 +60,17 @@ abstract contract CCTCommon is address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - address policyEngine + address policyEngine, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_ ) internal virtual onlyInitializing { __CMTAT_init( admin, ERC20Attributes_, extraInformationAttributes_, - policyEngine + policyEngine, + snapshotEngine_, + documentEngine_ ); } @@ -74,7 +82,9 @@ abstract contract CCTCommon is address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationAttributes_, - address policyEngine + address policyEngine, + ISnapshotEngine snapshotEngine_, + IERC1643 documentEngine_ ) internal virtual onlyInitializing { __Ownable_init_unchained(admin); /* OpenZeppelin library */ @@ -91,6 +101,10 @@ abstract contract CCTCommon is /* Wrapper modules */ __CMTAT_modules_init_unchained(ERC20Attributes_, ExtraInformationAttributes_ ); + + /* Engine modules */ + __SnapshotEngineModule_init_unchained(snapshotEngine_); + __DocumentEngineModule_init_unchained(documentEngine_); } /* diff --git a/scripts/demo.js b/scripts/demo.js index dd7bbec..ca0fac1 100644 --- a/scripts/demo.js +++ b/scripts/demo.js @@ -13,6 +13,8 @@ * 9. ERC20TransferFromExtractor – set for transferFrom() * 10. MaxAmountRule + RestrictedAddressRule (mock IRule contracts) * 11. TransferValidationPolicy (proxy) – added to transfer() and transferFrom() + * 12. DocumentEngineMock – set on the token + * 13. SnapshotEngineMock – set on the token, used for scheduling snapshots * * Script example - do not use it for production */ @@ -25,6 +27,8 @@ const BURNER_ROLE = keccak256(toUtf8Bytes("BURNER_ROLE")); const BURNER_FROM_ROLE = keccak256(toUtf8Bytes("BURNER_FROM_ROLE")); const ENFORCER_ROLE = keccak256(toUtf8Bytes("ENFORCER_ROLE")); const ERC20ENFORCER_ROLE = keccak256(toUtf8Bytes("ERC20ENFORCER_ROLE")); +const SNAPSHOOTER_ROLE = keccak256(toUtf8Bytes("SNAPSHOOTER_ROLE")); +const DOCUMENT_ROLE = keccak256(toUtf8Bytes("DOCUMENT_ROLE")); const DEFAULT_ADMIN_ROLE = "0x0000000000000000000000000000000000000000000000000000000000000000"; /* ============ Helpers ============ */ @@ -107,9 +111,27 @@ async function main() { console.log("PolicyEngine deployed to:", policyEngineAddress); /* ============================================================ - * 2. Deploy ComplianceTokenCMTATStandalone + * 2. Deploy Document & Snapshot Engine Mocks * ============================================================ */ - console.log("\n--- Step 2: Deploy ComplianceTokenCMTATStandalone ---"); + console.log("\n--- Step 2: Deploy Document & Snapshot Engine Mocks ---"); + + const DocumentEngineMockFactory = await ethers.getContractFactory("DocumentEngineMock"); + const documentEngineMock = await DocumentEngineMockFactory.deploy(); + await documentEngineMock.waitForDeployment(); + const documentEngineAddress = await documentEngineMock.getAddress(); + console.log("DocumentEngineMock deployed to:", documentEngineAddress); + + // SnapshotEngineMock needs the token address, so deploy with ZeroAddress first, then update after token deploy + const SnapshotEngineMockFactory = await ethers.getContractFactory("SnapshotEngineMock"); + const snapshotEngineMock = await SnapshotEngineMockFactory.deploy(ZeroAddress, admin); + await snapshotEngineMock.waitForDeployment(); + const snapshotEngineAddress = await snapshotEngineMock.getAddress(); + console.log("SnapshotEngineMock deployed to:", snapshotEngineAddress); + + /* ============================================================ + * 3. Deploy ComplianceTokenCMTATStandalone + * ============================================================ */ + console.log("\n--- Step 3: Deploy ComplianceTokenCMTATStandalone ---"); const forwarderIrrevocable = ZeroAddress; const ERC20Attributes = { name: "Security Token", @@ -133,24 +155,30 @@ async function main() { admin, ERC20Attributes, extraInformationAttributes, - policyEngineAddress + policyEngineAddress, + snapshotEngineAddress, + documentEngineAddress ); await cmtat.waitForDeployment(); const cmtatAddress = await cmtat.getAddress(); console.log("ComplianceTokenCMTATStandalone deployed to:", cmtatAddress); + // Update SnapshotEngineMock with the actual token address + await snapshotEngineMock.setERC20(cmtatAddress); + console.log("SnapshotEngineMock updated with token address"); + /* ============================================================ - * 3. Deploy PausePolicy + * 4. Deploy PausePolicy * ============================================================ */ - console.log("\n--- Step 3: Deploy PausePolicy ---"); + console.log("\n--- Step 4: Deploy PausePolicy ---"); const pausePolicy = await deployPausePolicy(policyEngineAddress, admin, false); const pausePolicyAddress = await pausePolicy.getAddress(); console.log("PausePolicy deployed to:", pausePolicyAddress, "(initially unpaused)"); /* ============================================================ - * 4. Deploy RoleBasedAccessControlPolicy + * 5. Deploy RoleBasedAccessControlPolicy * ============================================================ */ - console.log("\n--- Step 4: Deploy RoleBasedAccessControlPolicy ---"); + console.log("\n--- Step 5: Deploy RoleBasedAccessControlPolicy ---"); const rbacPolicy = await deployRBACPolicy(policyEngineAddress, admin); const rbacPolicyAddress = await rbacPolicy.getAddress(); console.log("RoleBasedAccessControlPolicy deployed to:", rbacPolicyAddress); @@ -185,9 +213,9 @@ async function main() { console.log("SecureMintPolicy deployed to:", secureMintPolicyAddress); /* ============================================================ - * 6. Deploy MintBurnExtractor + * 7. Deploy MintBurnExtractor * ============================================================ */ - console.log("\n--- Step 6: Deploy MintBurnExtractor ---"); + console.log("\n--- Step 7: Deploy MintBurnExtractor ---"); const ExtractorFactory = await ethers.getContractFactory("MintBurnExtractor"); const mintBurnExtractor = await ExtractorFactory.deploy(); await mintBurnExtractor.waitForDeployment(); @@ -195,9 +223,9 @@ async function main() { console.log("MintBurnExtractor deployed to:", extractorAddress); /* ============================================================ - * 7. Collect function selectors + * 8. Collect function selectors * ============================================================ */ - console.log("\n--- Step 7: Configure PolicyEngine ---"); + console.log("\n--- Step 8: Configure PolicyEngine ---"); const selectors = { // Mint / Burn @@ -214,6 +242,9 @@ async function main() { // Admin setName: cmtat.interface.getFunction("setName").selector, setSymbol: cmtat.interface.getFunction("setSymbol").selector, + // Engines + setSnapshotEngine: cmtat.interface.getFunction("setSnapshotEngine").selector, + setDocumentEngine: cmtat.interface.getFunction("setDocumentEngine").selector, }; console.log("Function selectors:"); @@ -222,16 +253,16 @@ async function main() { } /* ============================================================ - * 8. Register extractor for mint selector + * 9. Register extractor for mint selector * ============================================================ */ - console.log("\n--- Step 8: Set extractor for mint selector ---"); + console.log("\n--- Step 9: Set extractor for mint selector ---"); await policyEngine.connect(deployer).setExtractor(selectors.mint, extractorAddress); console.log("Extractor set for mint selector"); /* ============================================================ - * 9. Add PausePolicy to all external functions + * 10. Add PausePolicy to all external functions * ============================================================ */ - console.log("\n--- Step 9: Add PausePolicy to all functions ---"); + console.log("\n--- Step 10: Add PausePolicy to all functions ---"); const allSelectors = Object.entries(selectors); for (const [name, sel] of allSelectors) { await policyEngine.connect(deployer).addPolicy(cmtatAddress, sel, pausePolicyAddress, []); @@ -239,18 +270,18 @@ async function main() { } /* ============================================================ - * 10. Add RBAC policy to all external functions + * 11. Add RBAC policy to all external functions * ============================================================ */ - console.log("\n--- Step 10: Add RBAC policy to all functions ---"); + console.log("\n--- Step 11: Add RBAC policy to all functions ---"); for (const [name, sel] of allSelectors) { await policyEngine.connect(deployer).addPolicy(cmtatAddress, sel, rbacPolicyAddress, []); console.log(` RBAC policy added for: ${name} (${sel})`); } /* ============================================================ - * 11. Add SecureMint policy to mint function + * 12. Add SecureMint policy to mint function * ============================================================ */ - console.log("\n--- Step 11: Add SecureMint policy to mint ---"); + console.log("\n--- Step 12: Add SecureMint policy to mint ---"); // SecureMintPolicy expects 1 parameter: "amount" // The extractor produces parameters named keccak256("amount") and keccak256("account") const PARAM_AMOUNT = keccak256(toUtf8Bytes("amount")); @@ -263,9 +294,9 @@ async function main() { console.log("SecureMint policy added for mint selector"); /* ============================================================ - * 11b. Deploy ERC20TransferExtractor + ERC20TransferFromExtractor + * 12b. Deploy ERC20TransferExtractor + ERC20TransferFromExtractor * ============================================================ */ - console.log("\n--- Step 11b: Deploy Transfer Extractors ---"); + console.log("\n--- Step 12b: Deploy Transfer Extractors ---"); const ERC20ExtractorFactory = await ethers.getContractFactory("ERC20TransferExtractor"); const erc20TransferExtractor = await ERC20ExtractorFactory.deploy(); @@ -280,9 +311,9 @@ async function main() { console.log("ERC20TransferFromExtractor deployed to:", erc20TransferFromExtractorAddress); /* ============================================================ - * 11c. Deploy mock rules + TransferValidationPolicy + * 12c. Deploy mock rules + TransferValidationPolicy * ============================================================ */ - console.log("\n--- Step 11c: Deploy TransferValidationPolicy with mock rules ---"); + console.log("\n--- Step 12c: Deploy TransferValidationPolicy with mock rules ---"); // Deploy MaxAmountRule (max 1000 tokens) const MaxAmountRuleFactory = await ethers.getContractFactory("MaxAmountRule"); @@ -315,9 +346,9 @@ async function main() { console.log("TransferValidationPolicy deployed to:", transferPolicyAddress); /* ============================================================ - * 11d. Set extractors and add TransferValidationPolicy + * 12d. Set extractors and add TransferValidationPolicy * ============================================================ */ - console.log("\n--- Step 11d: Register extractors & TransferValidationPolicy ---"); + console.log("\n--- Step 12d: Register extractors & TransferValidationPolicy ---"); // Set ERC20TransferExtractor for transfer() await policyEngine.connect(deployer).setExtractor(selectors.transfer, erc20TransferExtractorAddress); @@ -352,9 +383,9 @@ async function main() { console.log("TransferValidationPolicy added for transferFrom (4 params: spender, from, to, amount)"); /* ============================================================ - * 12. Grant operation allowances on RBAC policy + * 13. Grant operation allowances on RBAC policy * ============================================================ */ - console.log("\n--- Step 12: Grant RBAC operation allowances ---"); + console.log("\n--- Step 13: Grant RBAC operation allowances ---"); // Map selectors to their logical roles const roleMapping = [ @@ -368,6 +399,8 @@ async function main() { { selector: selectors.unfreezePartial, role: ERC20ENFORCER_ROLE, name: "unfreezePartialTokens → ERC20ENFORCER_ROLE" }, { selector: selectors.setName, role: DEFAULT_ADMIN_ROLE, name: "setName → DEFAULT_ADMIN_ROLE" }, { selector: selectors.setSymbol, role: DEFAULT_ADMIN_ROLE, name: "setSymbol → DEFAULT_ADMIN_ROLE" }, + { selector: selectors.setSnapshotEngine, role: SNAPSHOOTER_ROLE, name: "setSnapshotEngine → SNAPSHOOTER_ROLE" }, + { selector: selectors.setDocumentEngine, role: DOCUMENT_ROLE, name: "setDocumentEngine → DOCUMENT_ROLE" }, ]; for (const { selector, role, name } of roleMapping) { @@ -376,15 +409,17 @@ async function main() { } /* ============================================================ - * 13. Grant roles to the admin account + * 14. Grant roles to the admin account * ============================================================ */ - console.log("\n--- Step 13: Grant roles to admin ---"); + console.log("\n--- Step 14: Grant roles to admin ---"); const rolesToGrant = [ { role: MINTER_ROLE, name: "MINTER_ROLE" }, { role: BURNER_ROLE, name: "BURNER_ROLE" }, { role: BURNER_FROM_ROLE, name: "BURNER_FROM_ROLE" }, { role: ENFORCER_ROLE, name: "ENFORCER_ROLE" }, { role: ERC20ENFORCER_ROLE, name: "ERC20ENFORCER_ROLE" }, + { role: SNAPSHOOTER_ROLE, name: "SNAPSHOOTER_ROLE" }, + { role: DOCUMENT_ROLE, name: "DOCUMENT_ROLE" }, ]; for (const { role, name } of rolesToGrant) { @@ -435,6 +470,8 @@ async function main() { console.log("MaxAmountRule: ", maxAmountRuleAddress); console.log("RestrictedAddressRule: ", restrictedAddressRuleAddress); console.log("Mock Reserve Feed: ", mockFeedAddress); + console.log("DocumentEngineMock: ", documentEngineAddress); + console.log("SnapshotEngineMock: ", snapshotEngineAddress); console.log("\n--- Configuration ---"); console.log(`Reserve amount: 1,000,000 tokens (${reserveAmount} raw with ${tokenDecimals} decimals)`); @@ -448,7 +485,9 @@ async function main() { console.log(" → MaxAmountRule: max", maxTransferAmount.toString(), "raw units per transfer"); console.log(" → RestrictedAddressRule: no addresses initially restricted"); console.log(" - Policy execution order per function: PausePolicy → RBAC → (SecureMint on mint) → (TransferValidation on transfer/transferFrom)"); - console.log(" - Admin has MINTER, BURNER, BURNER_FROM, ENFORCER, ERC20ENFORCER roles"); + console.log(" - Admin has MINTER, BURNER, BURNER_FROM, ENFORCER, ERC20ENFORCER, SNAPSHOOTER, DOCUMENT roles"); + console.log(" - DocumentEngineMock set at deploy (manages on-chain documents via IERC1643)"); + console.log(" - SnapshotEngineMock set at deploy (enables snapshot scheduling for balance tracking)"); console.log("========================================"); } diff --git a/scripts/lite/deploy-lite-standalone.js b/scripts/lite/deploy-lite-standalone.js index 704eb3f..0ff4431 100644 --- a/scripts/lite/deploy-lite-standalone.js +++ b/scripts/lite/deploy-lite-standalone.js @@ -57,7 +57,9 @@ async function main() { admin, ERC20Attributes, extraInformationAttributes, - policyEngineAddress + policyEngineAddress, + ZeroAddress, + ZeroAddress ); await cmtat.waitForDeployment(); diff --git a/scripts/lite/deploy-lite-upgradeable.js b/scripts/lite/deploy-lite-upgradeable.js index 9c6c366..ef37e8d 100644 --- a/scripts/lite/deploy-lite-upgradeable.js +++ b/scripts/lite/deploy-lite-upgradeable.js @@ -50,6 +50,8 @@ async function main() { ERC20Attributes, extraInformationAttributes, policyEngineAddress, + ZeroAddress, + ZeroAddress, ], { initializer: "initialize", diff --git a/scripts/lite/deploy-lite-uups.js b/scripts/lite/deploy-lite-uups.js index 5551d54..3a2f526 100644 --- a/scripts/lite/deploy-lite-uups.js +++ b/scripts/lite/deploy-lite-uups.js @@ -50,6 +50,8 @@ async function main() { ERC20Attributes, extraInformationAttributes, policyEngineAddress, + ZeroAddress, + ZeroAddress, ], { initializer: "initialize", diff --git a/scripts/standard/deploy-standard-standalone.js b/scripts/standard/deploy-standard-standalone.js index e1cf55f..c014c33 100644 --- a/scripts/standard/deploy-standard-standalone.js +++ b/scripts/standard/deploy-standard-standalone.js @@ -57,7 +57,9 @@ async function main() { admin, ERC20Attributes, extraInformationAttributes, - policyEngineAddress + policyEngineAddress, + ZeroAddress, + ZeroAddress ); await cmtat.waitForDeployment(); diff --git a/scripts/standard/deploy-standard-upgradeable.js b/scripts/standard/deploy-standard-upgradeable.js index 2534f46..eafe426 100644 --- a/scripts/standard/deploy-standard-upgradeable.js +++ b/scripts/standard/deploy-standard-upgradeable.js @@ -50,6 +50,8 @@ async function main() { ERC20Attributes, extraInformationAttributes, policyEngineAddress, + ZeroAddress, + ZeroAddress, ], { initializer: "initialize", diff --git a/scripts/standard/deploy-standard-uups.js b/scripts/standard/deploy-standard-uups.js index 82121a6..580e793 100644 --- a/scripts/standard/deploy-standard-uups.js +++ b/scripts/standard/deploy-standard-uups.js @@ -50,6 +50,8 @@ async function main() { ERC20Attributes, extraInformationAttributes, policyEngineAddress, + ZeroAddress, + ZeroAddress, ], { initializer: "initialize", diff --git a/test/common/ace/RBACPolicyCommon.js b/test/common/ace/RBACPolicyCommon.js index 59fb819..e91e973 100644 --- a/test/common/ace/RBACPolicyCommon.js +++ b/test/common/ace/RBACPolicyCommon.js @@ -19,72 +19,6 @@ const { MINTER_ROLE, BURNER_ROLE, BURNER_FROM_ROLE, BURNER_SELF_ROLE, ENFORCER_R */ function RBACPolicyCommon () { context('RoleBasedAccessControlPolicy', function () { - beforeEach(async function () { - // Set up forcedTransfer selector + policy + role - this.forcedTransferSelector = this.cmtat.interface.getFunction('forcedTransfer(address,address,uint256)').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.forcedTransferSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.forcedTransferSelector, ENFORCER_ROLE) - await this.rbacPolicy.connect(this.admin).grantRole(ENFORCER_ROLE, this.admin.address) - - // Set up freezePartialTokens selector + policy + role - this.freezeSelector = this.cmtat.interface.getFunction('freezePartialTokens(address,uint256)').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.freezeSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.freezeSelector, ERC20ENFORCER_ROLE) - - // Set up unfreezePartialTokens selector + policy + role - this.unfreezeSelector = this.cmtat.interface.getFunction('unfreezePartialTokens(address,uint256)').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.unfreezeSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.unfreezeSelector, ERC20ENFORCER_ROLE) - await this.rbacPolicy.connect(this.admin).grantRole(ERC20ENFORCER_ROLE, this.admin.address) - - // Set up setName selector + policy + role (DEFAULT_ADMIN_ROLE granted by RBAC configure()) - this.setNameSelector = this.cmtat.interface.getFunction('setName').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.setNameSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.setNameSelector, DEFAULT_ADMIN_ROLE) - - // Set up setTokenId selector + policy + role - this.setTokenIdSelector = this.cmtat.interface.getFunction('setTokenId').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.setTokenIdSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.setTokenIdSelector, DEFAULT_ADMIN_ROLE) - - // Set up setDocumentEngine selector + policy + role - this.setDocumentEngineSelector = this.cmtat.interface.getFunction('setDocumentEngine').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.setDocumentEngineSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.setDocumentEngineSelector, DOCUMENT_ROLE) - await this.rbacPolicy.connect(this.admin).grantRole(DOCUMENT_ROLE, this.admin.address) - - // Set up setSnapshotEngine selector + policy + role - this.setSnapshotEngineSelector = this.cmtat.interface.getFunction('setSnapshotEngine').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.setSnapshotEngineSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.setSnapshotEngineSelector, SNAPSHOOTER_ROLE) - await this.rbacPolicy.connect(this.admin).grantRole(SNAPSHOOTER_ROLE, this.admin.address) - - // Set up setCCIPAdmin selector + policy + role - this.setCCIPAdminSelector = this.cmtat.interface.getFunction('setCCIPAdmin').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.setCCIPAdminSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.setCCIPAdminSelector, DEFAULT_ADMIN_ROLE) - - // Set up crosschainMint selector + policy + role - this.crosschainMintSelector = this.cmtat.interface.getFunction('crosschainMint').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.crosschainMintSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.crosschainMintSelector, CROSS_CHAIN_ROLE) - - // Set up crosschainBurn selector + policy + role - this.crosschainBurnSelector = this.cmtat.interface.getFunction('crosschainBurn').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.crosschainBurnSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.crosschainBurnSelector, CROSS_CHAIN_ROLE) - - // Set up burnFrom selector + policy + role - this.burnFromSelector = this.cmtat.interface.getFunction('burnFrom').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnFromSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.burnFromSelector, BURNER_FROM_ROLE) - - // Set up burn(uint256) self-burn selector + policy + role - this.selfBurnSelector = this.cmtat.interface.getFunction('burn(uint256)').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.selfBurnSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.selfBurnSelector, BURNER_SELF_ROLE) - }) - it('testAllowMintByMinterRole', async function () { await this.cmtat.connect(this.admin).mint(this.address1, 100n) expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) diff --git a/test/common/cmtat/CMTATModuleCommon.js b/test/common/cmtat/CMTATModuleCommon.js index bb03559..4ed4cd2 100644 --- a/test/common/cmtat/CMTATModuleCommon.js +++ b/test/common/cmtat/CMTATModuleCommon.js @@ -2,6 +2,16 @@ const ERC20BaseCommon = require('./ERC20BaseCommon') const MintModuleCommon = require('./MintModuleCommon') const BurnModuleCommon = require('./BurnModuleCommon') const ERC20EnforcementCommon = require('./ERC20EnforcementCommon') +const DocumentModuleCommon = require('./DocumentModuleCommon') +const SnapshotModuleCommon = require('./SnapshotModuleCommon') +// Snapshot scheduling & global modules from CMTAT +const SnapshotModuleCommonScheduling = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling') +const SnapshotModuleCommonRescheduling = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling') +const SnapshotModuleCommonUnschedule = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule') +const SnapshotModuleCommonGetNextSnapshot = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot') +const SnapshotModuleMultiplePlannedTest = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest') +const SnapshotModuleOnePlannedSnapshotTest = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest') +const SnapshotModuleZeroPlannedSnapshotTest = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot') /** * Aggregates all CMTAT module tests for standard (PolicyEngine-based) contracts. @@ -18,6 +28,17 @@ function CMTATModuleCommon () { MintModuleCommon() BurnModuleCommon() ERC20EnforcementCommon() + DocumentModuleCommon() + SnapshotModuleCommon() + + // Snapshot scheduling & global (from CMTAT) + SnapshotModuleCommonScheduling() + SnapshotModuleCommonRescheduling() + SnapshotModuleCommonUnschedule() + SnapshotModuleCommonGetNextSnapshot() + SnapshotModuleMultiplePlannedTest() + SnapshotModuleOnePlannedSnapshotTest() + SnapshotModuleZeroPlannedSnapshotTest() } module.exports = CMTATModuleCommon diff --git a/test/common/cmtat/DocumentModuleCommon.js b/test/common/cmtat/DocumentModuleCommon.js new file mode 100644 index 0000000..9561421 --- /dev/null +++ b/test/common/cmtat/DocumentModuleCommon.js @@ -0,0 +1,131 @@ +const { expect } = require('chai') +const { deployCCTStandalone } = require('../../deploymentUtils') + +const ZERO_ADDRESS = ethers.ZeroAddress + +function DocumentModuleCommon () { + context('Document Engine Module', function () { + beforeEach(async function () { + this.documentEngineMock = await ethers.deployContract('DocumentEngineMock') + + if ((await this.cmtat.documentEngine()) === ZERO_ADDRESS) { + await this.cmtat + .connect(this.admin) + .setDocumentEngine(this.documentEngineMock.target) + } + }) + + it('testCanSetAndGetADocument', async function () { + const name = ethers.encodeBytes32String('doc1') + const uri = 'https://github.com/CMTA/CMTAT' + const documentHash = ethers.encodeBytes32String('hash1') + + await this.documentEngineMock.setDocument({ name, uri, documentHash }) + + const doc = await this.cmtat.getDocument(name) + expect(doc.uri).to.equal(uri) + expect(doc.documentHash).to.equal(documentHash) + expect(doc.lastModified).to.be.gt(0) + }) + + it('testCanUpdateADocument', async function () { + const name = ethers.encodeBytes32String('doc1') + const uri1 = 'https://github.com/CMTA/CMTAT' + const documentHash1 = ethers.encodeBytes32String('hash1') + + const uri2 = 'https://github.com/CMTA/CMTAT/V2' + const documentHash2 = ethers.encodeBytes32String('hash2') + + await this.documentEngineMock.setDocument([name, uri1, documentHash1]) + await this.documentEngineMock.setDocument([name, uri2, documentHash2]) + + const doc = await this.cmtat.getDocument(name) + expect(doc.uri).to.equal(uri2) + expect(doc.documentHash).to.equal(documentHash2) + expect(doc.lastModified).to.be.gt(0) + }) + + it('testCanGetNullValueIfNoDocument', async function () { + const name = ethers.encodeBytes32String('nonexistent') + const doc = await this.cmtat.getDocument(name) + expect(doc.uri).to.equal('') + expect(doc.documentHash).to.equal(ethers.encodeBytes32String('')) + expect(doc.lastModified).to.equal(0) + }) + + it('testCanRemoveADocument', async function () { + const name = ethers.encodeBytes32String('doc1') + const uri = 'https://github.com/CMTA/CMTAT' + const documentHash = ethers.encodeBytes32String('hash1') + + await this.documentEngineMock.setDocument([name, uri, documentHash]) + await this.documentEngineMock.removeDocument(name) + + const doc = await this.cmtat.getDocument(name) + expect(doc.uri).to.equal('') + expect(doc.documentHash).to.equal(ethers.encodeBytes32String('')) + expect(doc.lastModified).to.equal(0) + }) + + it('testCanReturnAllDocumentNames', async function () { + const name1 = ethers.encodeBytes32String('doc1') + const uri1 = 'https://github.com/CMTA/CMTAT' + const documentHash1 = ethers.encodeBytes32String('hash1') + + const name2 = ethers.encodeBytes32String('doc2') + const uri2 = 'https://github.com/CMTA/CMTAT/V2' + const documentHash2 = ethers.encodeBytes32String('hash2') + + await this.documentEngineMock.setDocument([name1, uri1, documentHash1]) + await this.documentEngineMock.setDocument([name2, uri2, documentHash2]) + + const documentNames = await this.cmtat.getAllDocuments() + expect(documentNames.length).to.equal(2) + expect(documentNames).to.include(name1) + expect(documentNames).to.include(name2) + }) + + it('testCanSetDocumentEngine', async function () { + const newDocEngineMock = await ethers.deployContract('DocumentEngineMock') + this.logs = await this.cmtat + .connect(this.admin) + .setDocumentEngine(newDocEngineMock.target) + await expect(this.logs) + .to.emit(this.cmtat, 'DocumentEngine') + .withArgs(newDocEngineMock.target) + expect(await this.cmtat.documentEngine()).to.equal(newDocEngineMock.target) + }) + + it('testCannotSetDocumentEngineWithSameValue', async function () { + await expect( + this.cmtat + .connect(this.admin) + .setDocumentEngine(await this.cmtat.documentEngine()) + ).to.be.revertedWithCustomError( + this.cmtat, + 'CMTAT_DocumentEngineModule_SameValue' + ) + }) + + it('testGetEmptyDocumentsIfNoDocumentEngine', async function () { + // Deploy a fresh token with no document engine + const policyEngineAddress = await this.policyEngine.getAddress() + const freshCmtat = await deployCCTStandalone( + ethers.ZeroAddress, + this.admin.address, + policyEngineAddress + ) + + const name = ethers.encodeBytes32String('doc1') + const doc = await freshCmtat.getDocument(name) + expect(doc.uri).to.equal('') + expect(doc.documentHash).to.equal(ethers.encodeBytes32String('')) + expect(doc.lastModified).to.equal(0) + + const documentNames = await freshCmtat.getAllDocuments() + expect(documentNames.length).to.equal(0) + }) + }) +} + +module.exports = DocumentModuleCommon diff --git a/test/common/cmtat/ERC20BaseCommon.js b/test/common/cmtat/ERC20BaseCommon.js index e9e5be0..743811b 100644 --- a/test/common/cmtat/ERC20BaseCommon.js +++ b/test/common/cmtat/ERC20BaseCommon.js @@ -1,5 +1,4 @@ const { expect } = require('chai') -const { DEFAULT_ADMIN_ROLE } = require('../../deploymentUtils') function ERC20BaseCommon () { context('ERC20 Base Module', function () { @@ -22,14 +21,6 @@ function ERC20BaseCommon () { const TOKEN_INITIAL_SUPPLY = TOKEN_AMOUNTS.reduce((a, b) => a + b) beforeEach(async function () { - // Grant DEFAULT_ADMIN_ROLE for transfer/transferFrom selectors - const transferSelector = this.cmtat.interface.getFunction('transfer(address,uint256)').selector - const transferFromSelector = this.cmtat.interface.getFunction('transferFrom(address,address,uint256)').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, transferSelector, this.rbacPolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, transferFromSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(transferSelector, DEFAULT_ADMIN_ROLE) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(transferFromSelector, DEFAULT_ADMIN_ROLE) - await this.cmtat.connect(this.admin).mint(this.address1, TOKEN_AMOUNTS[0]) await this.cmtat.connect(this.admin).mint(this.address2, TOKEN_AMOUNTS[1]) await this.cmtat.connect(this.admin).mint(this.address3, TOKEN_AMOUNTS[2]) @@ -44,7 +35,6 @@ function ERC20BaseCommon () { }) it('testTransferFromOneAccountToAnother', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address1) const AMOUNT = 11n this.logs = await this.cmtat.connect(this.address1).transfer(this.address2, AMOUNT) expect(await this.cmtat.balanceOf(this.address1)).to.equal(TOKEN_AMOUNTS[0] - AMOUNT) @@ -53,7 +43,6 @@ function ERC20BaseCommon () { }) it('testCannotTransferMoreTokensThanOwn', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address1) const BALANCE = await this.cmtat.balanceOf(this.address1) await expect( this.cmtat.connect(this.address1).transfer(this.address2, 50n) @@ -62,7 +51,6 @@ function ERC20BaseCommon () { }) it('testTransferFromWithAllowance', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address3) await this.cmtat.connect(this.address1).approve(this.address3, 20n) const AMOUNT = 11n this.logs = await this.cmtat.connect(this.address3).transferFrom(this.address1, this.address2, AMOUNT) @@ -72,26 +60,12 @@ function ERC20BaseCommon () { }) it('testCannotTransferFromWithInsufficientAllowance', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address3) await this.cmtat.connect(this.address1).approve(this.address3, 20n) await expect( this.cmtat.connect(this.address3).transferFrom(this.address1, this.address2, 31n) ).to.be.revertedWithCustomError(this.cmtat, 'ERC20InsufficientAllowance') .withArgs(this.address3.address, 20n, 31n) }) - - it('testTransferRejectedWithoutRole', async function () { - await expect( - this.cmtat.connect(this.address1).transfer(this.address2, 10n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) - - it('testTransferFromRejectedWithoutRole', async function () { - await this.cmtat.connect(this.address1).approve(this.address3, 20n) - await expect( - this.cmtat.connect(this.address3).transferFrom(this.address1, this.address2, 10n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) }) context('Allowance', function () { diff --git a/test/common/cmtat/ERC20EnforcementCommon.js b/test/common/cmtat/ERC20EnforcementCommon.js index 37c7f45..a766cdd 100644 --- a/test/common/cmtat/ERC20EnforcementCommon.js +++ b/test/common/cmtat/ERC20EnforcementCommon.js @@ -1,34 +1,8 @@ const { expect } = require('chai') -const { - ENFORCER_ROLE, - ERC20ENFORCER_ROLE, - DEFAULT_ADMIN_ROLE -} = require('../../deploymentUtils') function ERC20EnforcementCommon () { context('ERC20 Enforcement Module', function () { beforeEach(async function () { - // Set up freeze/unfreeze/forcedTransfer with RBAC - const freezeSelector = this.cmtat.interface.getFunction('freezePartialTokens(address,uint256)').selector - const unfreezeSelector = this.cmtat.interface.getFunction('unfreezePartialTokens(address,uint256)').selector - const forcedTransferSelector = this.cmtat.interface.getFunction('forcedTransfer(address,address,uint256)').selector - - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, freezeSelector, this.rbacPolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, unfreezeSelector, this.rbacPolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, forcedTransferSelector, this.rbacPolicyAddress, []) - - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(freezeSelector, ERC20ENFORCER_ROLE) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(unfreezeSelector, ERC20ENFORCER_ROLE) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(forcedTransferSelector, ENFORCER_ROLE) - - await this.rbacPolicy.connect(this.admin).grantRole(ERC20ENFORCER_ROLE, this.admin.address) - await this.rbacPolicy.connect(this.admin).grantRole(ENFORCER_ROLE, this.admin.address) - - // Set up transfer for testing - const transferSelector = this.cmtat.interface.getFunction('transfer(address,uint256)').selector - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, transferSelector, this.rbacPolicyAddress, []) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(transferSelector, DEFAULT_ADMIN_ROLE) - await this.cmtat.connect(this.admin).mint(this.address1, 100n) }) @@ -50,7 +24,6 @@ function ERC20EnforcementCommon () { }) it('testCannotTransferFrozenTokens', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address1) await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 60n) // Active balance = 100 - 60 = 40, so transferring 50 should fail await expect( @@ -59,7 +32,6 @@ function ERC20EnforcementCommon () { }) it('testCanTransferActiveBalance', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(DEFAULT_ADMIN_ROLE, this.address1) await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 60n) // Active balance = 40, transferring 40 should work await this.cmtat.connect(this.address1).transfer(this.address2, 40n) diff --git a/test/common/cmtat/SnapshotModuleCommon.js b/test/common/cmtat/SnapshotModuleCommon.js new file mode 100644 index 0000000..bff88a5 --- /dev/null +++ b/test/common/cmtat/SnapshotModuleCommon.js @@ -0,0 +1,37 @@ +const { expect } = require('chai') + +const ZERO_ADDRESS = ethers.ZeroAddress + +function SnapshotModuleCommon () { + context('Snapshot Engine Module', function () { + it('testCanSetSnapshotEngine', async function () { + const snapshotEngineMock = await ethers.deployContract( + 'SnapshotEngineMock', + [ZERO_ADDRESS, this.admin] + ) + this.logs = await this.cmtat + .connect(this.admin) + .setSnapshotEngine(snapshotEngineMock.target) + await expect(this.logs) + .to.emit(this.cmtat, 'SnapshotEngine') + .withArgs(snapshotEngineMock.target) + expect(await this.cmtat.snapshotEngine()).to.equal(snapshotEngineMock.target) + }) + + it('testCannotSetSnapshotEngineWithSameValue', async function () { + const snapshotEngineCurrent = await this.cmtat.snapshotEngine() + await expect( + this.cmtat.connect(this.admin).setSnapshotEngine(snapshotEngineCurrent) + ).to.be.revertedWithCustomError( + this.cmtat, + 'CMTAT_SnapshotModule_SameValue' + ) + }) + + it('testSnapshotEngineIsZeroByDefault', async function () { + expect(await this.cmtat.snapshotEngine()).to.equal(ZERO_ADDRESS) + }) + }) +} + +module.exports = SnapshotModuleCommon diff --git a/test/deployment/liteStandaloneDeployment.test.js b/test/deployment/liteStandaloneDeployment.test.js index d9e14cc..0feab24 100644 --- a/test/deployment/liteStandaloneDeployment.test.js +++ b/test/deployment/liteStandaloneDeployment.test.js @@ -1,8 +1,7 @@ const { - fixture, loadFixture, - deployPolicyEngine, - deployCCTLiteStandalone + deployCCTLiteStandalone, + createLiteFixture } = require('../deploymentUtils') // Reuse CMTAT common modules @@ -15,18 +14,23 @@ const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon') const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon') const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon') +const ExtraInfoModuleCommon = require('../../submodules/CMTAT/test/common/ExtraInfoModuleCommon') +const DocumentModuleCommon = require('../../submodules/CMTAT/test/common/DocumentModule/DocumentModuleCommon') +const SnapshotModuleCommon = require('../common/cmtat/SnapshotModuleCommon') +// Snapshot scheduling & global modules from CMTAT +const SnapshotModuleCommonScheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling') +const SnapshotModuleCommonRescheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling') +const SnapshotModuleCommonUnschedule = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule') +const SnapshotModuleCommonGetNextSnapshot = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot') +const SnapshotModuleMultiplePlannedTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest') +const SnapshotModuleOnePlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest') +const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot') + +const liteFixture = createLiteFixture(deployCCTLiteStandalone) describe('ComplianceTokenCMTATLiteStandalone', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(fixture)) - const policyEngine = await deployPolicyEngine(true, this.admin.address) - this.cmtat = await deployCCTLiteStandalone( - this._.address, - this.admin.address, - await policyEngine.getAddress() - ) - this.policyEngine = policyEngine - this.erc1404 = true + Object.assign(this, await loadFixture(liteFixture)) }) // Core CMTAT commons @@ -43,4 +47,20 @@ describe('ComplianceTokenCMTATLiteStandalone', function () { // options ERC20CrossChainModuleCommon() CCIPModuleCommon() + + // Extensions + ExtraInfoModuleCommon() + + // Engines + DocumentModuleCommon() + SnapshotModuleCommon() + + // Snapshot scheduling & global + SnapshotModuleCommonScheduling() + SnapshotModuleCommonRescheduling() + SnapshotModuleCommonUnschedule() + SnapshotModuleCommonGetNextSnapshot() + SnapshotModuleMultiplePlannedTest() + SnapshotModuleOnePlannedSnapshotTest() + SnapshotModuleZeroPlannedSnapshotTest() }) diff --git a/test/deployment/liteUUPSUpgradeableDeployment.test.js b/test/deployment/liteUUPSUpgradeableDeployment.test.js index de37ab7..ae093f5 100644 --- a/test/deployment/liteUUPSUpgradeableDeployment.test.js +++ b/test/deployment/liteUUPSUpgradeableDeployment.test.js @@ -1,10 +1,9 @@ const { ethers, upgrades } = require('hardhat') const { expect } = require('chai') const { - fixture, loadFixture, - deployPolicyEngine, - deployCCTLiteUUPSUpgradeable + deployCCTLiteUUPSUpgradeable, + createLiteFixture } = require('../deploymentUtils') // Reuse CMTAT common modules @@ -17,20 +16,25 @@ const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon') const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon') const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon') +const ExtraInfoModuleCommon = require('../../submodules/CMTAT/test/common/ExtraInfoModuleCommon') +const DocumentModuleCommon = require('../../submodules/CMTAT/test/common/DocumentModule/DocumentModuleCommon') +const SnapshotModuleCommon = require('../common/cmtat/SnapshotModuleCommon') +// Snapshot scheduling & global modules from CMTAT +const SnapshotModuleCommonScheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling') +const SnapshotModuleCommonRescheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling') +const SnapshotModuleCommonUnschedule = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule') +const SnapshotModuleCommonGetNextSnapshot = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot') +const SnapshotModuleMultiplePlannedTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest') +const SnapshotModuleOnePlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest') +const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot') const PROXY_UPGRADE_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PROXY_UPGRADE_ROLE')) +const liteFixture = createLiteFixture(deployCCTLiteUUPSUpgradeable) + describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(fixture)) - const policyEngine = await deployPolicyEngine(true, this.admin.address) - this.cmtat = await deployCCTLiteUUPSUpgradeable( - this._.address, - this.admin.address, - await policyEngine.getAddress() - ) - this.policyEngine = policyEngine - this.erc1404 = true + Object.assign(this, await loadFixture(liteFixture)) }) // UUPS proxy-specific @@ -42,7 +46,9 @@ describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { this.admin.address, ['CMTA Token', 'CMTAT', 0], ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], - policyEngineAddress + policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress ) ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') }) @@ -110,4 +116,20 @@ describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { // options ERC20CrossChainModuleCommon() CCIPModuleCommon() + + // Extensions + ExtraInfoModuleCommon() + + // Engines + DocumentModuleCommon() + SnapshotModuleCommon() + + // Snapshot scheduling & global + SnapshotModuleCommonScheduling() + SnapshotModuleCommonRescheduling() + SnapshotModuleCommonUnschedule() + SnapshotModuleCommonGetNextSnapshot() + SnapshotModuleMultiplePlannedTest() + SnapshotModuleOnePlannedSnapshotTest() + SnapshotModuleZeroPlannedSnapshotTest() }) diff --git a/test/deployment/liteUpgradeableDeployment.test.js b/test/deployment/liteUpgradeableDeployment.test.js index 64c3b31..01f6f19 100644 --- a/test/deployment/liteUpgradeableDeployment.test.js +++ b/test/deployment/liteUpgradeableDeployment.test.js @@ -1,10 +1,9 @@ const { ethers } = require('hardhat') const { expect } = require('chai') const { - fixture, loadFixture, - deployPolicyEngine, - deployCCTLiteUpgradeable + deployCCTLiteUpgradeable, + createLiteFixture } = require('../deploymentUtils') // Reuse CMTAT common modules @@ -17,18 +16,23 @@ const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon') const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon') const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon') +const ExtraInfoModuleCommon = require('../../submodules/CMTAT/test/common/ExtraInfoModuleCommon') +const DocumentModuleCommon = require('../../submodules/CMTAT/test/common/DocumentModule/DocumentModuleCommon') +const SnapshotModuleCommon = require('../common/cmtat/SnapshotModuleCommon') +// Snapshot scheduling & global modules from CMTAT +const SnapshotModuleCommonScheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling') +const SnapshotModuleCommonRescheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling') +const SnapshotModuleCommonUnschedule = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule') +const SnapshotModuleCommonGetNextSnapshot = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot') +const SnapshotModuleMultiplePlannedTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest') +const SnapshotModuleOnePlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest') +const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot') + +const liteFixture = createLiteFixture(deployCCTLiteUpgradeable) describe('ComplianceTokenCMTATLiteUpgradeable', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(fixture)) - const policyEngine = await deployPolicyEngine(true, this.admin.address) - this.cmtat = await deployCCTLiteUpgradeable( - this._.address, - this.admin.address, - await policyEngine.getAddress() - ) - this.policyEngine = policyEngine - this.erc1404 = true + Object.assign(this, await loadFixture(liteFixture)) }) // Proxy-specific @@ -40,7 +44,9 @@ describe('ComplianceTokenCMTATLiteUpgradeable', function () { this.admin.address, ['CMTA Token', 'CMTAT', 0], ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], - policyEngineAddress + policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress ) ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') }) @@ -60,4 +66,20 @@ describe('ComplianceTokenCMTATLiteUpgradeable', function () { // options ERC20CrossChainModuleCommon() CCIPModuleCommon() + + // Extensions + ExtraInfoModuleCommon() + + // Engines + DocumentModuleCommon() + SnapshotModuleCommon() + + // Snapshot scheduling & global + SnapshotModuleCommonScheduling() + SnapshotModuleCommonRescheduling() + SnapshotModuleCommonUnschedule() + SnapshotModuleCommonGetNextSnapshot() + SnapshotModuleMultiplePlannedTest() + SnapshotModuleOnePlannedSnapshotTest() + SnapshotModuleZeroPlannedSnapshotTest() }) diff --git a/test/deployment/standaloneDeployment.test.js b/test/deployment/standaloneDeployment.test.js index 4563c19..b459add 100644 --- a/test/deployment/standaloneDeployment.test.js +++ b/test/deployment/standaloneDeployment.test.js @@ -1,12 +1,7 @@ const { - fixture, loadFixture, - MINTER_ROLE, - BURNER_ROLE, - deployPolicyEngine, - deployPausePolicy, - deployRBACPolicy, - deployCCTStandalone + deployCCTStandalone, + createStandardFixture } = require('../deploymentUtils') // ACE-specific common modules @@ -17,47 +12,11 @@ const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon') +const standardFixture = createStandardFixture(deployCCTStandalone) + describe('ComplianceTokenCMTATStandalone', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(fixture)) - - // Deploy PolicyEngine (defaultAllow = true) - this.policyEngine = await deployPolicyEngine(true, this.admin.address) - this.policyEngineAddress = await this.policyEngine.getAddress() - - // Deploy PausePolicy - this.pausePolicy = await deployPausePolicy(this.policyEngineAddress, this.admin.address, false) - this.pausePolicyAddress = await this.pausePolicy.getAddress() - - // Deploy RoleBasedAccessControlPolicy - this.rbacPolicy = await deployRBACPolicy(this.policyEngineAddress, this.admin.address) - this.rbacPolicyAddress = await this.rbacPolicy.getAddress() - - // Deploy ComplianceToken - this.cmtat = await deployCCTStandalone( - this._.address, - this.admin.address, - this.policyEngineAddress - ) - this.cmtatAddress = await this.cmtat.getAddress() - - // Get function selectors - this.mintSelector = this.cmtat.interface.getFunction('mint(address,uint256)').selector - this.burnSelector = this.cmtat.interface.getFunction('burn(address,uint256)').selector - - // Add PausePolicy + RBAC to PolicyEngine for mint and burn - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.pausePolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.rbacPolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.pausePolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.rbacPolicyAddress, []) - - // Grant operation allowances on RBAC policy - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.burnSelector, BURNER_ROLE) - - // Grant roles to admin - await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.admin.address) - await this.rbacPolicy.connect(this.admin).grantRole(BURNER_ROLE, this.admin.address) + Object.assign(this, await loadFixture(standardFixture)) }) DeploymentCommon() diff --git a/test/deployment/upgradeableDeployment.test.js b/test/deployment/upgradeableDeployment.test.js index 922ecae..5444e40 100644 --- a/test/deployment/upgradeableDeployment.test.js +++ b/test/deployment/upgradeableDeployment.test.js @@ -1,14 +1,9 @@ const { ethers } = require('hardhat') const { expect } = require('chai') const { - fixture, loadFixture, - MINTER_ROLE, - BURNER_ROLE, - deployPolicyEngine, - deployPausePolicy, - deployRBACPolicy, - deployCCTUpgradeable + deployCCTUpgradeable, + createStandardFixture } = require('../deploymentUtils') // ACE-specific common modules @@ -19,47 +14,11 @@ const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon') +const standardFixture = createStandardFixture(deployCCTUpgradeable) + describe('ComplianceTokenCMTATUpgradeable', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(fixture)) - - // Deploy PolicyEngine (defaultAllow = true) - this.policyEngine = await deployPolicyEngine(true, this.admin.address) - this.policyEngineAddress = await this.policyEngine.getAddress() - - // Deploy PausePolicy - this.pausePolicy = await deployPausePolicy(this.policyEngineAddress, this.admin.address, false) - this.pausePolicyAddress = await this.pausePolicy.getAddress() - - // Deploy RoleBasedAccessControlPolicy - this.rbacPolicy = await deployRBACPolicy(this.policyEngineAddress, this.admin.address) - this.rbacPolicyAddress = await this.rbacPolicy.getAddress() - - // Deploy ComplianceToken (upgradeable proxy) - this.cmtat = await deployCCTUpgradeable( - this._.address, - this.admin.address, - this.policyEngineAddress - ) - this.cmtatAddress = await this.cmtat.getAddress() - - // Get function selectors - this.mintSelector = this.cmtat.interface.getFunction('mint(address,uint256)').selector - this.burnSelector = this.cmtat.interface.getFunction('burn(address,uint256)').selector - - // Add PausePolicy + RBAC to PolicyEngine for mint and burn - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.pausePolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.rbacPolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.pausePolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.rbacPolicyAddress, []) - - // Grant operation allowances on RBAC policy - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.burnSelector, BURNER_ROLE) - - // Grant roles to admin - await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.admin.address) - await this.rbacPolicy.connect(this.admin).grantRole(BURNER_ROLE, this.admin.address) + Object.assign(this, await loadFixture(standardFixture)) }) // Proxy-specific @@ -70,7 +29,9 @@ describe('ComplianceTokenCMTATUpgradeable', function () { this.admin.address, ['CMTA Token', 'CMTAT', 0], ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], - this.policyEngineAddress + this.policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress ) ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') }) diff --git a/test/deployment/uupsUpgradeableDeployment.test.js b/test/deployment/uupsUpgradeableDeployment.test.js index fccba52..f7bb587 100644 --- a/test/deployment/uupsUpgradeableDeployment.test.js +++ b/test/deployment/uupsUpgradeableDeployment.test.js @@ -1,14 +1,9 @@ const { ethers, upgrades } = require('hardhat') const { expect } = require('chai') const { - fixture, loadFixture, - MINTER_ROLE, - BURNER_ROLE, - deployPolicyEngine, - deployPausePolicy, - deployRBACPolicy, - deployCCTUUPSUpgradeable + deployCCTUUPSUpgradeable, + createStandardFixture } = require('../deploymentUtils') // ACE-specific common modules @@ -19,47 +14,11 @@ const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon') +const standardFixture = createStandardFixture(deployCCTUUPSUpgradeable) + describe('ComplianceTokenCMTATUUPSUpgradeable', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(fixture)) - - // Deploy PolicyEngine (defaultAllow = true) - this.policyEngine = await deployPolicyEngine(true, this.admin.address) - this.policyEngineAddress = await this.policyEngine.getAddress() - - // Deploy PausePolicy - this.pausePolicy = await deployPausePolicy(this.policyEngineAddress, this.admin.address, false) - this.pausePolicyAddress = await this.pausePolicy.getAddress() - - // Deploy RoleBasedAccessControlPolicy - this.rbacPolicy = await deployRBACPolicy(this.policyEngineAddress, this.admin.address) - this.rbacPolicyAddress = await this.rbacPolicy.getAddress() - - // Deploy ComplianceToken (UUPS proxy) - this.cmtat = await deployCCTUUPSUpgradeable( - this._.address, - this.admin.address, - this.policyEngineAddress - ) - this.cmtatAddress = await this.cmtat.getAddress() - - // Get function selectors - this.mintSelector = this.cmtat.interface.getFunction('mint(address,uint256)').selector - this.burnSelector = this.cmtat.interface.getFunction('burn(address,uint256)').selector - - // Add PausePolicy + RBAC to PolicyEngine for mint and burn - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.pausePolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.mintSelector, this.rbacPolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.pausePolicyAddress, []) - await this.policyEngine.connect(this.admin).addPolicy(this.cmtatAddress, this.burnSelector, this.rbacPolicyAddress, []) - - // Grant operation allowances on RBAC policy - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) - await this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.burnSelector, BURNER_ROLE) - - // Grant roles to admin - await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.admin.address) - await this.rbacPolicy.connect(this.admin).grantRole(BURNER_ROLE, this.admin.address) + Object.assign(this, await loadFixture(standardFixture)) }) // UUPS proxy-specific @@ -70,7 +29,9 @@ describe('ComplianceTokenCMTATUUPSUpgradeable', function () { this.admin.address, ['CMTA Token', 'CMTAT', 0], ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], - this.policyEngineAddress + this.policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress ) ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') }) diff --git a/test/deploymentUtils.js b/test/deploymentUtils.js index 3638633..f245e00 100644 --- a/test/deploymentUtils.js +++ b/test/deploymentUtils.js @@ -86,7 +86,7 @@ async function deployRBACPolicy (policyEngineAddress, ownerAddress) { /* ======== Standard Contract Deploy Helpers ======== */ -async function deployCCTStandalone (forwarder, admin, policyEngineAddress) { +async function deployCCTStandalone (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { const cmtat = await ethers.deployContract( 'ComplianceTokenCMTATStandalone', [ @@ -94,13 +94,15 @@ async function deployCCTStandalone (forwarder, admin, policyEngineAddress) { admin, ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], ['CMTAT_ISIN', TERMS, 'CMTAT_info'], - policyEngineAddress + policyEngineAddress, + snapshotEngine, + documentEngine ] ) return cmtat } -async function deployCCTUpgradeable (forwarder, admin, policyEngineAddress) { +async function deployCCTUpgradeable (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUpgradeable') const cmtat = await upgrades.deployProxy( Factory, @@ -108,7 +110,9 @@ async function deployCCTUpgradeable (forwarder, admin, policyEngineAddress) { admin, ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], ['CMTAT_ISIN', TERMS, 'CMTAT_info'], - policyEngineAddress + policyEngineAddress, + snapshotEngine, + documentEngine ], { initializer: 'initialize', @@ -122,7 +126,7 @@ async function deployCCTUpgradeable (forwarder, admin, policyEngineAddress) { /* ======== Lite Contract Deploy Helpers ======== */ -async function deployCCTLiteStandalone (forwarder, admin, policyEngineAddress) { +async function deployCCTLiteStandalone (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { const cmtat = await ethers.deployContract( 'ComplianceTokenCMTATLiteStandalone', [ @@ -130,13 +134,15 @@ async function deployCCTLiteStandalone (forwarder, admin, policyEngineAddress) { admin, ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], ['CMTAT_ISIN', TERMS, 'CMTAT_info'], - policyEngineAddress + policyEngineAddress, + snapshotEngine, + documentEngine ] ) return cmtat } -async function deployCCTLiteUpgradeable (forwarder, admin, policyEngineAddress) { +async function deployCCTLiteUpgradeable (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { const Factory = await ethers.getContractFactory('ComplianceTokenCMTATLiteUpgradeable') const cmtat = await upgrades.deployProxy( Factory, @@ -144,7 +150,9 @@ async function deployCCTLiteUpgradeable (forwarder, admin, policyEngineAddress) admin, ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], ['CMTAT_ISIN', TERMS, 'CMTAT_info'], - policyEngineAddress + policyEngineAddress, + snapshotEngine, + documentEngine ], { initializer: 'initialize', @@ -158,7 +166,7 @@ async function deployCCTLiteUpgradeable (forwarder, admin, policyEngineAddress) /* ======== UUPS Contract Deploy Helpers ======== */ -async function deployCCTUUPSUpgradeable (forwarder, admin, policyEngineAddress) { +async function deployCCTUUPSUpgradeable (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable') const cmtat = await upgrades.deployProxy( Factory, @@ -166,7 +174,9 @@ async function deployCCTUUPSUpgradeable (forwarder, admin, policyEngineAddress) admin, ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], ['CMTAT_ISIN', TERMS, 'CMTAT_info'], - policyEngineAddress + policyEngineAddress, + snapshotEngine, + documentEngine ], { initializer: 'initialize', @@ -179,7 +189,7 @@ async function deployCCTUUPSUpgradeable (forwarder, admin, policyEngineAddress) return cmtat } -async function deployCCTLiteUUPSUpgradeable (forwarder, admin, policyEngineAddress) { +async function deployCCTLiteUUPSUpgradeable (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { const Factory = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable') const cmtat = await upgrades.deployProxy( Factory, @@ -187,7 +197,9 @@ async function deployCCTLiteUUPSUpgradeable (forwarder, admin, policyEngineAddre admin, ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], ['CMTAT_ISIN', TERMS, 'CMTAT_info'], - policyEngineAddress + policyEngineAddress, + snapshotEngine, + documentEngine ], { initializer: 'initialize', @@ -200,6 +212,129 @@ async function deployCCTLiteUUPSUpgradeable (forwarder, admin, policyEngineAddre return cmtat } +/* ======== Fixture Factories ======== */ + +/** + * Creates a fixture for standard (PolicyEngine + RBAC) deployment tests. + * All contract deployment, policy registration, and role grants happen once; + * loadFixture snapshots the state and restores it for each test. + */ +function createStandardFixture (deployTokenFn) { + return async function standardFixture () { + const [_, admin, address1, address2, address3, deployerAddress, fakeRuleEngine, ruleEngine, attacker] = await ethers.getSigners() + + // Deploy ACE infrastructure + const policyEngine = await deployPolicyEngine(true, admin.address) + const policyEngineAddress = await policyEngine.getAddress() + + const pausePolicy = await deployPausePolicy(policyEngineAddress, admin.address, false) + const pausePolicyAddress = await pausePolicy.getAddress() + + const rbacPolicy = await deployRBACPolicy(policyEngineAddress, admin.address) + const rbacPolicyAddress = await rbacPolicy.getAddress() + + // Deploy compliance token + const cmtat = await deployTokenFn(_.address, admin.address, policyEngineAddress) + const cmtatAddress = await cmtat.getAddress() + + // Collect all selectors + const mintSelector = cmtat.interface.getFunction('mint(address,uint256)').selector + const burnSelector = cmtat.interface.getFunction('burn(address,uint256)').selector + const selfBurnSelector = cmtat.interface.getFunction('burn(uint256)').selector + const burnFromSelector = cmtat.interface.getFunction('burnFrom').selector + const transferSelector = cmtat.interface.getFunction('transfer(address,uint256)').selector + const transferFromSelector = cmtat.interface.getFunction('transferFrom(address,address,uint256)').selector + const forcedTransferSelector = cmtat.interface.getFunction('forcedTransfer(address,address,uint256)').selector + const freezeSelector = cmtat.interface.getFunction('freezePartialTokens(address,uint256)').selector + const unfreezeSelector = cmtat.interface.getFunction('unfreezePartialTokens(address,uint256)').selector + const setNameSelector = cmtat.interface.getFunction('setName').selector + const setTokenIdSelector = cmtat.interface.getFunction('setTokenId').selector + const setDocumentEngineSelector = cmtat.interface.getFunction('setDocumentEngine').selector + const setSnapshotEngineSelector = cmtat.interface.getFunction('setSnapshotEngine').selector + const setCCIPAdminSelector = cmtat.interface.getFunction('setCCIPAdmin').selector + const crosschainMintSelector = cmtat.interface.getFunction('crosschainMint').selector + const crosschainBurnSelector = cmtat.interface.getFunction('crosschainBurn').selector + + const allSelectors = [ + mintSelector, burnSelector, selfBurnSelector, burnFromSelector, + forcedTransferSelector, freezeSelector, unfreezeSelector, + setNameSelector, setTokenIdSelector, + setDocumentEngineSelector, setSnapshotEngineSelector, setCCIPAdminSelector, + crosschainMintSelector, crosschainBurnSelector + ] + + // Add PausePolicy + RBAC to all admin selectors + for (const sel of allSelectors) { + await policyEngine.connect(admin).addPolicy(cmtatAddress, sel, pausePolicyAddress, []) + await policyEngine.connect(admin).addPolicy(cmtatAddress, sel, rbacPolicyAddress, []) + } + + // Transfer selectors get PausePolicy only (no RBAC - anyone can transfer) + await policyEngine.connect(admin).addPolicy(cmtatAddress, transferSelector, pausePolicyAddress, []) + await policyEngine.connect(admin).addPolicy(cmtatAddress, transferFromSelector, pausePolicyAddress, []) + + // Grant operation allowances + const opAllowances = [ + [mintSelector, MINTER_ROLE], + [burnSelector, BURNER_ROLE], + [selfBurnSelector, BURNER_SELF_ROLE], + [burnFromSelector, BURNER_FROM_ROLE], + [forcedTransferSelector, ENFORCER_ROLE], + [freezeSelector, ERC20ENFORCER_ROLE], + [unfreezeSelector, ERC20ENFORCER_ROLE], + [setNameSelector, DEFAULT_ADMIN_ROLE], + [setTokenIdSelector, DEFAULT_ADMIN_ROLE], + [setDocumentEngineSelector, DOCUMENT_ROLE], + [setSnapshotEngineSelector, SNAPSHOOTER_ROLE], + [setCCIPAdminSelector, DEFAULT_ADMIN_ROLE], + [crosschainMintSelector, CROSS_CHAIN_ROLE], + [crosschainBurnSelector, CROSS_CHAIN_ROLE] + ] + for (const [sel, role] of opAllowances) { + await rbacPolicy.connect(admin).grantOperationAllowanceToRole(sel, role) + } + + // Grant roles to admin + const adminRoles = [MINTER_ROLE, BURNER_ROLE, ENFORCER_ROLE, ERC20ENFORCER_ROLE, DOCUMENT_ROLE, SNAPSHOOTER_ROLE] + for (const role of adminRoles) { + await rbacPolicy.connect(admin).grantRole(role, admin.address) + } + + return { + _, admin, address1, address2, address3, deployerAddress, fakeRuleEngine, ruleEngine, attacker, + policyEngine, policyEngineAddress, pausePolicy, pausePolicyAddress, + rbacPolicy, rbacPolicyAddress, + cmtat, cmtatAddress, + mintSelector, burnSelector, selfBurnSelector, burnFromSelector, + transferSelector, transferFromSelector, + forcedTransferSelector, freezeSelector, unfreezeSelector, + setNameSelector, setTokenIdSelector, + setDocumentEngineSelector, setSnapshotEngineSelector, setCCIPAdminSelector, + crosschainMintSelector, crosschainBurnSelector, + erc1404: true + } + } +} + +/** + * Creates a fixture for lite (AccessControl + PolicyEngine for validation) deployment tests. + * Deploys just the PolicyEngine and token; no PausePolicy or RBAC needed. + */ +function createLiteFixture (deployTokenFn) { + return async function liteFixture () { + const [_, admin, address1, address2, address3, deployerAddress, fakeRuleEngine, ruleEngine, attacker] = await ethers.getSigners() + + const policyEngine = await deployPolicyEngine(true, admin.address) + const cmtat = await deployTokenFn(_.address, admin.address, await policyEngine.getAddress()) + + return { + _, admin, address1, address2, address3, deployerAddress, fakeRuleEngine, ruleEngine, attacker, + policyEngine, cmtat, + erc1404: true + } + } +} + module.exports = { ZERO_ADDRESS, DEPLOYMENT_DECIMAL, @@ -225,5 +360,7 @@ module.exports = { deployCCTUUPSUpgradeable, deployCCTLiteStandalone, deployCCTLiteUpgradeable, - deployCCTLiteUUPSUpgradeable + deployCCTLiteUUPSUpgradeable, + createStandardFixture, + createLiteFixture } From 0a1f5dca63664950787dea5368648cfa66fb50d5 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Wed, 15 Apr 2026 16:52:48 +0100 Subject: [PATCH 27/57] Add formatting and linting for js and solidity. Lint and prettify whole repository --- .eslintignore | 6 + .eslintrc.json | 18 + .prettierignore | 5 + .prettierrc | 22 + README.md | 174 +- .../ComplianceTokenCMTATLiteStandalone.sol | 2 +- ...omplianceTokenCMTATLiteUUPSUpgradeable.sol | 9 +- .../ComplianceTokenCMTATLiteUpgradeable.sol | 2 +- .../ComplianceTokenCMTATStandalone.sol | 3 +- .../ComplianceTokenCMTATUUPSUpgradeable.sol | 5 +- .../ComplianceTokenCMTATUpgradeable.sol | 7 +- .../custom/ERC20TransferFromExtractor.sol | 9 +- .../custom/TransferValidationPolicy.sol | 9 +- .../chainlink-ace/mocks/TransferRuleMocks.sol | 24 +- .../modified/MintBurnExtractor.sol | 17 +- .../modified/PolicyProtectedUpgradeable.sol | 184 +- contracts/modules/demo/DemoImports.sol | 1 - .../modules/lite/CCTCMTATBaseERC1404.sol | 51 +- .../lite/CCTCMTATBaseERC20CrossChain.sol | 170 +- .../modules/lite/CCTCMTATBaseERC2771.sol | 29 +- .../modules/lite/CCTCMTATBasePolicyEngine.sol | 107 +- .../lite/PolicyValidationModuleERC1404.sol | 78 +- .../lite/ValidationModulePolicyEngine.sol | 69 +- contracts/modules/standard/CCTBaseERC2771.sol | 29 +- contracts/modules/standard/CCTCommon.sol | 315 +-- hardhat.config.js | 30 +- package-lock.json | 2082 +++++++++++++++-- package.json | 11 +- scripts/demo.js | 457 ++-- scripts/lite/deploy-lite-standalone.js | 52 +- scripts/lite/deploy-lite-upgradeable.js | 63 +- scripts/lite/deploy-lite-uups.js | 60 +- .../standard/deploy-standard-standalone.js | 49 +- .../standard/deploy-standard-upgradeable.js | 55 +- scripts/standard/deploy-standard-uups.js | 57 +- test/common/ace/CombinedPolicyCommon.js | 70 +- test/common/ace/DeploymentCommon.js | 40 +- test/common/ace/PausePolicyCommon.js | 60 +- test/common/ace/PolicyEngineCommon.js | 52 +- test/common/ace/RBACPolicyCommon.js | 355 +-- test/common/cmtat/BurnModuleCommon.js | 54 +- test/common/cmtat/CMTATModuleCommon.js | 56 +- test/common/cmtat/DocumentModuleCommon.js | 169 +- test/common/cmtat/ERC20BaseCommon.js | 116 +- test/common/cmtat/ERC20EnforcementCommon.js | 86 +- test/common/cmtat/MintModuleCommon.js | 66 +- test/common/cmtat/SnapshotModuleCommon.js | 43 +- test/custom/transferValidationPolicy.test.js | 581 ++--- .../liteStandaloneDeployment.test.js | 90 +- .../liteUUPSUpgradeableDeployment.test.js | 175 +- .../liteUpgradeableDeployment.test.js | 124 +- test/deployment/standaloneDeployment.test.js | 38 +- test/deployment/upgradeableDeployment.test.js | 70 +- .../uupsUpgradeableDeployment.test.js | 115 +- test/deploymentUtils.js | 458 ++-- test/testUtils.js | 166 +- 56 files changed, 4698 insertions(+), 2547 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .prettierignore create mode 100644 .prettierrc diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..8d13358 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,6 @@ +node_modules/ +submodules/ +artifacts/ +cache_hardhat/ +typechain-types/ +cct/ diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..f6aa39a --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "env": { + "commonjs": true, + "es2021": true, + "mocha": true, + "node": true + }, + "extends": ["eslint:recommended", "prettier"], + "globals": { + "ethers": "readonly" + }, + "parserOptions": { + "ecmaVersion": "latest" + }, + "rules": { + "no-unused-vars": ["warn", { "argsIgnorePattern": "^_" }] + } +} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..8a817cd --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +node_modules/ +submodules/ +artifacts/ +cache_hardhat/ +typechain-types/ diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..886649d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,22 @@ +{ + "semi": true, + "singleQuote": true, + "trailingComma": "all", + "tabWidth": 2, + "printWidth": 100, + "plugins": ["prettier-plugin-solidity"], + "overrides": [ + { + "files": "*.sol", + "options": { + "parser": "slang", + "printWidth": 120, + "tabWidth": 4, + "useTabs": false, + "singleQuote": false, + "bracketSpacing": false, + "compiler": "0.8.20" + } + } + ] +} diff --git a/README.md b/README.md index b9c9ff8..62647f8 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,47 @@ # CMTAT ACE integration project ## Deployment versions -Two versions are available; *lite* version which substitutes RuleEngine with Chainlink ACE PolicyEngine, and *standard* version, which uses PolicyEngine to protect all external functions instead of OpenZeppelin role-based AccessControl. + +Two versions are available; _lite_ version which substitutes RuleEngine with Chainlink ACE PolicyEngine, and _standard_ version, which uses PolicyEngine to protect all external functions instead of OpenZeppelin role-based AccessControl. ### Standard Replaces CMTAT's `AccessControlUpgradeable` (role-based) with `OwnableUpgradeable` (single owner) and integrates Chainlink ACE `PolicyProtectedUpgradeable` for all access control and compliance validation. -| Contract | Proxy type | -|----------|------------| -| `ComplianceTokenCMTATStandalone` | None | -| `ComplianceTokenCMTATUpgradeable` | Transparent | +| Contract | Proxy type | +| ------------------------------------- | ------------------ | +| `ComplianceTokenCMTATStandalone` | None | +| `ComplianceTokenCMTATUpgradeable` | Transparent | | `ComplianceTokenCMTATUUPSUpgradeable` | UUPS (`onlyOwner`) | ### Lite Keeps CMTAT's `AccessControlUpgradeable` (role-based) for module authorization and adds Chainlink ACE PolicyEngine for transfer validation only, replacing CMTAT's RuleEngine. -| Contract | Proxy type | -|----------|------------| -| `ComplianceTokenCMTATLiteStandalone` | None | -| `ComplianceTokenCMTATLiteUpgradeable` | Transparent | +| Contract | Proxy type | +| ----------------------------------------- | ------------------------------------- | +| `ComplianceTokenCMTATLiteStandalone` | None | +| `ComplianceTokenCMTATLiteUpgradeable` | Transparent | | `ComplianceTokenCMTATLiteUUPSUpgradeable` | UUPS (`onlyRole(PROXY_UPGRADE_ROLE)`) | ## Changes from CMTAT ### Access Control -| Aspect | CMTAT | Standard | Lite | -|--------|-------|----------|------| -| Base model | `AccessControlUpgradeable` with 9+ roles | `OwnableUpgradeable` (single owner) | `AccessControlUpgradeable` (unchanged) | -| Authorization | `onlyRole(MINTER_ROLE)`, etc. | `runPolicy` modifier via PolicyEngine | `onlyRole()` for modules, PolicyEngine for transfers | -| Role management | `grantRole()` / `revokeRole()` | Managed externally via `RoleBasedAccessControlPolicy` | CMTAT roles preserved | +| Aspect | CMTAT | Standard | Lite | +| --------------- | ---------------------------------------- | ----------------------------------------------------- | ---------------------------------------------------- | +| Base model | `AccessControlUpgradeable` with 9+ roles | `OwnableUpgradeable` (single owner) | `AccessControlUpgradeable` (unchanged) | +| Authorization | `onlyRole(MINTER_ROLE)`, etc. | `runPolicy` modifier via PolicyEngine | `onlyRole()` for modules, PolicyEngine for transfers | +| Role management | `grantRole()` / `revokeRole()` | Managed externally via `RoleBasedAccessControlPolicy` | CMTAT roles preserved | ### Validation & Compliance -| Aspect | CMTAT | Standard | Lite | -|--------|-------|----------|------| -| Validation layer | `CMTATBaseRuleEngine` → `ValidationModuleRuleEngine` | `PolicyProtectedUpgradeable` → `IPolicyEngine` | `ValidationModulePolicyEngine` → `IPolicyEngine` | -| Engine type | RuleEngine (custom interface) | Chainlink ACE PolicyEngine | Chainlink ACE PolicyEngine | -| Transfer check | `_canTransferGenericByModuleAndRevert()` + RuleEngine | PolicyEngine `run()` via `runPolicy` modifier | `_canTransferGenericByModuleAndRevert()` + PolicyEngine `run()` | -| ERC-1404 support | Via `ValidationModuleERC1404` | Not applicable (no module-level checks) | Via `PolicyValidationModuleERC1404` | +| Aspect | CMTAT | Standard | Lite | +| ---------------- | ----------------------------------------------------- | ---------------------------------------------- | --------------------------------------------------------------- | +| Validation layer | `CMTATBaseRuleEngine` → `ValidationModuleRuleEngine` | `PolicyProtectedUpgradeable` → `IPolicyEngine` | `ValidationModulePolicyEngine` → `IPolicyEngine` | +| Engine type | RuleEngine (custom interface) | Chainlink ACE PolicyEngine | Chainlink ACE PolicyEngine | +| Transfer check | `_canTransferGenericByModuleAndRevert()` + RuleEngine | PolicyEngine `run()` via `runPolicy` modifier | `_canTransferGenericByModuleAndRevert()` + PolicyEngine `run()` | +| ERC-1404 support | Via `ValidationModuleERC1404` | Not applicable (no module-level checks) | Via `PolicyValidationModuleERC1404` | ### Initialization @@ -92,9 +93,9 @@ The policy accepts an array of `IRule` contracts. When the PolicyEngine invokes It supports two extractor layouts: -| Extractor | Parameters | Used by | -|-----------|------------|---------| -| `ERC20TransferExtractor` | `[from, to, amount]` | Calls `detectTransferRestriction(from, to, amount)` | +| Extractor | Parameters | Used by | +| ---------------------------- | ----------------------------- | ---------------------------------------------------------------- | +| `ERC20TransferExtractor` | `[from, to, amount]` | Calls `detectTransferRestriction(from, to, amount)` | | `ERC20TransferFromExtractor` | `[spender, from, to, amount]` | Calls `detectTransferRestrictionFrom(spender, from, to, amount)` | ### Mock rules @@ -109,53 +110,63 @@ Two mock `IRule` implementations are provided in `contracts/modules/chainlink-ac 1. Deploy the extractor and set it on the PolicyEngine: ```javascript -const extractor = await ethers.deployContract('ERC20TransferFromExtractor') -const transferSelector = cmtat.interface.getFunction('transfer(address,uint256)').selector -const transferFromSelector = cmtat.interface.getFunction('transferFrom(address,address,uint256)').selector - -await policyEngine.setExtractor(transferSelector, await extractor.getAddress()) -await policyEngine.setExtractor(transferFromSelector, await extractor.getAddress()) +const extractor = await ethers.deployContract('ERC20TransferFromExtractor'); +const transferSelector = cmtat.interface.getFunction('transfer(address,uint256)').selector; +const transferFromSelector = cmtat.interface.getFunction( + 'transferFrom(address,address,uint256)', +).selector; + +await policyEngine.setExtractor(transferSelector, await extractor.getAddress()); +await policyEngine.setExtractor(transferFromSelector, await extractor.getAddress()); ``` 2. Deploy rule contracts and the policy: ```javascript -const maxAmountRule = await ethers.deployContract('MaxAmountRule', [1000n]) -const restrictedRule = await ethers.deployContract('RestrictedAddressRule', [[]]) +const maxAmountRule = await ethers.deployContract('MaxAmountRule', [1000n]); +const restrictedRule = await ethers.deployContract('RestrictedAddressRule', [[]]); -const configParams = abiCoder.encode(['address[]'], [ - [await maxAmountRule.getAddress(), await restrictedRule.getAddress()] -]) +const configParams = abiCoder.encode( + ['address[]'], + [[await maxAmountRule.getAddress(), await restrictedRule.getAddress()]], +); const policy = await upgrades.deployProxy( await ethers.getContractFactory('TransferValidationPolicy'), [policyEngineAddress, adminAddress, configParams], - { initializer: 'initialize', unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'] } -) + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], + }, +); ``` 3. Register the policy for transfer selectors with parameter names: ```javascript -const PARAM_SPENDER = keccak256(toUtf8Bytes('spender')) -const PARAM_FROM = keccak256(toUtf8Bytes('from')) -const PARAM_TO = keccak256(toUtf8Bytes('to')) -const PARAM_AMOUNT = keccak256(toUtf8Bytes('amount')) - -await policyEngine.addPolicy( - cmtatAddress, transferSelector, policyAddress, - [PARAM_SPENDER, PARAM_FROM, PARAM_TO, PARAM_AMOUNT] -) -await policyEngine.addPolicy( - cmtatAddress, transferFromSelector, policyAddress, - [PARAM_SPENDER, PARAM_FROM, PARAM_TO, PARAM_AMOUNT] -) +const PARAM_SPENDER = keccak256(toUtf8Bytes('spender')); +const PARAM_FROM = keccak256(toUtf8Bytes('from')); +const PARAM_TO = keccak256(toUtf8Bytes('to')); +const PARAM_AMOUNT = keccak256(toUtf8Bytes('amount')); + +await policyEngine.addPolicy(cmtatAddress, transferSelector, policyAddress, [ + PARAM_SPENDER, + PARAM_FROM, + PARAM_TO, + PARAM_AMOUNT, +]); +await policyEngine.addPolicy(cmtatAddress, transferFromSelector, policyAddress, [ + PARAM_SPENDER, + PARAM_FROM, + PARAM_TO, + PARAM_AMOUNT, +]); ``` 4. Rules can be updated at any time by the policy owner: ```javascript -await policy.setRules([newRuleAddress1, newRuleAddress2]) +await policy.setRules([newRuleAddress1, newRuleAddress2]); ``` ### Writing custom rules @@ -164,22 +175,30 @@ Implement the `IRule` interface to create custom transfer restriction logic: ```solidity contract MyCustomRule is IRule { - function detectTransferRestriction(address from, address to, uint256 amount) - public view override returns (uint8) { - // Return 0 for allowed, non-zero for rejected - } - - function detectTransferRestrictionFrom(address spender, address from, address to, uint256 amount) - public view override returns (uint8) { - // Validate spender + transfer params - } - - function messageForTransferRestriction(uint8 code) - external pure override returns (string memory) { - // Return human-readable rejection reason - } - - // ... canTransfer(), canReturnTransferRestrictionCode() + function detectTransferRestriction( + address from, + address to, + uint256 amount + ) public view override returns (uint8) { + // Return 0 for allowed, non-zero for rejected + } + + function detectTransferRestrictionFrom( + address spender, + address from, + address to, + uint256 amount + ) public view override returns (uint8) { + // Validate spender + transfer params + } + + function messageForTransferRestriction( + uint8 code + ) external pure override returns (string memory) { + // Return human-readable rejection reason + } + + // ... canTransfer(), canReturnTransferRestrictionCode() } ``` @@ -189,11 +208,13 @@ contract MyCustomRule is IRule { - Chainlink ACE ^1.0.0 ## Initialize submodules + ```shell git submodule update ``` ## Install dependencies + You can use any package manager either npm, yarn or pnpm. For example you can type: ```shell @@ -201,6 +222,7 @@ npm install ``` ## Compile contracts + To compile ```shell @@ -221,14 +243,14 @@ npx hardhat test Individual deployment scripts are available for each contract variant: -| Script | Description | -|--------|-------------| -| `scripts/lite/deploy-lite-standalone.js` | Lite standalone (no proxy) | -| `scripts/lite/deploy-lite-upgradeable.js` | Lite transparent proxy | -| `scripts/lite/deploy-lite-uups.js` | Lite UUPS proxy | -| `scripts/standard/deploy-standard-standalone.js` | Standard standalone (no proxy) | -| `scripts/standard/deploy-standard-upgradeable.js` | Standard transparent proxy | -| `scripts/standard/deploy-standard-uups.js` | Standard UUPS proxy | +| Script | Description | +| ------------------------------------------------- | ------------------------------ | +| `scripts/lite/deploy-lite-standalone.js` | Lite standalone (no proxy) | +| `scripts/lite/deploy-lite-upgradeable.js` | Lite transparent proxy | +| `scripts/lite/deploy-lite-uups.js` | Lite UUPS proxy | +| `scripts/standard/deploy-standard-standalone.js` | Standard standalone (no proxy) | +| `scripts/standard/deploy-standard-upgradeable.js` | Standard transparent proxy | +| `scripts/standard/deploy-standard-uups.js` | Standard UUPS proxy | Run any script with: @@ -255,6 +277,7 @@ npx hardhat run scripts/lite/deploy-lite-standalone.js The script also configures RBAC operation allowances and grants roles (`MINTER_ROLE`, `BURNER_ROLE`, `BURNER_FROM_ROLE`, `ENFORCER_ROLE`, `ERC20ENFORCER_ROLE`) to the admin account. Policy execution order per function: + - `mint()` → PausePolicy → RBAC → SecureMintPolicy - `transfer()` / `transferFrom()` → PausePolicy → RBAC → TransferValidationPolicy - All other functions → PausePolicy → RBAC @@ -301,6 +324,7 @@ npm run slither ``` This generates timestamped reports in the `reports/` directory: + - **JSON** — `reports/slither-report-.json` - **Markdown** — `reports/slither-report-.md` @@ -310,4 +334,4 @@ When done, deactivate the virtual environment: ```shell deactivate -``` \ No newline at end of file +``` diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol index 1837d46..a0683c6 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol @@ -44,4 +44,4 @@ contract ComplianceTokenCMTATLiteStandalone is CCTCMTATBaseERC2771 { documentEngine_ ); } -} \ No newline at end of file +} diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol index 312134c..995f5fd 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol @@ -6,7 +6,6 @@ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeab import {CCTCMTATBaseERC2771} from "../../modules/lite/CCTCMTATBaseERC2771.sol"; import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; - /** * @title ComplianceTokenCMTATLiteUUPSUpgradeable * @author Chainlink @@ -20,9 +19,7 @@ contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC2771, UUPSUpg * @param forwarderIrrevocable address of the forwarder, required for the gasless support */ /// @custom:oz-upgrades-unsafe-allow constructor - constructor( - address forwarderIrrevocable - ) ERC2771Module(forwarderIrrevocable) { + constructor(address forwarderIrrevocable) ERC2771Module(forwarderIrrevocable) { // Disable the possibility to initialize the implementation _disableInitializers(); } @@ -30,5 +27,7 @@ contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC2771, UUPSUpg /*////////////////////////////////////////////////////////////// INTERNAL/PRIVATE FUNCTIONS //////////////////////////////////////////////////////////////*/ - function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyRole(PROXY_UPGRADE_ROLE) {} + function _authorizeUpgrade( + address newImplementation + ) internal virtual override(UUPSUpgradeable) onlyRole(PROXY_UPGRADE_ROLE) {} } diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol index 1a95f27..8617713 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol @@ -33,4 +33,4 @@ contract ComplianceTokenCMTATLiteUpgradeable is CCTCMTATBaseERC2771 { // Disable the possibility to initialize the implementation _disableInitializers(); } -} \ No newline at end of file +} diff --git a/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol index b080bb1..a8f0a6e 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol @@ -8,7 +8,6 @@ import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol"; - /** * @title ComplianceTokenCMTATStandalone * @author Chainlink @@ -44,4 +43,4 @@ contract ComplianceTokenCMTATStandalone is CCTBaseERC2771 { documentEngine_ ); } -} \ No newline at end of file +} diff --git a/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol b/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol index 26474d2..2706053 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol @@ -6,7 +6,6 @@ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeab import {CCTBaseERC2771} from "../../modules/standard/CCTBaseERC2771.sol"; import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; - /** * @title ComplianceTokenCMTATUUPSUpgradeable * @author Chainlink @@ -18,9 +17,7 @@ contract ComplianceTokenCMTATUUPSUpgradeable is CCTBaseERC2771, UUPSUpgradeable * @param forwarderIrrevocable address of the forwarder, required for the gasless support */ /// @custom:oz-upgrades-unsafe-allow constructor - constructor( - address forwarderIrrevocable - ) ERC2771Module(forwarderIrrevocable) { + constructor(address forwarderIrrevocable) ERC2771Module(forwarderIrrevocable) { // Disable the possibility to initialize the implementation _disableInitializers(); } diff --git a/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol b/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol index 77c7a7e..b487830 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol @@ -5,7 +5,6 @@ pragma solidity ^0.8.20; import {CCTBaseERC2771} from "../../modules/standard/CCTBaseERC2771.sol"; import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; - /** * @title ComplianceTokenCMTATUpgradeable * @author Chainlink @@ -17,10 +16,8 @@ contract ComplianceTokenCMTATUpgradeable is CCTBaseERC2771 { * @param forwarderIrrevocable address of the forwarder, required for the gasless support */ /// @custom:oz-upgrades-unsafe-allow constructor - constructor( - address forwarderIrrevocable - ) ERC2771Module(forwarderIrrevocable) { + constructor(address forwarderIrrevocable) ERC2771Module(forwarderIrrevocable) { // Disable the possibility to initialize the implementation _disableInitializers(); } -} \ No newline at end of file +} diff --git a/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol b/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol index ff35d3f..0229dd1 100644 --- a/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol +++ b/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol @@ -25,12 +25,9 @@ contract ERC20TransferFromExtractor is IExtractor { bytes32 public constant PARAM_TO = keccak256("to"); bytes32 public constant PARAM_AMOUNT = keccak256("amount"); - function extract(IPolicyEngine.Payload calldata payload) - external - pure - override - returns (IPolicyEngine.Parameter[] memory) - { + function extract( + IPolicyEngine.Payload calldata payload + ) external pure override returns (IPolicyEngine.Parameter[] memory) { address spender; address from; address to; diff --git a/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol index 0edbdc5..cb4f5bd 100644 --- a/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol +++ b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol @@ -31,8 +31,7 @@ contract TransferValidationPolicy is Policy { } // keccak256(abi.encode(uint256(keccak256("cmta.TransferValidationPolicy")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 private constant STORAGE_LOCATION = - 0x9d1bc980e8a6a99b0c67a28b08c935a5db13a988e2a9b52481bff1e80ee16800; + bytes32 private constant STORAGE_LOCATION = 0x9d1bc980e8a6a99b0c67a28b08c935a5db13a988e2a9b52481bff1e80ee16800; function _getStorage() private pure returns (TransferValidationStorage storage $) { assembly { @@ -88,9 +87,9 @@ contract TransferValidationPolicy is Policy { * the spender. */ function run( - address, /* caller */ - address, /* subject */ - bytes4, /* selector */ + address /* caller */, + address /* subject */, + bytes4 /* selector */, bytes[] calldata parameters, bytes calldata /* context */ ) public view override returns (IPolicyEngine.PolicyResult) { diff --git a/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol b/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol index 28b587f..eb5a388 100644 --- a/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol +++ b/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol @@ -17,17 +17,15 @@ contract MaxAmountRule is IRule { } function detectTransferRestriction( - address, /* from */ - address, /* to */ + address /* from */, + address /* to */, uint256 amount ) public view override returns (uint8) { - return amount > maxAmount - ? AMOUNT_TOO_HIGH - : uint8(REJECTED_CODE_BASE.TRANSFER_OK); + return amount > maxAmount ? AMOUNT_TOO_HIGH : uint8(REJECTED_CODE_BASE.TRANSFER_OK); } function detectTransferRestrictionFrom( - address, /* spender */ + address /* spender */, address from, address to, uint256 amount @@ -35,11 +33,7 @@ contract MaxAmountRule is IRule { return detectTransferRestriction(from, to, amount); } - function canTransfer( - address from, - address to, - uint256 amount - ) public view override returns (bool) { + function canTransfer(address from, address to, uint256 amount) public view override returns (bool) { return detectTransferRestriction(from, to, amount) == 0; } @@ -90,7 +84,7 @@ contract RestrictedAddressRule is IRule { } function detectTransferRestrictionFrom( - address, /* spender */ + address /* spender */, address from, address to, uint256 amount @@ -98,11 +92,7 @@ contract RestrictedAddressRule is IRule { return detectTransferRestriction(from, to, amount); } - function canTransfer( - address from, - address to, - uint256 amount - ) public view override returns (bool) { + function canTransfer(address from, address to, uint256 amount) public view override returns (bool) { return detectTransferRestriction(from, to, amount) == 0; } diff --git a/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol b/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol index 142180c..78dbd48 100644 --- a/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol +++ b/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol @@ -19,21 +19,18 @@ contract MintBurnExtractor is IExtractor { string public constant override typeAndVersion = "MintBurnExtractor 1.0.0"; bytes32 public constant PARAM_ACCOUNT = keccak256("account"); - bytes32 public constant PARAM_AMOUNT = keccak256("amount"); + bytes32 public constant PARAM_AMOUNT = keccak256("amount"); // mint(address,uint256) - bytes4 private constant MINT_SELECTOR = bytes4(keccak256("mint(address,uint256)")); + bytes4 private constant MINT_SELECTOR = bytes4(keccak256("mint(address,uint256)")); // burnFrom(address,uint256) bytes4 private constant BURN_FROM_SELECTOR = bytes4(keccak256("burnFrom(address,uint256)")); // burn(uint256) - bytes4 private constant BURN_SELECTOR = bytes4(keccak256("burn(uint256)")); + bytes4 private constant BURN_SELECTOR = bytes4(keccak256("burn(uint256)")); - function extract(IPolicyEngine.Payload calldata payload) - external - pure - override - returns (IPolicyEngine.Parameter[] memory) - { + function extract( + IPolicyEngine.Payload calldata payload + ) external pure override returns (IPolicyEngine.Parameter[] memory) { address account; uint256 amount; @@ -48,7 +45,7 @@ contract MintBurnExtractor is IExtractor { IPolicyEngine.Parameter[] memory result = new IPolicyEngine.Parameter[](2); result[0] = IPolicyEngine.Parameter(PARAM_ACCOUNT, abi.encode(account)); - result[1] = IPolicyEngine.Parameter(PARAM_AMOUNT, abi.encode(amount)); + result[1] = IPolicyEngine.Parameter(PARAM_AMOUNT, abi.encode(amount)); return result; } } diff --git a/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol b/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol index f0e8dbc..a536871 100644 --- a/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol +++ b/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol @@ -16,115 +16,111 @@ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Own * is implemented in the extending contract. */ abstract contract PolicyProtectedUpgradeable is Initializable, ERC165Upgradeable, IPolicyProtected { - /// @custom:storage-location erc7201:chainlink.ace.PolicyProtected - struct PolicyProtectedStorage { - IPolicyEngine policyEngine; - mapping(address sender => bytes context) senderContext; // use transient storage eventually - } + /// @custom:storage-location erc7201:chainlink.ace.PolicyProtected + struct PolicyProtectedStorage { + IPolicyEngine policyEngine; + mapping(address sender => bytes context) senderContext; // use transient storage eventually + } - // keccak256(abi.encode(uint256(keccak256("chainlink.ace.PolicyProtected")) - 1)) & - // ~bytes32(uint256(0xff)) - // solhint-disable-next-line const-name-snakecase - bytes32 private constant policyProtectedStorageLocation = - 0x5970a53874f73819f13c80052b0c1b19d6ce68b29b2ad28a7413019c8a409000; + // keccak256(abi.encode(uint256(keccak256("chainlink.ace.PolicyProtected")) - 1)) & + // ~bytes32(uint256(0xff)) + // solhint-disable-next-line const-name-snakecase + bytes32 private constant policyProtectedStorageLocation = + 0x5970a53874f73819f13c80052b0c1b19d6ce68b29b2ad28a7413019c8a409000; - function _policyProtectedStorage() private pure returns (PolicyProtectedStorage storage $) { - // solhint-disable-next-line no-inline-assembly - assembly { - $.slot := policyProtectedStorageLocation + function _policyProtectedStorage() private pure returns (PolicyProtectedStorage storage $) { + // solhint-disable-next-line no-inline-assembly + assembly { + $.slot := policyProtectedStorageLocation + } } - } - - function __PolicyProtected_init(address policyEngine) internal onlyInitializing { - __ERC165_init(); - __PolicyProtected_init_unchained(policyEngine); - } - function __PolicyProtected_init_unchained(address policyEngine) internal onlyInitializing { - _attachPolicyEngine(policyEngine); - } - /** - * @dev Modifier to run the policy engine on the current method. - * @notice After the function execution completes, any context that was set will be automatically cleared. - */ + function __PolicyProtected_init(address policyEngine) internal onlyInitializing { + __ERC165_init(); + __PolicyProtected_init_unchained(policyEngine); + } - modifier runPolicy() { - if (address(_policyProtectedStorage().policyEngine) == address(0)) { - revert IPolicyEngine.PolicyEngineUndefined(); + function __PolicyProtected_init_unchained(address policyEngine) internal onlyInitializing { + _attachPolicyEngine(policyEngine); } - bytes memory context = getContext(); - _policyProtectedStorage().policyEngine.run( - IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) - ); - _; - if (context.length > 0) { - clearContext(); + /** + * @dev Modifier to run the policy engine on the current method. + * @notice After the function execution completes, any context that was set will be automatically cleared. + */ + + modifier runPolicy() { + if (address(_policyProtectedStorage().policyEngine) == address(0)) { + revert IPolicyEngine.PolicyEngineUndefined(); + } + bytes memory context = getContext(); + _policyProtectedStorage().policyEngine.run( + IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + ); + _; + if (context.length > 0) { + clearContext(); + } } - } - /** - * @dev Modifier to run the policy engine on the current method with the provided context. - * @param context Additional information or authorization to perform the operation. - */ - modifier runPolicyWithContext(bytes calldata context) { - if (address(_policyProtectedStorage().policyEngine) == address(0)) { - revert IPolicyEngine.PolicyEngineUndefined(); + /** + * @dev Modifier to run the policy engine on the current method with the provided context. + * @param context Additional information or authorization to perform the operation. + */ + modifier runPolicyWithContext(bytes calldata context) { + if (address(_policyProtectedStorage().policyEngine) == address(0)) { + revert IPolicyEngine.PolicyEngineUndefined(); + } + _policyProtectedStorage().policyEngine.run( + IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + ); + _; } - _policyProtectedStorage().policyEngine.run( - IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) - ); - _; - } - /// @inheritdoc IPolicyProtected - function attachPolicyEngine(address policyEngine) external virtual override { - _attachPolicyEngine(policyEngine); - } + /// @inheritdoc IPolicyProtected + function attachPolicyEngine(address policyEngine) external virtual override { + _attachPolicyEngine(policyEngine); + } - function _attachPolicyEngine(address policyEngine) internal { - require(policyEngine != address(0), "Policy engine is zero address"); - if (address(_policyProtectedStorage().policyEngine) != address(0)) { - try _policyProtectedStorage().policyEngine.detach() { - // Detachment succeeded - } catch (bytes memory reason) { - emit PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine), reason); - } + function _attachPolicyEngine(address policyEngine) internal { + require(policyEngine != address(0), "Policy engine is zero address"); + if (address(_policyProtectedStorage().policyEngine) != address(0)) { + try _policyProtectedStorage().policyEngine.detach() { + // Detachment succeeded + } catch (bytes memory reason) { + emit PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine), reason); + } + } + _policyProtectedStorage().policyEngine = IPolicyEngine(policyEngine); + IPolicyEngine(policyEngine).attach(); + emit PolicyEngineAttached(policyEngine); } - _policyProtectedStorage().policyEngine = IPolicyEngine(policyEngine); - IPolicyEngine(policyEngine).attach(); - emit PolicyEngineAttached(policyEngine); - } - /// @inheritdoc IPolicyProtected - function getPolicyEngine() public view virtual override returns (address) { - return address(_policyProtectedStorage().policyEngine); - } + /// @inheritdoc IPolicyProtected + function getPolicyEngine() public view virtual override returns (address) { + return address(_policyProtectedStorage().policyEngine); + } - /// @inheritdoc IPolicyProtected - function setContext(bytes calldata context) public override { - _policyProtectedStorage().senderContext[msg.sender] = context; - } + /// @inheritdoc IPolicyProtected + function setContext(bytes calldata context) public override { + _policyProtectedStorage().senderContext[msg.sender] = context; + } - /// @inheritdoc IPolicyProtected - function getContext() public view override returns (bytes memory) { - return _policyProtectedStorage().senderContext[msg.sender]; - } + /// @inheritdoc IPolicyProtected + function getContext() public view override returns (bytes memory) { + return _policyProtectedStorage().senderContext[msg.sender]; + } - /// @inheritdoc IPolicyProtected - function clearContext() public override { - delete _policyProtectedStorage().senderContext[msg.sender]; - } + /// @inheritdoc IPolicyProtected + function clearContext() public override { + delete _policyProtectedStorage().senderContext[msg.sender]; + } - /** - * @dev See {IERC165-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) - public - view - virtual - override(ERC165Upgradeable, IERC165) - returns (bool) - { - return interfaceId == type(IPolicyProtected).interfaceId || super.supportsInterface(interfaceId); - } + /** + * @dev See {IERC165-supportsInterface}. + */ + function supportsInterface( + bytes4 interfaceId + ) public view virtual override(ERC165Upgradeable, IERC165) returns (bool) { + return interfaceId == type(IPolicyProtected).interfaceId || super.supportsInterface(interfaceId); + } } diff --git a/contracts/modules/demo/DemoImports.sol b/contracts/modules/demo/DemoImports.sol index dc0bd70..e8b6789 100644 --- a/contracts/modules/demo/DemoImports.sol +++ b/contracts/modules/demo/DemoImports.sol @@ -13,4 +13,3 @@ import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMint import {ERC20TransferExtractor} from "@chainlink/policy-management/extractors/ERC20TransferExtractor.sol"; import {SnapshotEngineMock} from "../../../submodules/CMTAT/contracts/mocks/SnapshotEngineMock.sol"; import {DocumentEngineMock} from "../../../submodules/CMTAT/contracts/mocks/DocumentEngineMock.sol"; - \ No newline at end of file diff --git a/contracts/modules/lite/CCTCMTATBaseERC1404.sol b/contracts/modules/lite/CCTCMTATBaseERC1404.sol index f1eb906..bbd4d08 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC1404.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC1404.sol @@ -7,16 +7,15 @@ import {PolicyValidationModuleERC1404, IERC1404, IERC1404Extend} from "./PolicyV import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; -import {ERC20EnforcementModule, ERC20EnforcementModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; +import { + ERC20EnforcementModule, + ERC20EnforcementModuleInternal +} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; - -abstract contract CCTCMTATBaseERC1404 is - CCTCMTATBasePolicyEngine, - PolicyValidationModuleERC1404 -{ +abstract contract CCTCMTATBaseERC1404 is CCTCMTATBasePolicyEngine, PolicyValidationModuleERC1404 { /** - * @dev ERC20EnforcementModule error text - */ + * @dev ERC20EnforcementModule error text + */ string internal constant TEXT_TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE = "AddrFrom:insufficientActiveBalance"; /*////////////////////////////////////////////////////////////// @@ -24,39 +23,41 @@ abstract contract CCTCMTATBaseERC1404 is //////////////////////////////////////////////////////////////*/ /** - * @inheritdoc PolicyValidationModuleERC1404 - */ + * @inheritdoc PolicyValidationModuleERC1404 + */ function messageForTransferRestriction( uint8 restrictionCode - ) public view virtual override(PolicyValidationModuleERC1404) returns (string memory message) { - if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE)) { + ) public view virtual override(PolicyValidationModuleERC1404) returns (string memory message) { + if ( + restrictionCode == + uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE) + ) { return TEXT_TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE; } else { return PolicyValidationModuleERC1404.messageForTransferRestriction(restrictionCode); } - } /** - * @inheritdoc ValidationModulePolicyEngine - */ + * @inheritdoc ValidationModulePolicyEngine + */ function canTransfer( address from, address to, uint256 value - ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModuleCore) view returns (bool) { + ) public view virtual override(CCTCMTATBasePolicyEngine, ValidationModuleCore) returns (bool) { return CCTCMTATBasePolicyEngine.canTransfer(from, to, value); } /** - * @inheritdoc ValidationModulePolicyEngine - */ + * @inheritdoc ValidationModulePolicyEngine + */ function canTransferFrom( address spender, address from, address to, uint256 value - ) public virtual override (CCTCMTATBasePolicyEngine, ValidationModuleCore) view returns (bool) { + ) public view virtual override(CCTCMTATBasePolicyEngine, ValidationModuleCore) returns (bool) { return CCTCMTATBasePolicyEngine.canTransferFrom(spender, from, to, value); } @@ -67,18 +68,20 @@ abstract contract CCTCMTATBaseERC1404 is address from, address to, uint256 value - ) internal virtual override(PolicyValidationModuleERC1404) view returns (uint8 code) { + ) internal view virtual override(PolicyValidationModuleERC1404) returns (uint8 code) { uint256 frozenTokensLocal = ERC20EnforcementModule.getFrozenTokens(from); if (frozenTokensLocal > 0) { uint256 activeBalance = ERC20Upgradeable.balanceOf(from) - frozenTokensLocal; - if(value > activeBalance) { + if (value > activeBalance) { return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE); } - } + } return PolicyValidationModuleERC1404._detectTransferRestriction(from, to, value); } - function supportsInterface(bytes4 interfaceId) public view virtual override(CCTCMTATBasePolicyEngine) returns (bool) { + function supportsInterface( + bytes4 interfaceId + ) public view virtual override(CCTCMTATBasePolicyEngine) returns (bool) { return CCTCMTATBasePolicyEngine.supportsInterface(interfaceId); } -} \ No newline at end of file +} diff --git a/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol index c15f7a9..3004227 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol @@ -6,94 +6,106 @@ import {ERC20CrossChainModule} from "../../../submodules/CMTAT/contracts/modules import {CCIPModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol"; import {CCTCMTATBaseERC1404} from "./CCTCMTATBaseERC1404.sol"; import {CMTATBaseCommon} from "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol"; -import {ERC20MintModule, ERC20MintModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol"; -import {ERC20BurnModule, ERC20BurnModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol"; +import { + ERC20MintModule, + ERC20MintModuleInternal +} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol"; +import { + ERC20BurnModule, + ERC20BurnModuleInternal +} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; -abstract contract CCTCMTATBaseERC20CrossChain is ERC20CrossChainModule, CCIPModule, CCTCMTATBaseERC1404 { - +abstract contract CCTCMTATBaseERC20CrossChain is ERC20CrossChainModule, CCIPModule, CCTCMTATBaseERC1404 { /* ============ State Functions ============ */ /** - * @dev revert if the contract is in pause state - */ - function approve(address spender, uint256 value) public virtual override(ERC20Upgradeable) whenNotPaused returns (bool) { + * @dev revert if the contract is in pause state + */ + function approve( + address spender, + uint256 value + ) public virtual override(ERC20Upgradeable) whenNotPaused returns (bool) { return ERC20Upgradeable.approve(spender, value); } - function transfer(address to, uint256 value) public virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (bool) { - return CMTATBaseCommon.transfer(to, value); + function transfer( + address to, + uint256 value + ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (bool) { + return CMTATBaseCommon.transfer(to, value); } /* - * @inheritdoc ERC20BaseModule - */ + * @inheritdoc ERC20BaseModule + */ function transferFrom( address from, address to, uint256 value - ) - public - virtual - override(ERC20Upgradeable, CMTATBaseCommon) - returns (bool) - { + ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (bool) { return CMTATBaseCommon.transferFrom(from, to, value); } /** - * @dev Check if the mint is valid - */ - function _mintOverride(address account, uint256 value) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { + * @dev Check if the mint is valid + */ + function _mintOverride( + address account, + uint256 value + ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { _checkTransferred(address(0), address(0), account, value); ERC20MintModuleInternal._mintOverride(account, value); } /** - * @dev Check if the burn is valid - */ - function _burnOverride(address account, uint256 value) internal virtual override(CMTATBaseCommon, ERC20BurnModuleInternal) { - _checkTransferred(address(0), account, address(0), value); + * @dev Check if the burn is valid + */ + function _burnOverride( + address account, + uint256 value + ) internal virtual override(CMTATBaseCommon, ERC20BurnModuleInternal) { + _checkTransferred(address(0), account, address(0), value); ERC20BurnModuleInternal._burnOverride(account, value); } /** - * @dev Check if a minter transfer is valid - */ - function _minterTransferOverride(address from, address to, uint256 value) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { + * @dev Check if a minter transfer is valid + */ + function _minterTransferOverride( + address from, + address to, + uint256 value + ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { _checkTransferred(address(0), from, to, value); ERC20MintModuleInternal._minterTransferOverride(from, to, value); } /** - * @inheritdoc CMTATBaseCommon - */ - function decimals() - public - view - virtual - override(ERC20Upgradeable, CMTATBaseCommon) - returns (uint8) - { + * @inheritdoc CMTATBaseCommon + */ + function decimals() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (uint8) { return CMTATBaseCommon.decimals(); } - /** - * @inheritdoc CMTATBaseCommon - */ - function name() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) { + * @inheritdoc CMTATBaseCommon + */ + function name() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) { return CMTATBaseCommon.name(); } /** - * @inheritdoc CMTATBaseCommon - */ + * @inheritdoc CMTATBaseCommon + */ function symbol() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) { return CMTATBaseCommon.symbol(); } - /* ============ View functions ============ */ - function supportsInterface(bytes4 _interfaceId) public view virtual override(ERC20CrossChainModule, CCTCMTATBaseERC1404) returns (bool) { - return ERC20CrossChainModule.supportsInterface(_interfaceId)|| CCTCMTATBaseERC1404.supportsInterface(_interfaceId); + function supportsInterface( + bytes4 _interfaceId + ) public view virtual override(ERC20CrossChainModule, CCTCMTATBaseERC1404) returns (bool) { + return + ERC20CrossChainModule.supportsInterface(_interfaceId) || + CCTCMTATBaseERC1404.supportsInterface(_interfaceId); } /*////////////////////////////////////////////////////////////// @@ -101,38 +113,50 @@ abstract contract CCTCMTATBaseERC20CrossChain is ERC20CrossChainModule, CCIPModu //////////////////////////////////////////////////////////////*/ /* ==== Access Control ==== */ - /** - * @custom:access-control - * - the caller must have the `DEFAULT_ADMIN_ROLE`. - */ + /** + * @custom:access-control + * - the caller must have the `DEFAULT_ADMIN_ROLE`. + */ function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) onlyRole(DEFAULT_ADMIN_ROLE) {} - /** - * @dev - * A cross-chain bridge could call the OpenZeppelin function `renounceRole` to lose their privileges (CROSS_CHAIN_ROLE) - * While it is not intended,this has no other effect than depriving the bridge of burn/mint tokens - * An attacker could use this to disrupt minting/burning if they can get the bridge to execute calls. - * However, in this case, the bridge should still be considered compromised and not used again. - * @custom:access-control - * - the caller must have the `CROSS_CHAIN_ROLE`. - */ + /** + * @dev + * A cross-chain bridge could call the OpenZeppelin function `renounceRole` to lose their privileges (CROSS_CHAIN_ROLE) + * While it is not intended,this has no other effect than depriving the bridge of burn/mint tokens + * An attacker could use this to disrupt minting/burning if they can get the bridge to execute calls. + * However, in this case, the bridge should still be considered compromised and not used again. + * @custom:access-control + * - the caller must have the `CROSS_CHAIN_ROLE`. + */ function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) whenNotPaused { - AccessControlUpgradeable._checkRole(CROSS_CHAIN_ROLE, caller); + AccessControlUpgradeable._checkRole(CROSS_CHAIN_ROLE, caller); } - /** - * @custom:access-control - * - the caller must have the `BURNER_FROM_ROLE`. - * - We don't allow token holder to burn their own tokens if they don't have this role. - */ - function _authorizeBurnFrom() internal virtual override(ERC20CrossChainModule) onlyRole(BURNER_FROM_ROLE) whenNotPaused{} + /** + * @custom:access-control + * - the caller must have the `BURNER_FROM_ROLE`. + * - We don't allow token holder to burn their own tokens if they don't have this role. + */ + function _authorizeBurnFrom() + internal + virtual + override(ERC20CrossChainModule) + onlyRole(BURNER_FROM_ROLE) + whenNotPaused + {} - /** - * @custom:access-control - * - the caller must have the `BURNER_SELF_ROLE`. - * - We don't allow token holder to burn their own tokens if they don't have this role. - */ - function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) onlyRole(BURNER_SELF_ROLE) whenNotPaused{} + /** + * @custom:access-control + * - the caller must have the `BURNER_SELF_ROLE`. + * - We don't allow token holder to burn their own tokens if they don't have this role. + */ + function _authorizeSelfBurn() + internal + virtual + override(ERC20CrossChainModule) + onlyRole(BURNER_SELF_ROLE) + whenNotPaused + {} /* ==== ERC-20 OpenZeppelin ==== */ function _update( @@ -140,6 +164,6 @@ abstract contract CCTCMTATBaseERC20CrossChain is ERC20CrossChainModule, CCIPModu address to, uint256 amount ) internal virtual override(ERC20Upgradeable, CMTATBaseCommon) { - return CMTATBaseCommon._update(from, to, amount); + return CMTATBaseCommon._update(from, to, amount); } -} \ No newline at end of file +} diff --git a/contracts/modules/lite/CCTCMTATBaseERC2771.sol b/contracts/modules/lite/CCTCMTATBaseERC2771.sol index c1f1e93..b3dfea8 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC2771.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC2771.sol @@ -3,19 +3,23 @@ pragma solidity ^0.8.20; import {CCTCMTATBaseERC20CrossChain} from "./CCTCMTATBaseERC20CrossChain.sol"; -import {ERC2771Module, ERC2771ContextUpgradeable} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import { + ERC2771Module, + ERC2771ContextUpgradeable +} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; -abstract contract CCTCMTATBaseERC2771 is CCTCMTATBaseERC20CrossChain, ERC2771Module { +abstract contract CCTCMTATBaseERC2771 is CCTCMTATBaseERC20CrossChain, ERC2771Module { /*////////////////////////////////////////////////////////////// ERC2771 MODULE //////////////////////////////////////////////////////////////*/ - /** + /** * @dev This surcharge is not necessary if you do not use the 2771Module */ function _msgSender() - internal virtual + internal view + virtual override(ContextUpgradeable, ERC2771ContextUpgradeable) returns (address sender) { @@ -25,21 +29,26 @@ abstract contract CCTCMTATBaseERC2771 is CCTCMTATBaseERC20CrossChain, ERC2771Mo /** * @dev This surcharge is not necessary if you do not use the 2771Module */ - function _contextSuffixLength() internal virtual view - override(ContextUpgradeable, ERC2771ContextUpgradeable) - returns (uint256) { - return ERC2771ContextUpgradeable._contextSuffixLength(); + function _contextSuffixLength() + internal + view + virtual + override(ContextUpgradeable, ERC2771ContextUpgradeable) + returns (uint256) + { + return ERC2771ContextUpgradeable._contextSuffixLength(); } /** * @dev This surcharge is not necessary if you do not use the 2771Module */ function _msgData() - internal virtual + internal view + virtual override(ContextUpgradeable, ERC2771ContextUpgradeable) returns (bytes calldata) { return ERC2771ContextUpgradeable._msgData(); } -} \ No newline at end of file +} diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index c9e51ba..0dbb666 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -2,7 +2,10 @@ pragma solidity ^0.8.20; -import {CMTATBaseCommon, CMTATBaseAccessControl} from "../../../submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol"; +import { + CMTATBaseCommon, + CMTATBaseAccessControl +} from "../../../submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol"; import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; @@ -10,17 +13,21 @@ import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngi import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; -import {PauseModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol"; +import {PauseModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol"; import {EnforcementModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol"; -import {IERC7943FungibleTransferError} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol"; +import {IERC7943FungibleTransferError} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol"; // Extensions -import {ERC20EnforcementModule, ERC20EnforcementModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; - - - -abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, ValidationModulePolicyEngine, IERC7943FungibleTransferError { - - /*////////////////////////////////////////////////////////////// +import { + ERC20EnforcementModule, + ERC20EnforcementModuleInternal +} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; + +abstract contract CCTCMTATBasePolicyEngine is + CMTATBaseAccessControl, + ValidationModulePolicyEngine, + IERC7943FungibleTransferError +{ + /*////////////////////////////////////////////////////////////// INITIALIZER FUNCTION //////////////////////////////////////////////////////////////*/ /** @@ -54,8 +61,8 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation } /** - * @dev don't call the initializer modifer - */ + * @dev don't call the initializer modifer + */ function _initialize( address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, @@ -63,7 +70,7 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation address policyEngine_, ISnapshotEngine snapshotEngine_, IERC1643 documentEngine_ - ) internal virtual onlyInitializing{ + ) internal virtual onlyInitializing { __CMTAT_init( admin, ERC20Attributes_, @@ -74,7 +81,7 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation ); } - /** + /** * @dev calls the different initialize functions from the different modules */ function __CMTAT_init( @@ -94,7 +101,7 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation // Openzeppelin __CMTAT_openzeppelin_init_unchained(ERC20Attributes_); - + /* Wrapper modules */ __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_); @@ -102,55 +109,61 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation __SnapshotEngineModule_init_unchained(snapshotEngine_); __DocumentEngineModule_init_unchained(documentEngine_); - /* Chainlink-ACE policy module */ + /* Chainlink-ACE policy module */ __PolicyProtected_init_unchained(policyEngine_); } /* - * @dev OpenZeppelin - */ - function __CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes memory ERC20Attributes_) internal virtual onlyInitializing { + * @dev OpenZeppelin + */ + function __CMTAT_openzeppelin_init_unchained( + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_ + ) internal virtual onlyInitializing { // Note that the Openzeppelin functions name() and symbol() are overriden in ERC20BaseModule __ERC20_init_unchained(ERC20Attributes_.name, ERC20Attributes_.symbol); } /* - * @dev CMTAT wrapper modules - */ - function __CMTAT_modules_init_unchained(address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_) internal virtual onlyInitializing { - __CMTAT_commonModules_init_unchained(admin,ERC20Attributes_, extraInformationAttributes_); + * @dev CMTAT wrapper modules + */ + function __CMTAT_modules_init_unchained( + address admin, + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_ + ) internal virtual onlyInitializing { + __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_); } /*////////////////////////////////////////////////////////////// PUBLIC/EXTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ /** - * @inheritdoc ValidationModulePolicyEngine - */ + * @inheritdoc ValidationModulePolicyEngine + */ function canTransfer( address from, address to, uint256 value - ) public virtual override (ValidationModulePolicyEngine) view returns (bool) { + ) public view virtual override(ValidationModulePolicyEngine) returns (bool) { (bool isValid, ) = ERC20EnforcementModuleInternal._checkActiveBalance(from, value); - if(!isValid){ + if (!isValid) { return false; - } else { + } else { return ValidationModulePolicyEngine.canTransfer(from, to, value); } } /** - * @inheritdoc ValidationModulePolicyEngine - */ - function canTransferFrom( + * @inheritdoc ValidationModulePolicyEngine + */ + function canTransferFrom( address spender, address from, address to, uint256 value - ) public virtual override (ValidationModulePolicyEngine) view returns (bool) { + ) public view virtual override(ValidationModulePolicyEngine) returns (bool) { (bool isValid, ) = ERC20EnforcementModuleInternal._checkActiveBalance(from, value); - if(!isValid){ + if (!isValid) { return false; } else { return ValidationModulePolicyEngine.canTransferFrom(spender, from, to, value); @@ -165,18 +178,30 @@ abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, Validation INTERNAL/PRIVATE FUNCTIONS //////////////////////////////////////////////////////////////*/ /* ==== Access Control ==== */ - function _authorizePause() internal virtual override(PauseModule) onlyRole(PAUSER_ROLE){} - function _authorizeDeactivate() internal virtual override(PauseModule) onlyRole(DEFAULT_ADMIN_ROLE){} + function _authorizePause() internal virtual override(PauseModule) onlyRole(PAUSER_ROLE) {} + function _authorizeDeactivate() internal virtual override(PauseModule) onlyRole(DEFAULT_ADMIN_ROLE) {} - function _authorizeFreeze() internal virtual override(EnforcementModule) onlyRole(ENFORCER_ROLE){} + function _authorizeFreeze() internal virtual override(EnforcementModule) onlyRole(ENFORCER_ROLE) {} /* ==== Transfer/mint/burn restriction ==== */ - function _checkTransferred(address spender, address from, address to, uint256 value) internal virtual override(CMTATBaseCommon) { + function _checkTransferred( + address spender, + address from, + address to, + uint256 value + ) internal virtual override(CMTATBaseCommon) { CMTATBaseCommon._checkTransferred(spender, from, to, value); - require(ValidationModulePolicyEngine._transferred(spender, from, to, value), ERC7943CannotTransfer(from, to, value)); + require( + ValidationModulePolicyEngine._transferred(spender, from, to, value), + ERC7943CannotTransfer(from, to, value) + ); } - function supportsInterface(bytes4 interfaceId) public view virtual override(CMTATBaseAccessControl, PolicyProtectedUpgradeable) returns (bool) { - return CMTATBaseAccessControl.supportsInterface(interfaceId) || PolicyProtectedUpgradeable.supportsInterface(interfaceId); + function supportsInterface( + bytes4 interfaceId + ) public view virtual override(CMTATBaseAccessControl, PolicyProtectedUpgradeable) returns (bool) { + return + CMTATBaseAccessControl.supportsInterface(interfaceId) || + PolicyProtectedUpgradeable.supportsInterface(interfaceId); } -} \ No newline at end of file +} diff --git a/contracts/modules/lite/PolicyValidationModuleERC1404.sol b/contracts/modules/lite/PolicyValidationModuleERC1404.sol index 4c37ce6..6ea41e2 100644 --- a/contracts/modules/lite/PolicyValidationModuleERC1404.sol +++ b/contracts/modules/lite/PolicyValidationModuleERC1404.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.20; - /* ==== Tokenization === */ import {IERC1404, IERC1404Extend} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol"; import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; @@ -12,36 +11,29 @@ import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/ * * Useful to restrict and validate transfers */ -abstract contract PolicyValidationModuleERC1404 is - ValidationModuleCore, IERC1404Extend -{ +abstract contract PolicyValidationModuleERC1404 is ValidationModuleCore, IERC1404Extend { /* ============ State Variables ============ */ string constant TEXT_TRANSFER_OK = "NoRestriction"; string constant TEXT_UNKNOWN_CODE = "UnknownCode"; /* EnforcementModule */ - string internal constant TEXT_TRANSFER_REJECTED_FROM_FROZEN = - "AddrFromIsFrozen"; + string internal constant TEXT_TRANSFER_REJECTED_FROM_FROZEN = "AddrFromIsFrozen"; - string internal constant TEXT_TRANSFER_REJECTED_TO_FROZEN = - "AddrToIsFrozen"; + string internal constant TEXT_TRANSFER_REJECTED_TO_FROZEN = "AddrToIsFrozen"; - string internal constant TEXT_TRANSFER_REJECTED_SPENDER_FROZEN = - "AddrSpenderIsFrozen"; + string internal constant TEXT_TRANSFER_REJECTED_SPENDER_FROZEN = "AddrSpenderIsFrozen"; /* PauseModule */ - string internal constant TEXT_TRANSFER_REJECTED_PAUSED = - "EnforcedPause"; + string internal constant TEXT_TRANSFER_REJECTED_PAUSED = "EnforcedPause"; /* Contract deactivated */ - string internal constant TEXT_TRANSFER_REJECTED_DEACTIVATED = - "ContractDeactivated"; + string internal constant TEXT_TRANSFER_REJECTED_DEACTIVATED = "ContractDeactivated"; /*////////////////////////////////////////////////////////////// PUBLIC/EXTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ /** - * @notice returns the human readable explanation + * @notice returns the human readable explanation * corresponding to the error code returned by detectTransferRestriction * @param restrictionCode The error code returned by detectTransferRestriction * @return message The human readable explanation corresponding to the error code returned by detectTransferRestriction @@ -49,39 +41,24 @@ abstract contract PolicyValidationModuleERC1404 is */ function messageForTransferRestriction( uint8 restrictionCode - ) public virtual view override(IERC1404) returns (string memory message) { + ) public view virtual override(IERC1404) returns (string memory message) { if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) { return TEXT_TRANSFER_OK; - } else if ( - restrictionCode == - uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_PAUSED) - ) { + } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_PAUSED)) { return TEXT_TRANSFER_REJECTED_PAUSED; - } else if ( - restrictionCode == - uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_DEACTIVATED) - ) { + } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_DEACTIVATED)) { return TEXT_TRANSFER_REJECTED_DEACTIVATED; - } else if ( - restrictionCode == - uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_FROZEN) - ) { + } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_FROZEN)) { return TEXT_TRANSFER_REJECTED_FROM_FROZEN; - } else if ( - restrictionCode == - uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_TO_FROZEN) - ) { + } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_TO_FROZEN)) { return TEXT_TRANSFER_REJECTED_TO_FROZEN; - } else if ( - restrictionCode == - uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_SPENDER_FROZEN) - ) { + } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_SPENDER_FROZEN)) { return TEXT_TRANSFER_REJECTED_SPENDER_FROZEN; } else { return TEXT_UNKNOWN_CODE; } } - + /** * @notice check if value token can be transferred from `from` to `to` * @param from address The address which you want to send tokens from @@ -94,9 +71,9 @@ abstract contract PolicyValidationModuleERC1404 is address from, address to, uint256 value - ) public virtual view override(IERC1404) returns (uint8 code) { - uint8 codeReturn = _detectTransferRestriction(from, to, value); - if (codeReturn != uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) { + ) public view virtual override(IERC1404) returns (uint8 code) { + uint8 codeReturn = _detectTransferRestriction(from, to, value); + if (codeReturn != uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) { return codeReturn; } else { return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); @@ -108,32 +85,32 @@ abstract contract PolicyValidationModuleERC1404 is address from, address to, uint256 value - ) public virtual view override(IERC1404Extend) returns (uint8 code) { + ) public view virtual override(IERC1404Extend) returns (uint8 code) { if (isFrozen(spender)) { return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_SPENDER_FROZEN); } else { uint8 codeReturn = _detectTransferRestriction(from, to, value); - if (codeReturn != uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK) ){ + if (codeReturn != uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) { return codeReturn; - } else { + } else { return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); } - } + } } - /*////////////////////////////////////////////////////////////// + /*////////////////////////////////////////////////////////////// INTERNAL/PRIVATE FUNCTIONS //////////////////////////////////////////////////////////////*/ /** - * @dev override this function to add further restriction - */ + * @dev override this function to add further restriction + */ function _detectTransferRestriction( address from, address to, uint256 /* value */ - ) internal virtual view returns (uint8 code) { - if (deactivated()){ + ) internal view virtual returns (uint8 code) { + if (deactivated()) { return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_DEACTIVATED); } else if (paused()) { return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_PAUSED); @@ -141,8 +118,7 @@ abstract contract PolicyValidationModuleERC1404 is return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_FROZEN); } else if (isFrozen(to)) { return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_TO_FROZEN); - } - else { + } else { return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); } } diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index 2a47ee8..e2f35fa 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -7,31 +7,28 @@ import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtec import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; - abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedUpgradeable { - - /*////////////////////////////////////////////////////////////// PUBLIC/EXTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ /* ============ View functions ============ */ /** - * @inheritdoc ValidationModuleCore - * @dev call the ruleEngine if set - */ + * @inheritdoc ValidationModuleCore + * @dev call the ruleEngine if set + */ function canTransfer( address from, address to, uint256 value ) public view virtual override(ValidationModuleCore) returns (bool) { - return _canTransfer(from, to, value); + return _canTransfer(from, to, value); } /** - * @inheritdoc ValidationModuleCore - * @dev call the ruleEngine if set - */ + * @inheritdoc ValidationModuleCore + * @dev call the ruleEngine if set + */ function canTransferFrom( address spender, address from, @@ -45,12 +42,8 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr INTERNAL/PRIVATE FUNCTIONS //////////////////////////////////////////////////////////////*/ /* ============ View functions ============ */ - function _canTransfer( - address from, - address to, - uint256 value) - internal view virtual returns (bool) { - if (!ValidationModuleCore.canTransfer(from, to, value)) { + function _canTransfer(address from, address to, uint256 value) internal view virtual returns (bool) { + if (!ValidationModuleCore.canTransfer(from, to, value)) { return false; } else { return _canTransferWithPolicyEngine(from, to, value); @@ -76,11 +69,7 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr address to, uint256 value ) internal view virtual returns (bool) { - return _tryCheckPolicies( - IERC20.transferFrom.selector, - spender, - abi.encode(from, to, value) - ); + return _tryCheckPolicies(IERC20.transferFrom.selector, spender, abi.encode(from, to, value)); } function _canTransferWithPolicyEngine( @@ -88,28 +77,20 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr address to, uint256 value ) internal view virtual returns (bool) { - return _tryCheckPolicies( - IERC20.transfer.selector, - from, - abi.encode(to, value) - ); + return _tryCheckPolicies(IERC20.transfer.selector, from, abi.encode(to, value)); } - function _tryCheckPolicies( - bytes4 selector, - address sender, - bytes memory data - ) internal view returns (bool) { + function _tryCheckPolicies(bytes4 selector, address sender, bytes memory data) internal view returns (bool) { IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine()); if (address(policyEngine_) != address(0)) { bytes memory context = getContext(); - try policyEngine_.check( - IPolicyEngine.Payload({selector: selector, sender: sender, data: data, context: context}) - ) + try + policyEngine_.check( + IPolicyEngine.Payload({selector: selector, sender: sender, data: data, context: context}) + ) { return true; - } - catch { + } catch { return false; } } else { @@ -117,20 +98,24 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr } } - /* ============ State functions ============ */ - function _transferred(address spender, address from, address to, uint256 /* value */) internal virtual returns (bool) { + function _transferred( + address spender, + address from, + address to, + uint256 /* value */ + ) internal virtual returns (bool) { _canTransferGenericByModuleAndRevert(spender, from, to); IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine()); - if (address(policyEngine_) != address(0)){ + if (address(policyEngine_) != address(0)) { bytes memory context = getContext(); policyEngine_.run( - IPolicyEngine.Payload({selector: msg.sig, sender: _msgSender(), data: msg.data[4:], context: context})); + IPolicyEngine.Payload({selector: msg.sig, sender: _msgSender(), data: msg.data[4:], context: context}) + ); if (context.length > 0) { clearContext(); } } return true; } - -} \ No newline at end of file +} diff --git a/contracts/modules/standard/CCTBaseERC2771.sol b/contracts/modules/standard/CCTBaseERC2771.sol index 44a7330..4a030eb 100644 --- a/contracts/modules/standard/CCTBaseERC2771.sol +++ b/contracts/modules/standard/CCTBaseERC2771.sol @@ -2,25 +2,27 @@ pragma solidity ^0.8.20; - import {CCTCommon} from "./CCTCommon.sol"; -import {ERC2771Module, ERC2771ContextUpgradeable} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import { + ERC2771Module, + ERC2771ContextUpgradeable +} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol"; abstract contract CCTBaseERC2771 is CCTCommon, ERC2771Module { - /*////////////////////////////////////////////////////////////// ERC2771 MODULE //////////////////////////////////////////////////////////////*/ - /** + /** * @dev This surcharge is not necessary if you do not use the 2771Module */ function _msgSender() - internal virtual + internal view + virtual override(ContextUpgradeable, ERC2771ContextUpgradeable) returns (address sender) { @@ -30,21 +32,26 @@ abstract contract CCTBaseERC2771 is CCTCommon, ERC2771Module { /** * @dev This surcharge is not necessary if you do not use the 2771Module */ - function _contextSuffixLength() internal virtual view - override(ContextUpgradeable, ERC2771ContextUpgradeable) - returns (uint256) { - return ERC2771ContextUpgradeable._contextSuffixLength(); + function _contextSuffixLength() + internal + view + virtual + override(ContextUpgradeable, ERC2771ContextUpgradeable) + returns (uint256) + { + return ERC2771ContextUpgradeable._contextSuffixLength(); } /** * @dev This surcharge is not necessary if you do not use the 2771Module */ function _msgData() - internal virtual + internal view + virtual override(ContextUpgradeable, ERC2771ContextUpgradeable) returns (bytes calldata) { return ERC2771ContextUpgradeable._msgData(); } -} \ No newline at end of file +} diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index 47bb654..c4f345f 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.20; /* ==== OpenZeppelin === */ -import { IERC165 } from "@openzeppelin/contracts/interfaces/IERC165.sol"; +import {IERC165} from "@openzeppelin/contracts/interfaces/IERC165.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; @@ -11,16 +11,28 @@ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Own import {CMTATBaseCommon} from "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol"; /* = Base = */ /* = Core = */ -import {ERC20BurnModule, ERC20BurnModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol"; -import {ERC20MintModule, ERC20MintModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol"; +import { + ERC20BurnModule, + ERC20BurnModuleInternal +} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol"; +import { + ERC20MintModule, + ERC20MintModuleInternal +} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol"; import {VersionModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol"; import {ERC20BaseModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol"; /* = Option & Extension = */ import {ERC20CrossChainModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol"; import {CCIPModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol"; import {ExtraInformationModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol"; -import {ERC20EnforcementModule, ERC20EnforcementModuleInternal} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; -import {DocumentEngineModule, IERC1643} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol"; +import { + ERC20EnforcementModule, + ERC20EnforcementModuleInternal +} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; +import { + DocumentEngineModule, + IERC1643 +} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol"; import {SnapshotEngineModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol"; /* = Interface = */ import {IERC5679} from "../../../submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol"; @@ -30,8 +42,7 @@ import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/en /* ==== Chainlink ACE === */ import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; - -abstract contract CCTCommon is +abstract contract CCTCommon is OwnableUpgradeable, ERC20CrossChainModule, PolicyProtectedUpgradeable, @@ -74,7 +85,6 @@ abstract contract CCTCommon is ); } - /** * @dev calls the different initialize functions from the different modules */ @@ -96,11 +106,11 @@ abstract contract CCTCommon is // Openzeppelin __CMTAT_openzeppelin_init_unchained(ERC20Attributes_); - - __PolicyProtected_init_unchained(policyEngine); + + __PolicyProtected_init_unchained(policyEngine); /* Wrapper modules */ - __CMTAT_modules_init_unchained(ERC20Attributes_, ExtraInformationAttributes_ ); + __CMTAT_modules_init_unchained(ERC20Attributes_, ExtraInformationAttributes_); /* Engine modules */ __SnapshotEngineModule_init_unchained(snapshotEngine_); @@ -108,50 +118,61 @@ abstract contract CCTCommon is } /* - * @dev OpenZeppelin - */ - function __CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes memory ERC20Attributes_) internal virtual onlyInitializing { + * @dev OpenZeppelin + */ + function __CMTAT_openzeppelin_init_unchained( + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_ + ) internal virtual onlyInitializing { // Note that the Openzeppelin functions name() and symbol() are overriden in ERC20BaseModule __ERC20_init_unchained(ERC20Attributes_.name, ERC20Attributes_.symbol); } - - /* - * @dev CMTAT wrapper modules - */ - function __CMTAT_modules_init_unchained(ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_) internal virtual onlyInitializing { + * @dev CMTAT wrapper modules + */ + function __CMTAT_modules_init_unchained( + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_ + ) internal virtual onlyInitializing { __CMTAT_commonModules_init_unchained(ERC20Attributes_, extraInformationAttributes_); } - function __CMTAT_commonModules_init_unchained(ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationModuleAttributes_) internal virtual onlyInitializing { + function __CMTAT_commonModules_init_unchained( + ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, + ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationModuleAttributes_ + ) internal virtual onlyInitializing { // Core - __ERC20BaseModule_init_unchained(ERC20Attributes_.decimalsIrrevocable, ERC20Attributes_.name, ERC20Attributes_.symbol); + __ERC20BaseModule_init_unchained( + ERC20Attributes_.decimalsIrrevocable, + ERC20Attributes_.name, + ERC20Attributes_.symbol + ); /* Extensions */ - __ExtraInformationModule_init_unchained(ExtraInformationModuleAttributes_.tokenId, ExtraInformationModuleAttributes_.terms, ExtraInformationModuleAttributes_.information); + __ExtraInformationModule_init_unchained( + ExtraInformationModuleAttributes_.tokenId, + ExtraInformationModuleAttributes_.terms, + ExtraInformationModuleAttributes_.information + ); } /*////////////////////////////////////////////////////////////// PUBLIC/EXTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ - /* ============ State Functions ============ */ - function transfer(address to, uint256 value) public virtual override(ERC20Upgradeable, CMTATBaseCommon) runPolicy returns (bool) { - return CMTATBaseCommon.transfer(to, value); + /* ============ State Functions ============ */ + function transfer( + address to, + uint256 value + ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) runPolicy returns (bool) { + return CMTATBaseCommon.transfer(to, value); } /* - * @inheritdoc ERC20BaseModule - */ + * @inheritdoc ERC20BaseModule + */ function transferFrom( address from, address to, uint256 value - ) - public - virtual - override(ERC20Upgradeable, CMTATBaseCommon) - runPolicy - returns (bool) - { + ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) runPolicy returns (bool) { return CMTATBaseCommon.transferFrom(from, to, value); } @@ -161,41 +182,31 @@ abstract contract CCTCommon is } /* ============ View functions ============ */ - + /** - * @inheritdoc CMTATBaseCommon - */ - function decimals() - public - view - virtual - override(ERC20Upgradeable, CMTATBaseCommon) - returns (uint8) - { + * @inheritdoc CMTATBaseCommon + */ + function decimals() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (uint8) { return CMTATBaseCommon.decimals(); } - /** - * @inheritdoc CMTATBaseCommon - */ - function name() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) { + * @inheritdoc CMTATBaseCommon + */ + function name() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) { return CMTATBaseCommon.name(); } /** - * @inheritdoc CMTATBaseCommon - */ + * @inheritdoc CMTATBaseCommon + */ function symbol() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) { return CMTATBaseCommon.symbol(); } - - function supportsInterface(bytes4 _interfaceId) public view virtual override( - IERC165, - ERC20CrossChainModule, - PolicyProtectedUpgradeable - ) returns (bool) { + function supportsInterface( + bytes4 _interfaceId + ) public view virtual override(IERC165, ERC20CrossChainModule, PolicyProtectedUpgradeable) returns (bool) { return ERC20CrossChainModule.supportsInterface(_interfaceId) || PolicyProtectedUpgradeable.supportsInterface(_interfaceId); @@ -203,109 +214,116 @@ abstract contract CCTCommon is /* ==== Mint and Burn Operations ==== */ /** - * @dev Check if the mint is valid - */ - function _mintOverride(address account, uint256 value) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { + * @dev Check if the mint is valid + */ + function _mintOverride( + address account, + uint256 value + ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { CMTATBaseCommon._mintOverride(account, value); } /** - * @dev Check if the burn is valid - */ - function _burnOverride(address account, uint256 value) internal virtual override(CMTATBaseCommon, ERC20BurnModuleInternal) { + * @dev Check if the burn is valid + */ + function _burnOverride( + address account, + uint256 value + ) internal virtual override(CMTATBaseCommon, ERC20BurnModuleInternal) { CMTATBaseCommon._burnOverride(account, value); } /** - * @dev Check if a minter transfer is valid - */ - function _minterTransferOverride(address from, address to, uint256 value) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { + * @dev Check if a minter transfer is valid + */ + function _minterTransferOverride( + address from, + address to, + uint256 value + ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) { CMTATBaseCommon._minterTransferOverride(from, to, value); } - /* ==== Access Control Functions ==== */ - /** - * @custom:access-control - * - the caller must have the `DEFAULT_ADMIN_ROLE`. - */ - function _authorizeERC20AttributeManagement() internal virtual override(ERC20BaseModule) runPolicy{} - - /** - * @custom:access-control - * - the caller must have the `MINTER_ROLE`. - */ - function _authorizeMint() internal virtual override(ERC20MintModule) runPolicy{} - - /** - * @custom:access-control - * - The caller must have the `BURNER_ROLE`. - */ - function _authorizeBurn() internal virtual override(ERC20BurnModule) runPolicy{} - - /** - * @custom:access-control - * - the caller must have the `DOCUMENT_ROLE`. - */ - function _authorizeDocumentManagement() internal virtual override(DocumentEngineModule) runPolicy{} - - /** - * @custom:access-control - * - the caller must have the `EXTRA_INFORMATION_ROLE`. - */ - function _authorizeExtraInfoManagement() internal virtual override(ExtraInformationModule) runPolicy{} - - /** - * @custom:access-control - * - the caller must have the `ERC20ENFORCER_ROLE`. - */ - function _authorizeERC20Enforcer() internal virtual override(ERC20EnforcementModule) runPolicy{} - - /** - * @custom:access-control - * - the caller must have the `DEFAULT_ADMIN_ROLE`. - */ - function _authorizeForcedTransfer() internal virtual override(ERC20EnforcementModule) runPolicy{} - - /** - * @custom:access-control - * - the caller must have the `SNAPSHOOTER_ROLE`. - */ - function _authorizeSnapshots() internal virtual override(SnapshotEngineModule) runPolicy{} - - - /** - * @custom:access-control - * - the caller must have the `DEFAULT_ADMIN_ROLE`. - */ - function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) runPolicy{} - - /** - * @dev - * A cross-chain bridge could call the OpenZeppelin function `renounceRole` to lose their privileges (CROSS_CHAIN_ROLE) - * While it is not intended,this has no other effect than depriving the bridge of burn/mint tokens - * An attacker could use this to disrupt minting/burning if they can get the bridge to execute calls. - * However, in this case, the bridge should still be considered compromised and not used again. - * @custom:access-control - * - the caller must have the `CROSS_CHAIN_ROLE`. - */ - function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) runPolicy{} - - - /** - * @custom:access-control - * - the caller must have the `BURNER_FROM_ROLE`. - * - We don't allow token holder to burn their own tokens if they don't have this role. - */ - function _authorizeBurnFrom() internal virtual override(ERC20CrossChainModule) runPolicy{} - - /** - * @custom:access-control - * - the caller must have the `BURNER_ROLE`. - * - We don't allow token holder to burn their own tokens if they don't have this role. - */ - function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) runPolicy{} + /** + * @custom:access-control + * - the caller must have the `DEFAULT_ADMIN_ROLE`. + */ + function _authorizeERC20AttributeManagement() internal virtual override(ERC20BaseModule) runPolicy {} + + /** + * @custom:access-control + * - the caller must have the `MINTER_ROLE`. + */ + function _authorizeMint() internal virtual override(ERC20MintModule) runPolicy {} + + /** + * @custom:access-control + * - The caller must have the `BURNER_ROLE`. + */ + function _authorizeBurn() internal virtual override(ERC20BurnModule) runPolicy {} + + /** + * @custom:access-control + * - the caller must have the `DOCUMENT_ROLE`. + */ + function _authorizeDocumentManagement() internal virtual override(DocumentEngineModule) runPolicy {} + + /** + * @custom:access-control + * - the caller must have the `EXTRA_INFORMATION_ROLE`. + */ + function _authorizeExtraInfoManagement() internal virtual override(ExtraInformationModule) runPolicy {} + + /** + * @custom:access-control + * - the caller must have the `ERC20ENFORCER_ROLE`. + */ + function _authorizeERC20Enforcer() internal virtual override(ERC20EnforcementModule) runPolicy {} + + /** + * @custom:access-control + * - the caller must have the `DEFAULT_ADMIN_ROLE`. + */ + function _authorizeForcedTransfer() internal virtual override(ERC20EnforcementModule) runPolicy {} + + /** + * @custom:access-control + * - the caller must have the `SNAPSHOOTER_ROLE`. + */ + function _authorizeSnapshots() internal virtual override(SnapshotEngineModule) runPolicy {} + + /** + * @custom:access-control + * - the caller must have the `DEFAULT_ADMIN_ROLE`. + */ + function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) runPolicy {} + + /** + * @dev + * A cross-chain bridge could call the OpenZeppelin function `renounceRole` to lose their privileges (CROSS_CHAIN_ROLE) + * While it is not intended,this has no other effect than depriving the bridge of burn/mint tokens + * An attacker could use this to disrupt minting/burning if they can get the bridge to execute calls. + * However, in this case, the bridge should still be considered compromised and not used again. + * @custom:access-control + * - the caller must have the `CROSS_CHAIN_ROLE`. + */ + function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) runPolicy {} + + /** + * @custom:access-control + * - the caller must have the `BURNER_FROM_ROLE`. + * - We don't allow token holder to burn their own tokens if they don't have this role. + */ + function _authorizeBurnFrom() internal virtual override(ERC20CrossChainModule) runPolicy {} + + /** + * @custom:access-control + * - the caller must have the `BURNER_ROLE`. + * - We don't allow token holder to burn their own tokens if they don't have this role. + */ + function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) runPolicy {} /* ==== ERC-20 OpenZeppelin ==== */ function _update( @@ -313,7 +331,6 @@ abstract contract CCTCommon is address to, uint256 amount ) internal virtual override(ERC20Upgradeable, CMTATBaseCommon) { - return CMTATBaseCommon._update(from, to, amount); + return CMTATBaseCommon._update(from, to, amount); } - -} \ No newline at end of file +} diff --git a/hardhat.config.js b/hardhat.config.js index 3474e20..f793997 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,9 +1,9 @@ -require('@nomicfoundation/hardhat-foundry') -require('@nomicfoundation/hardhat-chai-matchers') -require('@openzeppelin/hardhat-upgrades') +require('@nomicfoundation/hardhat-foundry'); +require('@nomicfoundation/hardhat-chai-matchers'); +require('@openzeppelin/hardhat-upgrades'); -const { silenceWarnings } = require('@openzeppelin/upgrades-core') -silenceWarnings() +const { silenceWarnings } = require('@openzeppelin/upgrades-core'); +silenceWarnings(); /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { @@ -14,25 +14,25 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 50 + runs: 50, }, - evmVersion: 'prague' - } + evmVersion: 'prague', + }, }, { version: '0.8.26', settings: { optimizer: { enabled: true, - runs: 50 + runs: 50, }, - evmVersion: 'cancun' - } - } - ] + evmVersion: 'cancun', + }, + }, + ], }, paths: { - sources: "./contracts", - tests: "./test" + sources: './contracts', + tests: './test', }, }; diff --git a/package-lock.json b/package-lock.json index c391304..eb6f7dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,9 +17,12 @@ "@openzeppelin/contracts-upgradeable": "5.5.0", "@openzeppelin/hardhat-upgrades": "^3.2.0", "@openzeppelin/upgrades-core": "^1.44.1", + "eslint": "^8.57.1", + "eslint-config-prettier": "^10.1.8", "hardhat": "^2.28.0", "hardhat-contract-sizer": "^2.10.0", - "hardhat-gas-reporter": "^1.0.9" + "hardhat-gas-reporter": "^1.0.9", + "prettier-plugin-solidity": "^2.3.1" } }, "node_modules/@adraffy/ens-normalize": { @@ -901,6 +904,22 @@ "semver": "^7.5.3" } }, + "node_modules/@changesets/apply-release-plan/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@changesets/assemble-release-plan": { "version": "6.0.9", "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", @@ -1127,6 +1146,22 @@ "prettier": "^2.7.1" } }, + "node_modules/@changesets/write/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -1137,6 +1172,93 @@ "node": ">=0.1.90" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.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": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@eth-optimism/core-utils": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", @@ -1959,6 +2081,68 @@ "node": ">=14" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/@manypkg/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", @@ -3440,6 +3624,13 @@ "@types/node": "*" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", @@ -3464,6 +3655,29 @@ ] } }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "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", @@ -3505,6 +3719,23 @@ "node": ">=8" } }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "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/amazon-cognito-identity-js": { "version": "6.3.16", "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.16.tgz", @@ -3992,6 +4223,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -4429,6 +4670,13 @@ "node": ">=6" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -4494,6 +4742,19 @@ "node": ">=8" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dotenv": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", @@ -4632,103 +4893,436 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eth-gas-reporter": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", - "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, - "dependencies": { - "@solidity-parser/parser": "^0.14.0", - "axios": "^1.5.1", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^5.7.2", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^10.2.0", - "req-cwd": "^2.0.0", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" }, - "peerDependencies": { - "@codechecks/client": "^0.1.0" + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" }, - "peerDependenciesMeta": { - "@codechecks/client": { - "optional": true - } + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/eth-gas-reporter/node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "license": "MIT", "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "license": "MIT", "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/ansi-regex": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "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://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "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://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eth-gas-reporter": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "dev": true, + "dependencies": { + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "peerDependencies": { + "@codechecks/client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } + } + }, + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/eth-gas-reporter/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/ansi-regex": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", @@ -4968,6 +5562,13 @@ "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", "dev": true }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -4984,6 +5585,20 @@ "node": ">=8.6.0" } }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-xml-parser": { "version": "5.2.5", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", @@ -5011,6 +5626,19 @@ "reusify": "^1.0.4" } }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -5033,26 +5661,111 @@ "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=8" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { - "micromatch": "^4.0.2" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, - "bin": { - "flat": "cli.js" - } + "license": "ISC" }, "node_modules/follow-redirects": { "version": "1.15.11", @@ -5268,6 +5981,35 @@ "node": ">=10" } }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -5306,6 +6048,13 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, "node_modules/hardhat": { "version": "2.28.0", "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.0.tgz", @@ -5828,6 +6577,43 @@ "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "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://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "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", @@ -5959,6 +6745,16 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -6074,6 +6870,27 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/json-stream-stringify": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", @@ -6107,6 +6924,16 @@ "node": ">=10.0.0" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/klaw-sync": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", @@ -6116,6 +6943,20 @@ "graceful-fs": "^4.1.11" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -6142,6 +6983,13 @@ "dev": true, "peer": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.startcase": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", @@ -6526,6 +7374,13 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -6639,6 +7494,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "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/ordinal": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", @@ -6741,6 +7614,19 @@ "quansync": "^0.2.7" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "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", @@ -6934,21 +7820,75 @@ "node": ">= 0.4" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, + "license": "MIT", + "peer": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-plugin-solidity": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-2.3.1.tgz", + "integrity": "sha512-71sZM5oqgq6pnTlf+RH23U6Ej710APfCiMWO2Z/pHNjrXyvn9Nr0vTS1AUVaSf4GRW0V6hj6Djt0MyWudJUJbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/slang": "1.3.4", + "@solidity-parser/parser": "^0.20.2", + "semver": "^7.7.4" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "prettier": ">=3.0.0" + } + }, + "node_modules/prettier-plugin-solidity/node_modules/@bytecodealliance/preview2-shim": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.8.tgz", + "integrity": "sha512-wS5kg8u0KCML1UeHQPJ1IuOI24x/XLentCzsqPER1+gDNC5Cz2hG4G2blLOZap+3CEGhIhnJ9mmZYj6a2W0Lww==", + "dev": true, + "license": "(Apache-2.0 WITH LLVM-exception)" + }, + "node_modules/prettier-plugin-solidity/node_modules/@nomicfoundation/slang": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-1.3.4.tgz", + "integrity": "sha512-ghzrPSYH1sZO65id6+Bq2Ood87HT54QP3RGC8EkmpcrJ6tT9Ky0RtaJfrzV5G4jpDsnNua6+YEDpzOMori04hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bytecodealliance/preview2-shim": "^0.17.2" + } + }, + "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", + "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", + "dev": true, + "license": "MIT" + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -6990,6 +7930,16 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", @@ -7363,10 +8313,11 @@ } }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -7840,6 +8791,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, "node_modules/then-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", @@ -8001,6 +8959,19 @@ "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", "dev": true }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-detect": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", @@ -8082,6 +9053,16 @@ "node": ">= 0.8" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8158,6 +9139,16 @@ "node": ">=8" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", @@ -9042,6 +10033,14 @@ "prettier": "^2.7.1", "resolve-from": "^5.0.0", "semver": "^7.5.3" + }, + "dependencies": { + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true + } } }, "@changesets/assemble-release-plan": { @@ -9265,6 +10264,14 @@ "fs-extra": "^7.0.1", "human-id": "^1.0.2", "prettier": "^2.7.1" + }, + "dependencies": { + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true + } } }, "@colors/colors": { @@ -9274,6 +10281,65 @@ "dev": true, "optional": true }, + "@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.4.3" + } + }, + "@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.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" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true + }, "@eth-optimism/core-utils": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", @@ -9748,23 +10814,67 @@ "@ethersproject/strings": "^5.8.0" } }, - "@ethersproject/wordlists": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", - "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } + "@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "dev": true, + "requires": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true }, - "@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "@manypkg/find-root": { @@ -10967,6 +12077,12 @@ "@types/node": "*" } }, + "@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true + }, "@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", @@ -10979,6 +12095,19 @@ "dev": true, "from": "@zksync/contracts@git+https://github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9" }, + "acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -11011,6 +12140,18 @@ "indent-string": "^4.0.0" } }, + "ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "amazon-cognito-identity-js": { "version": "6.3.16", "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.16.tgz", @@ -11401,6 +12542,12 @@ "get-intrinsic": "^1.3.0" } }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -11738,6 +12885,12 @@ "type-detect": "^4.0.0" } }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -11782,117 +12935,344 @@ "path-type": "^4.0.0" } }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - }, - "dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - } + "requires": {} }, - "elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "dev": true - } + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, - "enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "requires": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" } }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "requires": { - "es-errors": "^1.3.0" + "estraverse": "^5.1.0" } }, - "es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "estraverse": "^5.2.0" } }, - "escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "eth-gas-reporter": { @@ -12147,6 +13527,12 @@ "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", "dev": true }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, "fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -12160,6 +13546,18 @@ "micromatch": "^4.0.8" } }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, "fast-xml-parser": { "version": "5.2.5", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", @@ -12178,6 +13576,15 @@ "reusify": "^1.0.4" } }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -12212,6 +13619,67 @@ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, + "flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true + }, "follow-redirects": { "version": "1.15.11", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", @@ -12361,6 +13829,23 @@ "is-glob": "^4.0.1" } }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -12387,6 +13872,12 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "hardhat": { "version": "2.28.0", "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.0.tgz", @@ -12773,6 +14264,30 @@ "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true }, + "import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -12869,6 +14384,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -12957,6 +14478,24 @@ "argparse": "^2.0.1" } }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "json-stream-stringify": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", @@ -12983,6 +14522,15 @@ "readable-stream": "^3.6.0" } }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "klaw-sync": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", @@ -12992,6 +14540,16 @@ "graceful-fs": "^4.1.11" } }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -13014,6 +14572,12 @@ "dev": true, "peer": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.startcase": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", @@ -13300,6 +14864,12 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -13376,6 +14946,20 @@ "is-wsl": "^2.1.1" } }, + "optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "requires": { + "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" + } + }, "ordinal": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", @@ -13453,6 +15037,15 @@ "quansync": "^0.2.7" } }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-cache-control": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", @@ -13597,12 +15190,53 @@ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true }, - "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prettier": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "dev": true, + "peer": true + }, + "prettier-plugin-solidity": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-2.3.1.tgz", + "integrity": "sha512-71sZM5oqgq6pnTlf+RH23U6Ej710APfCiMWO2Z/pHNjrXyvn9Nr0vTS1AUVaSf4GRW0V6hj6Djt0MyWudJUJbQ==", + "dev": true, + "requires": { + "@nomicfoundation/slang": "1.3.4", + "@solidity-parser/parser": "^0.20.2", + "semver": "^7.7.4" + }, + "dependencies": { + "@bytecodealliance/preview2-shim": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.8.tgz", + "integrity": "sha512-wS5kg8u0KCML1UeHQPJ1IuOI24x/XLentCzsqPER1+gDNC5Cz2hG4G2blLOZap+3CEGhIhnJ9mmZYj6a2W0Lww==", + "dev": true + }, + "@nomicfoundation/slang": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-1.3.4.tgz", + "integrity": "sha512-ghzrPSYH1sZO65id6+Bq2Ood87HT54QP3RGC8EkmpcrJ6tT9Ky0RtaJfrzV5G4jpDsnNua6+YEDpzOMori04hQ==", + "dev": true, + "requires": { + "@bytecodealliance/preview2-shim": "^0.17.2" + } + }, + "@solidity-parser/parser": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", + "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", + "dev": true + } + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -13643,6 +15277,12 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, "qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", @@ -13896,9 +15536,9 @@ } }, "semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true }, "serialize-javascript": { @@ -14247,6 +15887,12 @@ "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "then-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", @@ -14374,6 +16020,15 @@ "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", "dev": true }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, "type-detect": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", @@ -14434,6 +16089,15 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -14495,6 +16159,12 @@ "string-width": "^4.0.0" } }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true + }, "workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", diff --git a/package.json b/package.json index a9f6142..2ea32b8 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,11 @@ "version": "1.0.0", "description": "", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", + "test": "hardhat test", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "format": "prettier --write '**/*.{js,json,md}' 'contracts/**/*.sol'", + "format:check": "prettier --check '**/*.{js,json,md}' 'contracts/**/*.sol'", "slither": "./scripts/slither.sh" }, "repository": { @@ -22,8 +26,11 @@ "@openzeppelin/contracts-upgradeable": "5.5.0", "@openzeppelin/hardhat-upgrades": "^3.2.0", "@openzeppelin/upgrades-core": "^1.44.1", + "eslint": "^8.57.1", + "eslint-config-prettier": "^10.1.8", "hardhat": "^2.28.0", "hardhat-contract-sizer": "^2.10.0", - "hardhat-gas-reporter": "^1.0.9" + "hardhat-gas-reporter": "^1.0.9", + "prettier-plugin-solidity": "^2.3.1" } } diff --git a/scripts/demo.js b/scripts/demo.js index ca0fac1..35895fc 100644 --- a/scripts/demo.js +++ b/scripts/demo.js @@ -18,38 +18,42 @@ * * Script example - do not use it for production */ -const { ethers, upgrades } = require("hardhat"); -const { ZeroAddress, keccak256, toUtf8Bytes, AbiCoder } = require("ethers"); +const { ethers, upgrades } = require('hardhat'); +const { ZeroAddress, keccak256, toUtf8Bytes, AbiCoder } = require('ethers'); /* ============ Role Constants ============ */ -const MINTER_ROLE = keccak256(toUtf8Bytes("MINTER_ROLE")); -const BURNER_ROLE = keccak256(toUtf8Bytes("BURNER_ROLE")); -const BURNER_FROM_ROLE = keccak256(toUtf8Bytes("BURNER_FROM_ROLE")); -const ENFORCER_ROLE = keccak256(toUtf8Bytes("ENFORCER_ROLE")); -const ERC20ENFORCER_ROLE = keccak256(toUtf8Bytes("ERC20ENFORCER_ROLE")); -const SNAPSHOOTER_ROLE = keccak256(toUtf8Bytes("SNAPSHOOTER_ROLE")); -const DOCUMENT_ROLE = keccak256(toUtf8Bytes("DOCUMENT_ROLE")); -const DEFAULT_ADMIN_ROLE = "0x0000000000000000000000000000000000000000000000000000000000000000"; +const MINTER_ROLE = keccak256(toUtf8Bytes('MINTER_ROLE')); +const BURNER_ROLE = keccak256(toUtf8Bytes('BURNER_ROLE')); +const BURNER_FROM_ROLE = keccak256(toUtf8Bytes('BURNER_FROM_ROLE')); +const ENFORCER_ROLE = keccak256(toUtf8Bytes('ENFORCER_ROLE')); +const ERC20ENFORCER_ROLE = keccak256(toUtf8Bytes('ERC20ENFORCER_ROLE')); +const SNAPSHOOTER_ROLE = keccak256(toUtf8Bytes('SNAPSHOOTER_ROLE')); +const DOCUMENT_ROLE = keccak256(toUtf8Bytes('DOCUMENT_ROLE')); +const DEFAULT_ADMIN_ROLE = '0x0000000000000000000000000000000000000000000000000000000000000000'; /* ============ Helpers ============ */ async function deployPolicyEngine(defaultAllow, initialOwner) { - const Factory = await ethers.getContractFactory("PolicyEngine"); - const policyEngine = await upgrades.deployProxy( - Factory, - [defaultAllow, initialOwner], - { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } - ); + const Factory = await ethers.getContractFactory('PolicyEngine'); + const policyEngine = await upgrades.deployProxy(Factory, [defaultAllow, initialOwner], { + initializer: 'initialize', + unsafeAllow: ['constructor'], + silenceWarnings: true, + }); await policyEngine.waitForDeployment(); return policyEngine; } async function deployRBACPolicy(policyEngineAddress, ownerAddress) { - const Factory = await ethers.getContractFactory("RoleBasedAccessControlPolicy"); + const Factory = await ethers.getContractFactory('RoleBasedAccessControlPolicy'); const rbacPolicy = await upgrades.deployProxy( Factory, - [policyEngineAddress, ownerAddress, "0x"], - { initializer: "initialize", unsafeAllow: ["constructor", "missing-initializer", "missing-initializer-call"], silenceWarnings: true } + [policyEngineAddress, ownerAddress, '0x'], + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], + silenceWarnings: true, + }, ); await rbacPolicy.waitForDeployment(); return rbacPolicy; @@ -57,30 +61,38 @@ async function deployRBACPolicy(policyEngineAddress, ownerAddress) { async function deployPausePolicy(policyEngineAddress, ownerAddress, initiallyPaused = false) { const abiCoder = AbiCoder.defaultAbiCoder(); - const configParams = abiCoder.encode(["bool"], [initiallyPaused]); - const Factory = await ethers.getContractFactory("PausePolicy"); + const configParams = abiCoder.encode(['bool'], [initiallyPaused]); + const Factory = await ethers.getContractFactory('PausePolicy'); const pausePolicy = await upgrades.deployProxy( Factory, [policyEngineAddress, ownerAddress, configParams], - { initializer: "initialize", unsafeAllow: ["constructor", "missing-initializer", "missing-initializer-call"], silenceWarnings: true } + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], + silenceWarnings: true, + }, ); await pausePolicy.waitForDeployment(); return pausePolicy; } async function deploySecureMintPolicy(policyEngineAddress, ownerAddress, configParams) { - const Factory = await ethers.getContractFactory("SecureMintPolicy"); + const Factory = await ethers.getContractFactory('SecureMintPolicy'); const secureMintPolicy = await upgrades.deployProxy( Factory, [policyEngineAddress, ownerAddress, configParams], - { initializer: "initialize", unsafeAllow: ["constructor", "missing-initializer", "missing-initializer-call"], silenceWarnings: true } + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], + silenceWarnings: true, + }, ); await secureMintPolicy.waitForDeployment(); return secureMintPolicy; } async function deployMockAggregator(decimals, initialAnswer) { - const Factory = await ethers.getContractFactory("MockV3Aggregator"); + const Factory = await ethers.getContractFactory('MockV3Aggregator'); const mock = await Factory.deploy(decimals, initialAnswer); await mock.waitForDeployment(); return mock; @@ -94,9 +106,9 @@ async function main() { const deployer = signers[0]; if (isHardhatNetwork) { - console.log("Hardhat network detected, using account:", deployer.address); + console.log('Hardhat network detected, using account:', deployer.address); } else { - console.log("Deploying to network:", network.name, "with account:", deployer.address); + console.log('Deploying to network:', network.name, 'with account:', deployer.address); } const admin = deployer.address; @@ -105,51 +117,51 @@ async function main() { /* ============================================================ * 1. Deploy PolicyEngine (defaultAllow = true) * ============================================================ */ - console.log("\n--- Step 1: Deploy PolicyEngine ---"); + console.log('\n--- Step 1: Deploy PolicyEngine ---'); const policyEngine = await deployPolicyEngine(true, admin); const policyEngineAddress = await policyEngine.getAddress(); - console.log("PolicyEngine deployed to:", policyEngineAddress); + console.log('PolicyEngine deployed to:', policyEngineAddress); /* ============================================================ * 2. Deploy Document & Snapshot Engine Mocks * ============================================================ */ - console.log("\n--- Step 2: Deploy Document & Snapshot Engine Mocks ---"); + console.log('\n--- Step 2: Deploy Document & Snapshot Engine Mocks ---'); - const DocumentEngineMockFactory = await ethers.getContractFactory("DocumentEngineMock"); + const DocumentEngineMockFactory = await ethers.getContractFactory('DocumentEngineMock'); const documentEngineMock = await DocumentEngineMockFactory.deploy(); await documentEngineMock.waitForDeployment(); const documentEngineAddress = await documentEngineMock.getAddress(); - console.log("DocumentEngineMock deployed to:", documentEngineAddress); + console.log('DocumentEngineMock deployed to:', documentEngineAddress); // SnapshotEngineMock needs the token address, so deploy with ZeroAddress first, then update after token deploy - const SnapshotEngineMockFactory = await ethers.getContractFactory("SnapshotEngineMock"); + const SnapshotEngineMockFactory = await ethers.getContractFactory('SnapshotEngineMock'); const snapshotEngineMock = await SnapshotEngineMockFactory.deploy(ZeroAddress, admin); await snapshotEngineMock.waitForDeployment(); const snapshotEngineAddress = await snapshotEngineMock.getAddress(); - console.log("SnapshotEngineMock deployed to:", snapshotEngineAddress); + console.log('SnapshotEngineMock deployed to:', snapshotEngineAddress); /* ============================================================ * 3. Deploy ComplianceTokenCMTATStandalone * ============================================================ */ - console.log("\n--- Step 3: Deploy ComplianceTokenCMTATStandalone ---"); + console.log('\n--- Step 3: Deploy ComplianceTokenCMTATStandalone ---'); const forwarderIrrevocable = ZeroAddress; const ERC20Attributes = { - name: "Security Token", - symbol: "ST", + name: 'Security Token', + symbol: 'ST', decimalsIrrevocable: tokenDecimals, }; const terms = { - name: "Token Terms v1", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: keccak256(toUtf8Bytes("terms-v1")), + name: 'Token Terms v1', + uri: 'https://cmta.ch/standards/cmta-token-cmtat', + documentHash: keccak256(toUtf8Bytes('terms-v1')), }; const extraInformationAttributes = { - tokenId: "1234567890", + tokenId: '1234567890', terms: terms, - information: "CMTAT smart contract", + information: 'CMTAT smart contract', }; - const CMTATFactory = await ethers.getContractFactory("ComplianceTokenCMTATStandalone", deployer); + const CMTATFactory = await ethers.getContractFactory('ComplianceTokenCMTATStandalone', deployer); const cmtat = await CMTATFactory.deploy( forwarderIrrevocable, admin, @@ -157,97 +169,101 @@ async function main() { extraInformationAttributes, policyEngineAddress, snapshotEngineAddress, - documentEngineAddress + documentEngineAddress, ); await cmtat.waitForDeployment(); const cmtatAddress = await cmtat.getAddress(); - console.log("ComplianceTokenCMTATStandalone deployed to:", cmtatAddress); + console.log('ComplianceTokenCMTATStandalone deployed to:', cmtatAddress); // Update SnapshotEngineMock with the actual token address await snapshotEngineMock.setERC20(cmtatAddress); - console.log("SnapshotEngineMock updated with token address"); + console.log('SnapshotEngineMock updated with token address'); /* ============================================================ * 4. Deploy PausePolicy * ============================================================ */ - console.log("\n--- Step 4: Deploy PausePolicy ---"); + console.log('\n--- Step 4: Deploy PausePolicy ---'); const pausePolicy = await deployPausePolicy(policyEngineAddress, admin, false); const pausePolicyAddress = await pausePolicy.getAddress(); - console.log("PausePolicy deployed to:", pausePolicyAddress, "(initially unpaused)"); + console.log('PausePolicy deployed to:', pausePolicyAddress, '(initially unpaused)'); /* ============================================================ * 5. Deploy RoleBasedAccessControlPolicy * ============================================================ */ - console.log("\n--- Step 5: Deploy RoleBasedAccessControlPolicy ---"); + console.log('\n--- Step 5: Deploy RoleBasedAccessControlPolicy ---'); const rbacPolicy = await deployRBACPolicy(policyEngineAddress, admin); const rbacPolicyAddress = await rbacPolicy.getAddress(); - console.log("RoleBasedAccessControlPolicy deployed to:", rbacPolicyAddress); + console.log('RoleBasedAccessControlPolicy deployed to:', rbacPolicyAddress); /* ============================================================ * 5. Deploy MockV3Aggregator + SecureMintPolicy * ============================================================ */ - console.log("\n--- Step 5: Deploy SecureMintPolicy ---"); + console.log('\n--- Step 5: Deploy SecureMintPolicy ---'); // Deploy a mock reserve price feed (Hardhat only) // Initial answer = 1,000,000 * 10^8 (reserves of 1M tokens with 8 decimals) const reserveAmount = 1_000_000n * 10n ** BigInt(tokenDecimals); const mockFeed = await deployMockAggregator(tokenDecimals, reserveAmount); const mockFeedAddress = await mockFeed.getAddress(); - console.log("MockV3Aggregator (reserve feed) deployed to:", mockFeedAddress); + console.log('MockV3Aggregator (reserve feed) deployed to:', mockFeedAddress); // Encode SecureMintPolicy configuration parameters: // (address reservesFeed, ReserveMarginConfigs(mode, amount), uint256 maxStalenessSeconds, TokenMetadata(tokenAddress, tokenDecimals)) const abiCoder = AbiCoder.defaultAbiCoder(); const secureMintConfigParams = abiCoder.encode( - ["address", "tuple(uint8,uint256)", "uint256", "tuple(address,uint8)"], + ['address', 'tuple(uint8,uint256)', 'uint256', 'tuple(address,uint8)'], [ mockFeedAddress, - [0, 0], // ReserveMarginMode.None, amount=0 - 0, // maxStalenessSeconds=0 (no staleness check for demo) + [0, 0], // ReserveMarginMode.None, amount=0 + 0, // maxStalenessSeconds=0 (no staleness check for demo) [cmtatAddress, tokenDecimals], - ] + ], ); - const secureMintPolicy = await deploySecureMintPolicy(policyEngineAddress, admin, secureMintConfigParams); + const secureMintPolicy = await deploySecureMintPolicy( + policyEngineAddress, + admin, + secureMintConfigParams, + ); const secureMintPolicyAddress = await secureMintPolicy.getAddress(); - console.log("SecureMintPolicy deployed to:", secureMintPolicyAddress); + console.log('SecureMintPolicy deployed to:', secureMintPolicyAddress); /* ============================================================ * 7. Deploy MintBurnExtractor * ============================================================ */ - console.log("\n--- Step 7: Deploy MintBurnExtractor ---"); - const ExtractorFactory = await ethers.getContractFactory("MintBurnExtractor"); + console.log('\n--- Step 7: Deploy MintBurnExtractor ---'); + const ExtractorFactory = await ethers.getContractFactory('MintBurnExtractor'); const mintBurnExtractor = await ExtractorFactory.deploy(); await mintBurnExtractor.waitForDeployment(); const extractorAddress = await mintBurnExtractor.getAddress(); - console.log("MintBurnExtractor deployed to:", extractorAddress); + console.log('MintBurnExtractor deployed to:', extractorAddress); /* ============================================================ * 8. Collect function selectors * ============================================================ */ - console.log("\n--- Step 8: Configure PolicyEngine ---"); + console.log('\n--- Step 8: Configure PolicyEngine ---'); const selectors = { // Mint / Burn - mint: cmtat.interface.getFunction("mint(address,uint256)").selector, - burn: cmtat.interface.getFunction("burn(address,uint256)").selector, - burnFrom: cmtat.interface.getFunction("burnFrom(address,uint256)").selector, + mint: cmtat.interface.getFunction('mint(address,uint256)').selector, + burn: cmtat.interface.getFunction('burn(address,uint256)').selector, + burnFrom: cmtat.interface.getFunction('burnFrom(address,uint256)').selector, // Transfers - transfer: cmtat.interface.getFunction("transfer(address,uint256)").selector, - transferFrom: cmtat.interface.getFunction("transferFrom(address,address,uint256)").selector, + transfer: cmtat.interface.getFunction('transfer(address,uint256)').selector, + transferFrom: cmtat.interface.getFunction('transferFrom(address,address,uint256)').selector, // Enforcement - forcedTransfer: cmtat.interface.getFunction("forcedTransfer(address,address,uint256)").selector, - freezePartial: cmtat.interface.getFunction("freezePartialTokens(address,uint256)").selector, - unfreezePartial: cmtat.interface.getFunction("unfreezePartialTokens(address,uint256)").selector, + forcedTransfer: cmtat.interface.getFunction('forcedTransfer(address,address,uint256)').selector, + freezePartial: cmtat.interface.getFunction('freezePartialTokens(address,uint256)').selector, + unfreezePartial: cmtat.interface.getFunction('unfreezePartialTokens(address,uint256)').selector, // Admin - setName: cmtat.interface.getFunction("setName").selector, - setSymbol: cmtat.interface.getFunction("setSymbol").selector, + setName: cmtat.interface.getFunction('setName').selector, + setSymbol: cmtat.interface.getFunction('setSymbol').selector, // Engines - setSnapshotEngine: cmtat.interface.getFunction("setSnapshotEngine").selector, - setDocumentEngine: cmtat.interface.getFunction("setDocumentEngine").selector, + setSnapshotEngine: cmtat.interface.getFunction('setSnapshotEngine').selector, + setDocumentEngine: cmtat.interface.getFunction('setDocumentEngine').selector, }; - console.log("Function selectors:"); + console.log('Function selectors:'); for (const [name, sel] of Object.entries(selectors)) { console.log(` ${name}: ${sel}`); } @@ -255,14 +271,14 @@ async function main() { /* ============================================================ * 9. Register extractor for mint selector * ============================================================ */ - console.log("\n--- Step 9: Set extractor for mint selector ---"); + console.log('\n--- Step 9: Set extractor for mint selector ---'); await policyEngine.connect(deployer).setExtractor(selectors.mint, extractorAddress); - console.log("Extractor set for mint selector"); + console.log('Extractor set for mint selector'); /* ============================================================ * 10. Add PausePolicy to all external functions * ============================================================ */ - console.log("\n--- Step 10: Add PausePolicy to all functions ---"); + console.log('\n--- Step 10: Add PausePolicy to all functions ---'); const allSelectors = Object.entries(selectors); for (const [name, sel] of allSelectors) { await policyEngine.connect(deployer).addPolicy(cmtatAddress, sel, pausePolicyAddress, []); @@ -272,7 +288,7 @@ async function main() { /* ============================================================ * 11. Add RBAC policy to all external functions * ============================================================ */ - console.log("\n--- Step 11: Add RBAC policy to all functions ---"); + console.log('\n--- Step 11: Add RBAC policy to all functions ---'); for (const [name, sel] of allSelectors) { await policyEngine.connect(deployer).addPolicy(cmtatAddress, sel, rbacPolicyAddress, []); console.log(` RBAC policy added for: ${name} (${sel})`); @@ -281,126 +297,168 @@ async function main() { /* ============================================================ * 12. Add SecureMint policy to mint function * ============================================================ */ - console.log("\n--- Step 12: Add SecureMint policy to mint ---"); + console.log('\n--- Step 12: Add SecureMint policy to mint ---'); // SecureMintPolicy expects 1 parameter: "amount" // The extractor produces parameters named keccak256("amount") and keccak256("account") - const PARAM_AMOUNT = keccak256(toUtf8Bytes("amount")); - await policyEngine.connect(deployer).addPolicy( - cmtatAddress, - selectors.mint, - secureMintPolicyAddress, - [PARAM_AMOUNT] - ); - console.log("SecureMint policy added for mint selector"); + const PARAM_AMOUNT = keccak256(toUtf8Bytes('amount')); + await policyEngine + .connect(deployer) + .addPolicy(cmtatAddress, selectors.mint, secureMintPolicyAddress, [PARAM_AMOUNT]); + console.log('SecureMint policy added for mint selector'); /* ============================================================ * 12b. Deploy ERC20TransferExtractor + ERC20TransferFromExtractor * ============================================================ */ - console.log("\n--- Step 12b: Deploy Transfer Extractors ---"); + console.log('\n--- Step 12b: Deploy Transfer Extractors ---'); - const ERC20ExtractorFactory = await ethers.getContractFactory("ERC20TransferExtractor"); + const ERC20ExtractorFactory = await ethers.getContractFactory('ERC20TransferExtractor'); const erc20TransferExtractor = await ERC20ExtractorFactory.deploy(); await erc20TransferExtractor.waitForDeployment(); const erc20TransferExtractorAddress = await erc20TransferExtractor.getAddress(); - console.log("ERC20TransferExtractor deployed to:", erc20TransferExtractorAddress); + console.log('ERC20TransferExtractor deployed to:', erc20TransferExtractorAddress); - const ERC20FromExtractorFactory = await ethers.getContractFactory("ERC20TransferFromExtractor"); + const ERC20FromExtractorFactory = await ethers.getContractFactory('ERC20TransferFromExtractor'); const erc20TransferFromExtractor = await ERC20FromExtractorFactory.deploy(); await erc20TransferFromExtractor.waitForDeployment(); const erc20TransferFromExtractorAddress = await erc20TransferFromExtractor.getAddress(); - console.log("ERC20TransferFromExtractor deployed to:", erc20TransferFromExtractorAddress); + console.log('ERC20TransferFromExtractor deployed to:', erc20TransferFromExtractorAddress); /* ============================================================ * 12c. Deploy mock rules + TransferValidationPolicy * ============================================================ */ - console.log("\n--- Step 12c: Deploy TransferValidationPolicy with mock rules ---"); + console.log('\n--- Step 12c: Deploy TransferValidationPolicy with mock rules ---'); // Deploy MaxAmountRule (max 1000 tokens) - const MaxAmountRuleFactory = await ethers.getContractFactory("MaxAmountRule"); + const MaxAmountRuleFactory = await ethers.getContractFactory('MaxAmountRule'); const maxTransferAmount = 1000n * 10n ** BigInt(tokenDecimals); const maxAmountRule = await MaxAmountRuleFactory.deploy(maxTransferAmount); await maxAmountRule.waitForDeployment(); const maxAmountRuleAddress = await maxAmountRule.getAddress(); - console.log("MaxAmountRule deployed to:", maxAmountRuleAddress, `(max: ${maxTransferAmount})`); + console.log('MaxAmountRule deployed to:', maxAmountRuleAddress, `(max: ${maxTransferAmount})`); // Deploy RestrictedAddressRule (no initially restricted addresses) - const RestrictedAddressRuleFactory = await ethers.getContractFactory("RestrictedAddressRule"); + const RestrictedAddressRuleFactory = await ethers.getContractFactory('RestrictedAddressRule'); const restrictedAddressRule = await RestrictedAddressRuleFactory.deploy([]); await restrictedAddressRule.waitForDeployment(); const restrictedAddressRuleAddress = await restrictedAddressRule.getAddress(); - console.log("RestrictedAddressRule deployed to:", restrictedAddressRuleAddress); + console.log('RestrictedAddressRule deployed to:', restrictedAddressRuleAddress); // Deploy TransferValidationPolicy with both rules const transferPolicyConfigParams = abiCoder.encode( - ["address[]"], - [[maxAmountRuleAddress, restrictedAddressRuleAddress]] + ['address[]'], + [[maxAmountRuleAddress, restrictedAddressRuleAddress]], ); - const TransferPolicyFactory = await ethers.getContractFactory("TransferValidationPolicy"); + const TransferPolicyFactory = await ethers.getContractFactory('TransferValidationPolicy'); const transferPolicy = await upgrades.deployProxy( TransferPolicyFactory, [policyEngineAddress, admin, transferPolicyConfigParams], - { initializer: "initialize", unsafeAllow: ["constructor", "missing-initializer", "missing-initializer-call"], silenceWarnings: true } + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], + silenceWarnings: true, + }, ); await transferPolicy.waitForDeployment(); const transferPolicyAddress = await transferPolicy.getAddress(); - console.log("TransferValidationPolicy deployed to:", transferPolicyAddress); + console.log('TransferValidationPolicy deployed to:', transferPolicyAddress); /* ============================================================ * 12d. Set extractors and add TransferValidationPolicy * ============================================================ */ - console.log("\n--- Step 12d: Register extractors & TransferValidationPolicy ---"); + console.log('\n--- Step 12d: Register extractors & TransferValidationPolicy ---'); // Set ERC20TransferExtractor for transfer() - await policyEngine.connect(deployer).setExtractor(selectors.transfer, erc20TransferExtractorAddress); - console.log("ERC20TransferExtractor set for transfer selector"); + await policyEngine + .connect(deployer) + .setExtractor(selectors.transfer, erc20TransferExtractorAddress); + console.log('ERC20TransferExtractor set for transfer selector'); // Set ERC20TransferFromExtractor for transferFrom() - await policyEngine.connect(deployer).setExtractor(selectors.transferFrom, erc20TransferFromExtractorAddress); - console.log("ERC20TransferFromExtractor set for transferFrom selector"); + await policyEngine + .connect(deployer) + .setExtractor(selectors.transferFrom, erc20TransferFromExtractorAddress); + console.log('ERC20TransferFromExtractor set for transferFrom selector'); // Parameter name constants - const PARAM_SPENDER = keccak256(toUtf8Bytes("spender")); - const PARAM_FROM = keccak256(toUtf8Bytes("from")); - const PARAM_TO = keccak256(toUtf8Bytes("to")); - const PARAM_AMOUNT_TRANSFER = keccak256(toUtf8Bytes("amount")); + const PARAM_SPENDER = keccak256(toUtf8Bytes('spender')); + const PARAM_FROM = keccak256(toUtf8Bytes('from')); + const PARAM_TO = keccak256(toUtf8Bytes('to')); + const PARAM_AMOUNT_TRANSFER = keccak256(toUtf8Bytes('amount')); // Add TransferValidationPolicy to transfer() — expects [from, to, amount] - await policyEngine.connect(deployer).addPolicy( - cmtatAddress, - selectors.transfer, - transferPolicyAddress, - [PARAM_FROM, PARAM_TO, PARAM_AMOUNT_TRANSFER] - ); - console.log("TransferValidationPolicy added for transfer (3 params: from, to, amount)"); + await policyEngine + .connect(deployer) + .addPolicy(cmtatAddress, selectors.transfer, transferPolicyAddress, [ + PARAM_FROM, + PARAM_TO, + PARAM_AMOUNT_TRANSFER, + ]); + console.log('TransferValidationPolicy added for transfer (3 params: from, to, amount)'); // Add TransferValidationPolicy to transferFrom() — expects [spender, from, to, amount] - await policyEngine.connect(deployer).addPolicy( - cmtatAddress, - selectors.transferFrom, - transferPolicyAddress, - [PARAM_SPENDER, PARAM_FROM, PARAM_TO, PARAM_AMOUNT_TRANSFER] + await policyEngine + .connect(deployer) + .addPolicy(cmtatAddress, selectors.transferFrom, transferPolicyAddress, [ + PARAM_SPENDER, + PARAM_FROM, + PARAM_TO, + PARAM_AMOUNT_TRANSFER, + ]); + console.log( + 'TransferValidationPolicy added for transferFrom (4 params: spender, from, to, amount)', ); - console.log("TransferValidationPolicy added for transferFrom (4 params: spender, from, to, amount)"); /* ============================================================ * 13. Grant operation allowances on RBAC policy * ============================================================ */ - console.log("\n--- Step 13: Grant RBAC operation allowances ---"); + console.log('\n--- Step 13: Grant RBAC operation allowances ---'); // Map selectors to their logical roles const roleMapping = [ - { selector: selectors.mint, role: MINTER_ROLE, name: "mint → MINTER_ROLE" }, - { selector: selectors.burn, role: BURNER_ROLE, name: "burn → BURNER_ROLE" }, - { selector: selectors.burnFrom, role: BURNER_FROM_ROLE, name: "burnFrom → BURNER_FROM_ROLE" }, - { selector: selectors.transfer, role: DEFAULT_ADMIN_ROLE, name: "transfer → DEFAULT_ADMIN_ROLE" }, - { selector: selectors.transferFrom, role: DEFAULT_ADMIN_ROLE, name: "transferFrom → DEFAULT_ADMIN_ROLE" }, - { selector: selectors.forcedTransfer, role: ENFORCER_ROLE, name: "forcedTransfer → ENFORCER_ROLE" }, - { selector: selectors.freezePartial, role: ERC20ENFORCER_ROLE, name: "freezePartialTokens → ERC20ENFORCER_ROLE" }, - { selector: selectors.unfreezePartial, role: ERC20ENFORCER_ROLE, name: "unfreezePartialTokens → ERC20ENFORCER_ROLE" }, - { selector: selectors.setName, role: DEFAULT_ADMIN_ROLE, name: "setName → DEFAULT_ADMIN_ROLE" }, - { selector: selectors.setSymbol, role: DEFAULT_ADMIN_ROLE, name: "setSymbol → DEFAULT_ADMIN_ROLE" }, - { selector: selectors.setSnapshotEngine, role: SNAPSHOOTER_ROLE, name: "setSnapshotEngine → SNAPSHOOTER_ROLE" }, - { selector: selectors.setDocumentEngine, role: DOCUMENT_ROLE, name: "setDocumentEngine → DOCUMENT_ROLE" }, + { selector: selectors.mint, role: MINTER_ROLE, name: 'mint → MINTER_ROLE' }, + { selector: selectors.burn, role: BURNER_ROLE, name: 'burn → BURNER_ROLE' }, + { selector: selectors.burnFrom, role: BURNER_FROM_ROLE, name: 'burnFrom → BURNER_FROM_ROLE' }, + { + selector: selectors.transfer, + role: DEFAULT_ADMIN_ROLE, + name: 'transfer → DEFAULT_ADMIN_ROLE', + }, + { + selector: selectors.transferFrom, + role: DEFAULT_ADMIN_ROLE, + name: 'transferFrom → DEFAULT_ADMIN_ROLE', + }, + { + selector: selectors.forcedTransfer, + role: ENFORCER_ROLE, + name: 'forcedTransfer → ENFORCER_ROLE', + }, + { + selector: selectors.freezePartial, + role: ERC20ENFORCER_ROLE, + name: 'freezePartialTokens → ERC20ENFORCER_ROLE', + }, + { + selector: selectors.unfreezePartial, + role: ERC20ENFORCER_ROLE, + name: 'unfreezePartialTokens → ERC20ENFORCER_ROLE', + }, + { selector: selectors.setName, role: DEFAULT_ADMIN_ROLE, name: 'setName → DEFAULT_ADMIN_ROLE' }, + { + selector: selectors.setSymbol, + role: DEFAULT_ADMIN_ROLE, + name: 'setSymbol → DEFAULT_ADMIN_ROLE', + }, + { + selector: selectors.setSnapshotEngine, + role: SNAPSHOOTER_ROLE, + name: 'setSnapshotEngine → SNAPSHOOTER_ROLE', + }, + { + selector: selectors.setDocumentEngine, + role: DOCUMENT_ROLE, + name: 'setDocumentEngine → DOCUMENT_ROLE', + }, ]; for (const { selector, role, name } of roleMapping) { @@ -411,15 +469,15 @@ async function main() { /* ============================================================ * 14. Grant roles to the admin account * ============================================================ */ - console.log("\n--- Step 14: Grant roles to admin ---"); + console.log('\n--- Step 14: Grant roles to admin ---'); const rolesToGrant = [ - { role: MINTER_ROLE, name: "MINTER_ROLE" }, - { role: BURNER_ROLE, name: "BURNER_ROLE" }, - { role: BURNER_FROM_ROLE, name: "BURNER_FROM_ROLE" }, - { role: ENFORCER_ROLE, name: "ENFORCER_ROLE" }, - { role: ERC20ENFORCER_ROLE, name: "ERC20ENFORCER_ROLE" }, - { role: SNAPSHOOTER_ROLE, name: "SNAPSHOOTER_ROLE" }, - { role: DOCUMENT_ROLE, name: "DOCUMENT_ROLE" }, + { role: MINTER_ROLE, name: 'MINTER_ROLE' }, + { role: BURNER_ROLE, name: 'BURNER_ROLE' }, + { role: BURNER_FROM_ROLE, name: 'BURNER_FROM_ROLE' }, + { role: ENFORCER_ROLE, name: 'ENFORCER_ROLE' }, + { role: ERC20ENFORCER_ROLE, name: 'ERC20ENFORCER_ROLE' }, + { role: SNAPSHOOTER_ROLE, name: 'SNAPSHOOTER_ROLE' }, + { role: DOCUMENT_ROLE, name: 'DOCUMENT_ROLE' }, ]; for (const { role, name } of rolesToGrant) { @@ -435,60 +493,69 @@ async function main() { const policyEngineImpl = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); const pausePolicyImpl = await upgrades.erc1967.getImplementationAddress(pausePolicyAddress); const rbacPolicyImpl = await upgrades.erc1967.getImplementationAddress(rbacPolicyAddress); - const secureMintPolicyImpl = await upgrades.erc1967.getImplementationAddress(secureMintPolicyAddress); + const secureMintPolicyImpl = + await upgrades.erc1967.getImplementationAddress(secureMintPolicyAddress); const transferPolicyImpl = await upgrades.erc1967.getImplementationAddress(transferPolicyAddress); // PolicyEngine uses Transparent Proxy, so it also has a ProxyAdmin const policyEngineAdmin = await upgrades.erc1967.getAdminAddress(policyEngineAddress); - console.log("\n========================================"); - console.log("Demo deployment complete!"); - console.log("========================================"); - - console.log("\n--- Proxy Contracts (interact via these addresses) ---"); - console.log("PolicyEngine (proxy): ", policyEngineAddress); - console.log("PausePolicy (proxy): ", pausePolicyAddress); - console.log("RBAC Policy (proxy): ", rbacPolicyAddress); - console.log("SecureMint Policy (proxy): ", secureMintPolicyAddress); - console.log("Transfer Policy (proxy): ", transferPolicyAddress); - - console.log("\n--- Implementation Contracts ---"); - console.log("PolicyEngine (impl): ", policyEngineImpl); - console.log("PausePolicy (impl): ", pausePolicyImpl); - console.log("RBAC Policy (impl): ", rbacPolicyImpl); - console.log("SecureMint Policy (impl): ", secureMintPolicyImpl); - console.log("Transfer Policy (impl): ", transferPolicyImpl); - - console.log("\n--- Proxy Admin ---"); - console.log("PolicyEngine ProxyAdmin: ", policyEngineAdmin); - - console.log("\n--- Non-Proxy Contracts ---"); - console.log("Token (Standalone): ", cmtatAddress); - console.log("MintBurn Extractor: ", extractorAddress); - console.log("ERC20Transfer Extractor: ", erc20TransferExtractorAddress); - console.log("ERC20TransferFrom Extractor:", erc20TransferFromExtractorAddress); - console.log("MaxAmountRule: ", maxAmountRuleAddress); - console.log("RestrictedAddressRule: ", restrictedAddressRuleAddress); - console.log("Mock Reserve Feed: ", mockFeedAddress); - console.log("DocumentEngineMock: ", documentEngineAddress); - console.log("SnapshotEngineMock: ", snapshotEngineAddress); - - console.log("\n--- Configuration ---"); - console.log(`Reserve amount: 1,000,000 tokens (${reserveAmount} raw with ${tokenDecimals} decimals)`); - console.log("Admin account: ", admin); - - console.log("\n--- Policy Configuration ---"); - console.log(" - PausePolicy protects ALL listed external functions (initially unpaused)"); - console.log(" - RBAC policy protects ALL listed external functions"); - console.log(" - SecureMint policy protects mint() (reserve-backed minting)"); - console.log(" - TransferValidationPolicy protects transfer() and transferFrom()"); - console.log(" → MaxAmountRule: max", maxTransferAmount.toString(), "raw units per transfer"); - console.log(" → RestrictedAddressRule: no addresses initially restricted"); - console.log(" - Policy execution order per function: PausePolicy → RBAC → (SecureMint on mint) → (TransferValidation on transfer/transferFrom)"); - console.log(" - Admin has MINTER, BURNER, BURNER_FROM, ENFORCER, ERC20ENFORCER, SNAPSHOOTER, DOCUMENT roles"); - console.log(" - DocumentEngineMock set at deploy (manages on-chain documents via IERC1643)"); - console.log(" - SnapshotEngineMock set at deploy (enables snapshot scheduling for balance tracking)"); - console.log("========================================"); + console.log('\n========================================'); + console.log('Demo deployment complete!'); + console.log('========================================'); + + console.log('\n--- Proxy Contracts (interact via these addresses) ---'); + console.log('PolicyEngine (proxy): ', policyEngineAddress); + console.log('PausePolicy (proxy): ', pausePolicyAddress); + console.log('RBAC Policy (proxy): ', rbacPolicyAddress); + console.log('SecureMint Policy (proxy): ', secureMintPolicyAddress); + console.log('Transfer Policy (proxy): ', transferPolicyAddress); + + console.log('\n--- Implementation Contracts ---'); + console.log('PolicyEngine (impl): ', policyEngineImpl); + console.log('PausePolicy (impl): ', pausePolicyImpl); + console.log('RBAC Policy (impl): ', rbacPolicyImpl); + console.log('SecureMint Policy (impl): ', secureMintPolicyImpl); + console.log('Transfer Policy (impl): ', transferPolicyImpl); + + console.log('\n--- Proxy Admin ---'); + console.log('PolicyEngine ProxyAdmin: ', policyEngineAdmin); + + console.log('\n--- Non-Proxy Contracts ---'); + console.log('Token (Standalone): ', cmtatAddress); + console.log('MintBurn Extractor: ', extractorAddress); + console.log('ERC20Transfer Extractor: ', erc20TransferExtractorAddress); + console.log('ERC20TransferFrom Extractor:', erc20TransferFromExtractorAddress); + console.log('MaxAmountRule: ', maxAmountRuleAddress); + console.log('RestrictedAddressRule: ', restrictedAddressRuleAddress); + console.log('Mock Reserve Feed: ', mockFeedAddress); + console.log('DocumentEngineMock: ', documentEngineAddress); + console.log('SnapshotEngineMock: ', snapshotEngineAddress); + + console.log('\n--- Configuration ---'); + console.log( + `Reserve amount: 1,000,000 tokens (${reserveAmount} raw with ${tokenDecimals} decimals)`, + ); + console.log('Admin account: ', admin); + + console.log('\n--- Policy Configuration ---'); + console.log(' - PausePolicy protects ALL listed external functions (initially unpaused)'); + console.log(' - RBAC policy protects ALL listed external functions'); + console.log(' - SecureMint policy protects mint() (reserve-backed minting)'); + console.log(' - TransferValidationPolicy protects transfer() and transferFrom()'); + console.log(' → MaxAmountRule: max', maxTransferAmount.toString(), 'raw units per transfer'); + console.log(' → RestrictedAddressRule: no addresses initially restricted'); + console.log( + ' - Policy execution order per function: PausePolicy → RBAC → (SecureMint on mint) → (TransferValidation on transfer/transferFrom)', + ); + console.log( + ' - Admin has MINTER, BURNER, BURNER_FROM, ENFORCER, ERC20ENFORCER, SNAPSHOOTER, DOCUMENT roles', + ); + console.log(' - DocumentEngineMock set at deploy (manages on-chain documents via IERC1643)'); + console.log( + ' - SnapshotEngineMock set at deploy (enables snapshot scheduling for balance tracking)', + ); + console.log('========================================'); } main().catch((error) => { diff --git a/scripts/lite/deploy-lite-standalone.js b/scripts/lite/deploy-lite-standalone.js index 0ff4431..dbf68f1 100644 --- a/scripts/lite/deploy-lite-standalone.js +++ b/scripts/lite/deploy-lite-standalone.js @@ -1,16 +1,16 @@ /** * Script example - do not use it for production */ -const { ethers, upgrades } = require("hardhat"); -const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); +const { ethers, upgrades } = require('hardhat'); +const { ZeroAddress, keccak256, toUtf8Bytes } = require('ethers'); async function deployPolicyEngine(initialOwner) { - const Factory = await ethers.getContractFactory("PolicyEngine"); - const contract = await upgrades.deployProxy( - Factory, - [true, initialOwner], - { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } - ); + const Factory = await ethers.getContractFactory('PolicyEngine'); + const contract = await upgrades.deployProxy(Factory, [true, initialOwner], { + initializer: 'initialize', + unsafeAllow: ['constructor'], + silenceWarnings: true, + }); await contract.waitForDeployment(); return contract; } @@ -23,35 +23,39 @@ async function main() { const deployer = signers[0]; if (isHardhatNetwork) { - console.log("Hardhat network detected, using account:", deployer.address); + console.log('Hardhat network detected, using account:', deployer.address); } else { - console.log("Deploying to network:", network.name, "with account:", deployer.address); + console.log('Deploying to network:', network.name, 'with account:', deployer.address); } // To change const forwarderIrrevocable = ZeroAddress; - const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; + const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; const ERC20Attributes = { - name: "Security Token", - symbol: "ST", + name: 'Security Token', + symbol: 'ST', decimalsIrrevocable: 8, }; const terms = { - name: "Token Terms v1", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: keccak256(toUtf8Bytes("terms-v1")), + name: 'Token Terms v1', + uri: 'https://cmta.ch/standards/cmta-token-cmtat', + documentHash: keccak256(toUtf8Bytes('terms-v1')), }; const extraInformationAttributes = { - tokenId: "1234567890", + tokenId: '1234567890', terms: terms, - information: "CMTAT smart contract", + information: 'CMTAT smart contract', }; const policyEngineContract = await deployPolicyEngine(admin); const policyEngineAddress = await policyEngineContract.getAddress(); - const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); + const policyEngineImplAddress = + await upgrades.erc1967.getImplementationAddress(policyEngineAddress); - const CMTATFactory = await ethers.getContractFactory("ComplianceTokenCMTATLiteStandalone", deployer); + const CMTATFactory = await ethers.getContractFactory( + 'ComplianceTokenCMTATLiteStandalone', + deployer, + ); const cmtat = await CMTATFactory.deploy( forwarderIrrevocable, admin, @@ -59,13 +63,13 @@ async function main() { extraInformationAttributes, policyEngineAddress, ZeroAddress, - ZeroAddress + ZeroAddress, ); await cmtat.waitForDeployment(); - console.log("PolicyEngine (proxy): ", policyEngineAddress); - console.log("PolicyEngine (impl): ", policyEngineImplAddress); - console.log("ComplianceTokenCMTATLiteStandalone: ", await cmtat.getAddress()); + console.log('PolicyEngine (proxy): ', policyEngineAddress); + console.log('PolicyEngine (impl): ', policyEngineImplAddress); + console.log('ComplianceTokenCMTATLiteStandalone: ', await cmtat.getAddress()); } main().catch((error) => { diff --git a/scripts/lite/deploy-lite-upgradeable.js b/scripts/lite/deploy-lite-upgradeable.js index ef37e8d..84ea140 100644 --- a/scripts/lite/deploy-lite-upgradeable.js +++ b/scripts/lite/deploy-lite-upgradeable.js @@ -1,16 +1,16 @@ /** * Script example - do not use it for production */ -const { ethers, upgrades } = require("hardhat"); -const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); +const { ethers, upgrades } = require('hardhat'); +const { ZeroAddress, keccak256, toUtf8Bytes } = require('ethers'); async function deployPolicyEngine(initialOwner) { - const Factory = await ethers.getContractFactory("PolicyEngine"); - const contract = await upgrades.deployProxy( - Factory, - [true, initialOwner], - { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } - ); + const Factory = await ethers.getContractFactory('PolicyEngine'); + const contract = await upgrades.deployProxy(Factory, [true, initialOwner], { + initializer: 'initialize', + unsafeAllow: ['constructor'], + silenceWarnings: true, + }); await contract.waitForDeployment(); return contract; } @@ -23,26 +23,30 @@ async function main() { const deployer = signers[0]; if (isHardhatNetwork) { - console.log("Hardhat network detected, using account:", deployer.address); + console.log('Hardhat network detected, using account:', deployer.address); } else { - console.log("Deploying to network:", network.name, "with account:", deployer.address); + console.log('Deploying to network:', network.name, 'with account:', deployer.address); } // To change const forwarderIrrevocable = ZeroAddress; - const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; - const ERC20Attributes = ["Security Token", "ST", 8]; + const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; + const ERC20Attributes = ['Security Token', 'ST', 8]; const terms = { - name: "Token Terms v1", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: keccak256(toUtf8Bytes("terms-v1")), + name: 'Token Terms v1', + uri: 'https://cmta.ch/standards/cmta-token-cmtat', + documentHash: keccak256(toUtf8Bytes('terms-v1')), }; - const extraInformationAttributes = ["1234567890", [terms.name, terms.uri, terms.documentHash], "CMTAT smart contract"]; + const extraInformationAttributes = [ + '1234567890', + [terms.name, terms.uri, terms.documentHash], + 'CMTAT smart contract', + ]; const policyEngineContract = await deployPolicyEngine(admin); const policyEngineAddress = await policyEngineContract.getAddress(); - const Factory = await ethers.getContractFactory("ComplianceTokenCMTATLiteUpgradeable", deployer); + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATLiteUpgradeable', deployer); const cmtat = await upgrades.deployProxy( Factory, [ @@ -54,21 +58,28 @@ async function main() { ZeroAddress, ], { - initializer: "initialize", - constructorArgs: [forwarderIrrevocable, admin, ERC20Attributes, extraInformationAttributes, policyEngineAddress], - unsafeAllow: ["missing-initializer", "constructor"], + initializer: 'initialize', + constructorArgs: [ + forwarderIrrevocable, + admin, + ERC20Attributes, + extraInformationAttributes, + policyEngineAddress, + ], + unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - } + }, ); await cmtat.waitForDeployment(); const cmtatProxyAddress = await cmtat.getAddress(); const cmtatImplAddress = await upgrades.erc1967.getImplementationAddress(cmtatProxyAddress); - const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); - console.log("PolicyEngine (proxy): ", policyEngineAddress); - console.log("PolicyEngine (impl): ", policyEngineImplAddress); - console.log("ComplianceTokenCMTATLiteUpgradeable (proxy): ", cmtatProxyAddress); - console.log("ComplianceTokenCMTATLiteUpgradeable (impl): ", cmtatImplAddress); + const policyEngineImplAddress = + await upgrades.erc1967.getImplementationAddress(policyEngineAddress); + console.log('PolicyEngine (proxy): ', policyEngineAddress); + console.log('PolicyEngine (impl): ', policyEngineImplAddress); + console.log('ComplianceTokenCMTATLiteUpgradeable (proxy): ', cmtatProxyAddress); + console.log('ComplianceTokenCMTATLiteUpgradeable (impl): ', cmtatImplAddress); } main().catch((error) => { diff --git a/scripts/lite/deploy-lite-uups.js b/scripts/lite/deploy-lite-uups.js index 3a2f526..3073928 100644 --- a/scripts/lite/deploy-lite-uups.js +++ b/scripts/lite/deploy-lite-uups.js @@ -1,16 +1,16 @@ /** * Script example - do not use it for production */ -const { ethers, upgrades } = require("hardhat"); -const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); +const { ethers, upgrades } = require('hardhat'); +const { ZeroAddress, keccak256, toUtf8Bytes } = require('ethers'); async function deployPolicyEngine(initialOwner) { - const Factory = await ethers.getContractFactory("PolicyEngine"); - const contract = await upgrades.deployProxy( - Factory, - [true, initialOwner], - { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } - ); + const Factory = await ethers.getContractFactory('PolicyEngine'); + const contract = await upgrades.deployProxy(Factory, [true, initialOwner], { + initializer: 'initialize', + unsafeAllow: ['constructor'], + silenceWarnings: true, + }); await contract.waitForDeployment(); return contract; } @@ -23,26 +23,33 @@ async function main() { const deployer = signers[0]; if (isHardhatNetwork) { - console.log("Hardhat network detected, using account:", deployer.address); + console.log('Hardhat network detected, using account:', deployer.address); } else { - console.log("Deploying to network:", network.name, "with account:", deployer.address); + console.log('Deploying to network:', network.name, 'with account:', deployer.address); } // To change const forwarderIrrevocable = ZeroAddress; - const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; - const ERC20Attributes = ["Security Token", "ST", 8]; + const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; + const ERC20Attributes = ['Security Token', 'ST', 8]; const terms = { - name: "Token Terms v1", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: keccak256(toUtf8Bytes("terms-v1")), + name: 'Token Terms v1', + uri: 'https://cmta.ch/standards/cmta-token-cmtat', + documentHash: keccak256(toUtf8Bytes('terms-v1')), }; - const extraInformationAttributes = ["1234567890", [terms.name, terms.uri, terms.documentHash], "CMTAT smart contract"]; + const extraInformationAttributes = [ + '1234567890', + [terms.name, terms.uri, terms.documentHash], + 'CMTAT smart contract', + ]; const policyEngineContract = await deployPolicyEngine(admin); const policyEngineAddress = await policyEngineContract.getAddress(); - const Factory = await ethers.getContractFactory("ComplianceTokenCMTATLiteUUPSUpgradeable", deployer); + const Factory = await ethers.getContractFactory( + 'ComplianceTokenCMTATLiteUUPSUpgradeable', + deployer, + ); const cmtat = await upgrades.deployProxy( Factory, [ @@ -54,22 +61,23 @@ async function main() { ZeroAddress, ], { - initializer: "initialize", + initializer: 'initialize', constructorArgs: [forwarderIrrevocable], - unsafeAllow: ["missing-initializer", "constructor"], + unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - kind: "uups", - } + kind: 'uups', + }, ); await cmtat.waitForDeployment(); const cmtatProxyAddress = await cmtat.getAddress(); const cmtatImplAddress = await upgrades.erc1967.getImplementationAddress(cmtatProxyAddress); - const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); - console.log("PolicyEngine (proxy): ", policyEngineAddress); - console.log("PolicyEngine (impl): ", policyEngineImplAddress); - console.log("ComplianceTokenCMTATLiteUUPSUpgradeable (proxy): ", cmtatProxyAddress); - console.log("ComplianceTokenCMTATLiteUUPSUpgradeable (impl): ", cmtatImplAddress); + const policyEngineImplAddress = + await upgrades.erc1967.getImplementationAddress(policyEngineAddress); + console.log('PolicyEngine (proxy): ', policyEngineAddress); + console.log('PolicyEngine (impl): ', policyEngineImplAddress); + console.log('ComplianceTokenCMTATLiteUUPSUpgradeable (proxy): ', cmtatProxyAddress); + console.log('ComplianceTokenCMTATLiteUUPSUpgradeable (impl): ', cmtatImplAddress); } main().catch((error) => { diff --git a/scripts/standard/deploy-standard-standalone.js b/scripts/standard/deploy-standard-standalone.js index c014c33..e94d4ea 100644 --- a/scripts/standard/deploy-standard-standalone.js +++ b/scripts/standard/deploy-standard-standalone.js @@ -1,16 +1,16 @@ /** * Script example - do not use it for production */ -const { ethers, upgrades } = require("hardhat"); -const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); +const { ethers, upgrades } = require('hardhat'); +const { ZeroAddress, keccak256, toUtf8Bytes } = require('ethers'); async function deployPolicyEngine(initialOwner) { - const Factory = await ethers.getContractFactory("PolicyEngine"); - const contract = await upgrades.deployProxy( - Factory, - [true, initialOwner], - { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } - ); + const Factory = await ethers.getContractFactory('PolicyEngine'); + const contract = await upgrades.deployProxy(Factory, [true, initialOwner], { + initializer: 'initialize', + unsafeAllow: ['constructor'], + silenceWarnings: true, + }); await contract.waitForDeployment(); return contract; } @@ -23,35 +23,36 @@ async function main() { const deployer = signers[0]; if (isHardhatNetwork) { - console.log("Hardhat network detected, using account:", deployer.address); + console.log('Hardhat network detected, using account:', deployer.address); } else { - console.log("Deploying to network:", network.name, "with account:", deployer.address); + console.log('Deploying to network:', network.name, 'with account:', deployer.address); } // To change const forwarderIrrevocable = ZeroAddress; - const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; + const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; const ERC20Attributes = { - name: "Security Token", - symbol: "ST", + name: 'Security Token', + symbol: 'ST', decimalsIrrevocable: 0, }; const terms = { - name: "Token Terms v2", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: keccak256(toUtf8Bytes("terms-v2")), + name: 'Token Terms v2', + uri: 'https://cmta.ch/standards/cmta-token-cmtat', + documentHash: keccak256(toUtf8Bytes('terms-v2')), }; const extraInformationAttributes = { - tokenId: "1234567890", + tokenId: '1234567890', terms: terms, - information: "CMTAT smart contract", + information: 'CMTAT smart contract', }; const policyEngineContract = await deployPolicyEngine(admin); const policyEngineAddress = await policyEngineContract.getAddress(); - const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); + const policyEngineImplAddress = + await upgrades.erc1967.getImplementationAddress(policyEngineAddress); - const CMTATFactory = await ethers.getContractFactory("ComplianceTokenCMTATStandalone", deployer); + const CMTATFactory = await ethers.getContractFactory('ComplianceTokenCMTATStandalone', deployer); const cmtat = await CMTATFactory.deploy( forwarderIrrevocable, admin, @@ -59,13 +60,13 @@ async function main() { extraInformationAttributes, policyEngineAddress, ZeroAddress, - ZeroAddress + ZeroAddress, ); await cmtat.waitForDeployment(); - console.log("PolicyEngine (proxy): ", policyEngineAddress); - console.log("PolicyEngine (impl): ", policyEngineImplAddress); - console.log("ComplianceTokenCMTATStandalone: ", await cmtat.getAddress()); + console.log('PolicyEngine (proxy): ', policyEngineAddress); + console.log('PolicyEngine (impl): ', policyEngineImplAddress); + console.log('ComplianceTokenCMTATStandalone: ', await cmtat.getAddress()); } main().catch((error) => { diff --git a/scripts/standard/deploy-standard-upgradeable.js b/scripts/standard/deploy-standard-upgradeable.js index eafe426..1cd676e 100644 --- a/scripts/standard/deploy-standard-upgradeable.js +++ b/scripts/standard/deploy-standard-upgradeable.js @@ -1,16 +1,16 @@ /** * Script example - do not use it for production */ -const { ethers, upgrades } = require("hardhat"); -const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); +const { ethers, upgrades } = require('hardhat'); +const { ZeroAddress, keccak256, toUtf8Bytes } = require('ethers'); async function deployPolicyEngine(initialOwner) { - const Factory = await ethers.getContractFactory("PolicyEngine"); - const contract = await upgrades.deployProxy( - Factory, - [true, initialOwner], - { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } - ); + const Factory = await ethers.getContractFactory('PolicyEngine'); + const contract = await upgrades.deployProxy(Factory, [true, initialOwner], { + initializer: 'initialize', + unsafeAllow: ['constructor'], + silenceWarnings: true, + }); await contract.waitForDeployment(); return contract; } @@ -23,26 +23,30 @@ async function main() { const deployer = signers[0]; if (isHardhatNetwork) { - console.log("Hardhat network detected, using account:", deployer.address); + console.log('Hardhat network detected, using account:', deployer.address); } else { - console.log("Deploying to network:", network.name, "with account:", deployer.address); + console.log('Deploying to network:', network.name, 'with account:', deployer.address); } // To change const forwarderIrrevocable = ZeroAddress; - const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; - const ERC20Attributes = ["Security Token", "ST", 0]; + const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; + const ERC20Attributes = ['Security Token', 'ST', 0]; const terms = { - name: "Token Terms v2", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: keccak256(toUtf8Bytes("terms-v2")), + name: 'Token Terms v2', + uri: 'https://cmta.ch/standards/cmta-token-cmtat', + documentHash: keccak256(toUtf8Bytes('terms-v2')), }; - const extraInformationAttributes = ["1234567890", [terms.name, terms.uri, terms.documentHash], "CMTAT smart contract"]; + const extraInformationAttributes = [ + '1234567890', + [terms.name, terms.uri, terms.documentHash], + 'CMTAT smart contract', + ]; const policyEngineContract = await deployPolicyEngine(admin); const policyEngineAddress = await policyEngineContract.getAddress(); - const Factory = await ethers.getContractFactory("ComplianceTokenCMTATUpgradeable", deployer); + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUpgradeable', deployer); const cmtat = await upgrades.deployProxy( Factory, [ @@ -54,21 +58,22 @@ async function main() { ZeroAddress, ], { - initializer: "initialize", + initializer: 'initialize', constructorArgs: [forwarderIrrevocable], - unsafeAllow: ["missing-initializer", "constructor"], + unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - } + }, ); await cmtat.waitForDeployment(); const cmtatProxyAddress = await cmtat.getAddress(); const cmtatImplAddress = await upgrades.erc1967.getImplementationAddress(cmtatProxyAddress); - const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); - console.log("PolicyEngine (proxy): ", policyEngineAddress); - console.log("PolicyEngine (impl): ", policyEngineImplAddress); - console.log("ComplianceTokenCMTATUpgradeable (proxy): ", cmtatProxyAddress); - console.log("ComplianceTokenCMTATUpgradeable (impl): ", cmtatImplAddress); + const policyEngineImplAddress = + await upgrades.erc1967.getImplementationAddress(policyEngineAddress); + console.log('PolicyEngine (proxy): ', policyEngineAddress); + console.log('PolicyEngine (impl): ', policyEngineImplAddress); + console.log('ComplianceTokenCMTATUpgradeable (proxy): ', cmtatProxyAddress); + console.log('ComplianceTokenCMTATUpgradeable (impl): ', cmtatImplAddress); } main().catch((error) => { diff --git a/scripts/standard/deploy-standard-uups.js b/scripts/standard/deploy-standard-uups.js index 580e793..a0a82de 100644 --- a/scripts/standard/deploy-standard-uups.js +++ b/scripts/standard/deploy-standard-uups.js @@ -1,16 +1,16 @@ /** * Script example - do not use it for production */ -const { ethers, upgrades } = require("hardhat"); -const { ZeroAddress, keccak256, toUtf8Bytes } = require("ethers"); +const { ethers, upgrades } = require('hardhat'); +const { ZeroAddress, keccak256, toUtf8Bytes } = require('ethers'); async function deployPolicyEngine(initialOwner) { - const Factory = await ethers.getContractFactory("PolicyEngine"); - const contract = await upgrades.deployProxy( - Factory, - [true, initialOwner], - { initializer: "initialize", unsafeAllow: ["constructor"], silenceWarnings: true } - ); + const Factory = await ethers.getContractFactory('PolicyEngine'); + const contract = await upgrades.deployProxy(Factory, [true, initialOwner], { + initializer: 'initialize', + unsafeAllow: ['constructor'], + silenceWarnings: true, + }); await contract.waitForDeployment(); return contract; } @@ -23,26 +23,30 @@ async function main() { const deployer = signers[0]; if (isHardhatNetwork) { - console.log("Hardhat network detected, using account:", deployer.address); + console.log('Hardhat network detected, using account:', deployer.address); } else { - console.log("Deploying to network:", network.name, "with account:", deployer.address); + console.log('Deploying to network:', network.name, 'with account:', deployer.address); } // To change const forwarderIrrevocable = ZeroAddress; - const admin = isHardhatNetwork ? deployer.address : "0x1000000000000000000000000000000000000001"; - const ERC20Attributes = ["Security Token", "ST", 0]; + const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; + const ERC20Attributes = ['Security Token', 'ST', 0]; const terms = { - name: "Token Terms v2", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: keccak256(toUtf8Bytes("terms-v2")), + name: 'Token Terms v2', + uri: 'https://cmta.ch/standards/cmta-token-cmtat', + documentHash: keccak256(toUtf8Bytes('terms-v2')), }; - const extraInformationAttributes = ["1234567890", [terms.name, terms.uri, terms.documentHash], "CMTAT smart contract"]; + const extraInformationAttributes = [ + '1234567890', + [terms.name, terms.uri, terms.documentHash], + 'CMTAT smart contract', + ]; const policyEngineContract = await deployPolicyEngine(admin); const policyEngineAddress = await policyEngineContract.getAddress(); - const Factory = await ethers.getContractFactory("ComplianceTokenCMTATUUPSUpgradeable", deployer); + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable', deployer); const cmtat = await upgrades.deployProxy( Factory, [ @@ -54,22 +58,23 @@ async function main() { ZeroAddress, ], { - initializer: "initialize", + initializer: 'initialize', constructorArgs: [forwarderIrrevocable], - unsafeAllow: ["missing-initializer", "constructor"], + unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - kind: "uups", - } + kind: 'uups', + }, ); await cmtat.waitForDeployment(); const cmtatProxyAddress = await cmtat.getAddress(); const cmtatImplAddress = await upgrades.erc1967.getImplementationAddress(cmtatProxyAddress); - const policyEngineImplAddress = await upgrades.erc1967.getImplementationAddress(policyEngineAddress); - console.log("PolicyEngine (proxy): ", policyEngineAddress); - console.log("PolicyEngine (impl): ", policyEngineImplAddress); - console.log("ComplianceTokenCMTATUUPSUpgradeable (proxy): ", cmtatProxyAddress); - console.log("ComplianceTokenCMTATUUPSUpgradeable (impl): ", cmtatImplAddress); + const policyEngineImplAddress = + await upgrades.erc1967.getImplementationAddress(policyEngineAddress); + console.log('PolicyEngine (proxy): ', policyEngineAddress); + console.log('PolicyEngine (impl): ', policyEngineImplAddress); + console.log('ComplianceTokenCMTATUUPSUpgradeable (proxy): ', cmtatProxyAddress); + console.log('ComplianceTokenCMTATUUPSUpgradeable (impl): ', cmtatImplAddress); } main().catch((error) => { diff --git a/test/common/ace/CombinedPolicyCommon.js b/test/common/ace/CombinedPolicyCommon.js index 7d38203..36495a7 100644 --- a/test/common/ace/CombinedPolicyCommon.js +++ b/test/common/ace/CombinedPolicyCommon.js @@ -1,4 +1,4 @@ -const { expect } = require('chai') +const { expect } = require('chai'); /** * Tests combined PausePolicy + RBAC behavior. @@ -11,54 +11,56 @@ const { expect } = require('chai') * this.policyEngine – PolicyEngine instance * this.pausePolicy – PausePolicy instance */ -function CombinedPolicyCommon () { +function CombinedPolicyCommon() { context('Combined PausePolicy + RBAC', function () { it('testRejectMintWhenPausedEvenWithCorrectRole', async function () { - await this.pausePolicy.connect(this.admin).setPausedState(true) + await this.pausePolicy.connect(this.admin).setPausedState(true); await expect( - this.cmtat.connect(this.admin).mint(this.address1, 100n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.admin).mint(this.address1, 100n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testRejectMintWhenUnpausedWithoutCorrectRole', async function () { await expect( - this.cmtat.connect(this.address1).mint(this.address2, 100n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).mint(this.address2, 100n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testAllowMintWhenUnpausedWithCorrectRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n); + }); it('testPolicyOrderPauseCheckedBeforeRBAC', async function () { - await this.pausePolicy.connect(this.admin).setPausedState(true) + await this.pausePolicy.connect(this.admin).setPausedState(true); await expect( - this.cmtat.connect(this.admin).mint(this.address1, 100n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - await this.pausePolicy.connect(this.admin).setPausedState(false) - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) - }) + this.cmtat.connect(this.admin).mint(this.address1, 100n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + await this.pausePolicy.connect(this.admin).setPausedState(false); + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n); + }); it('testFullMintTransferBurnLifecycle', async function () { - const MINT_AMOUNT = 200n - const TRANSFER_AMOUNT = 50n - const BURN_AMOUNT = 100n + const MINT_AMOUNT = 200n; + const TRANSFER_AMOUNT = 50n; + const BURN_AMOUNT = 100n; - await this.cmtat.connect(this.admin).mint(this.address1, MINT_AMOUNT) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(MINT_AMOUNT) - expect(await this.cmtat.totalSupply()).to.equal(MINT_AMOUNT) + await this.cmtat.connect(this.admin).mint(this.address1, MINT_AMOUNT); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(MINT_AMOUNT); + expect(await this.cmtat.totalSupply()).to.equal(MINT_AMOUNT); - await this.cmtat.connect(this.address1).transfer(this.address2, TRANSFER_AMOUNT) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(MINT_AMOUNT - TRANSFER_AMOUNT) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(TRANSFER_AMOUNT) + await this.cmtat.connect(this.address1).transfer(this.address2, TRANSFER_AMOUNT); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(MINT_AMOUNT - TRANSFER_AMOUNT); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(TRANSFER_AMOUNT); - await this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, BURN_AMOUNT) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(MINT_AMOUNT - TRANSFER_AMOUNT - BURN_AMOUNT) - expect(await this.cmtat.totalSupply()).to.equal(MINT_AMOUNT - BURN_AMOUNT) - }) - }) + await this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, BURN_AMOUNT); + expect(await this.cmtat.balanceOf(this.address1)).to.equal( + MINT_AMOUNT - TRANSFER_AMOUNT - BURN_AMOUNT, + ); + expect(await this.cmtat.totalSupply()).to.equal(MINT_AMOUNT - BURN_AMOUNT); + }); + }); } -module.exports = CombinedPolicyCommon +module.exports = CombinedPolicyCommon; diff --git a/test/common/ace/DeploymentCommon.js b/test/common/ace/DeploymentCommon.js index 33b0c10..13cfbc3 100644 --- a/test/common/ace/DeploymentCommon.js +++ b/test/common/ace/DeploymentCommon.js @@ -1,5 +1,5 @@ -const { expect } = require('chai') -const { DEPLOYMENT_DECIMAL } = require('../../deploymentUtils') +const { expect } = require('chai'); +const { DEPLOYMENT_DECIMAL } = require('../../deploymentUtils'); /** * Basic deployment tests for standard (PolicyEngine-based) contracts. @@ -10,37 +10,37 @@ const { DEPLOYMENT_DECIMAL } = require('../../deploymentUtils') * this.address1 – test address * this.policyEngineAddress – PolicyEngine address */ -function DeploymentCommon () { +function DeploymentCommon() { context('Deployment', function () { it('testHasCorrectName', async function () { - expect(await this.cmtat.name()).to.equal('CMTA Token') - }) + expect(await this.cmtat.name()).to.equal('CMTA Token'); + }); it('testHasCorrectSymbol', async function () { - expect(await this.cmtat.symbol()).to.equal('CMTAT') - }) + expect(await this.cmtat.symbol()).to.equal('CMTAT'); + }); it('testHasCorrectDecimals', async function () { - expect(await this.cmtat.decimals()).to.equal(DEPLOYMENT_DECIMAL) - }) + expect(await this.cmtat.decimals()).to.equal(DEPLOYMENT_DECIMAL); + }); it('testHasPolicyEngineAttached', async function () { - expect(await this.cmtat.getPolicyEngine()).to.equal(this.policyEngineAddress) - }) + expect(await this.cmtat.getPolicyEngine()).to.equal(this.policyEngineAddress); + }); it('testHasCorrectOwner', async function () { - expect(await this.cmtat.owner()).to.equal(this.admin.address) - }) + expect(await this.cmtat.owner()).to.equal(this.admin.address); + }); it('testHasZeroTotalSupply', async function () { - expect(await this.cmtat.totalSupply()).to.equal(0n) - }) + expect(await this.cmtat.totalSupply()).to.equal(0n); + }); it('testAllowMintWithPolicies', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) - }) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n); + }); + }); } -module.exports = DeploymentCommon +module.exports = DeploymentCommon; diff --git a/test/common/ace/PausePolicyCommon.js b/test/common/ace/PausePolicyCommon.js index 9c113a6..77e312e 100644 --- a/test/common/ace/PausePolicyCommon.js +++ b/test/common/ace/PausePolicyCommon.js @@ -1,4 +1,4 @@ -const { expect } = require('chai') +const { expect } = require('chai'); /** * Tests PausePolicy behavior on standard (PolicyEngine-based) contracts. @@ -11,56 +11,54 @@ const { expect } = require('chai') * this.policyEngine – PolicyEngine instance * this.pausePolicy – PausePolicy instance */ -function PausePolicyCommon () { +function PausePolicyCommon() { context('PausePolicy', function () { it('testAllowMintWhenNotPaused', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n); + }); it('testRejectMintWhenPaused', async function () { - await this.pausePolicy.connect(this.admin).setPausedState(true) + await this.pausePolicy.connect(this.admin).setPausedState(true); await expect( - this.cmtat.connect(this.admin).mint(this.address1, 100n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.admin).mint(this.address1, 100n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testAllowMintAfterUnpausing', async function () { - await this.pausePolicy.connect(this.admin).setPausedState(true) - await this.pausePolicy.connect(this.admin).setPausedState(false) - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) - }) + await this.pausePolicy.connect(this.admin).setPausedState(true); + await this.pausePolicy.connect(this.admin).setPausedState(false); + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n); + }); it('testRejectBurnWhenPaused', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - await this.pausePolicy.connect(this.admin).setPausedState(true) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + await this.pausePolicy.connect(this.admin).setPausedState(true); await expect( - this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testEmitPauseStateChanged', async function () { await expect(this.pausePolicy.connect(this.admin).setPausedState(true)) .to.emit(this.pausePolicy, 'PauseStateChanged') - .withArgs(true) + .withArgs(true); await expect(this.pausePolicy.connect(this.admin).setPausedState(false)) .to.emit(this.pausePolicy, 'PauseStateChanged') - .withArgs(false) - }) + .withArgs(false); + }); it('testRejectSettingSamePauseState', async function () { - await expect( - this.pausePolicy.connect(this.admin).setPausedState(false) - ).to.be.reverted - }) + await expect(this.pausePolicy.connect(this.admin).setPausedState(false)).to.be.reverted; + }); it('testOnlyOwnerCanChangePauseState', async function () { await expect( - this.pausePolicy.connect(this.attacker).setPausedState(true) - ).to.be.revertedWithCustomError(this.pausePolicy, 'OwnableUnauthorizedAccount') - }) - }) + this.pausePolicy.connect(this.attacker).setPausedState(true), + ).to.be.revertedWithCustomError(this.pausePolicy, 'OwnableUnauthorizedAccount'); + }); + }); } -module.exports = PausePolicyCommon +module.exports = PausePolicyCommon; diff --git a/test/common/ace/PolicyEngineCommon.js b/test/common/ace/PolicyEngineCommon.js index 43e4596..8088967 100644 --- a/test/common/ace/PolicyEngineCommon.js +++ b/test/common/ace/PolicyEngineCommon.js @@ -1,5 +1,5 @@ -const { expect } = require('chai') -const { deployPolicyEngine } = require('../../deploymentUtils') +const { expect } = require('chai'); +const { deployPolicyEngine } = require('../../deploymentUtils'); /** * Tests PolicyEngine management on standard (Ownable-based) contracts. @@ -14,38 +14,38 @@ const { deployPolicyEngine } = require('../../deploymentUtils') * this.pausePolicyAddress – PausePolicy address * this.rbacPolicyAddress – RBACPolicy address */ -function PolicyEngineCommon () { +function PolicyEngineCommon() { context('PolicyEngine Management', function () { it('testOwnerCanAttachNewPolicyEngine', async function () { - const newPolicyEngine = await deployPolicyEngine(true, this.admin.address) - const newAddr = await newPolicyEngine.getAddress() - await this.cmtat.connect(this.admin).attachPolicyEngine(newAddr) - expect(await this.cmtat.getPolicyEngine()).to.equal(newAddr) - }) + const newPolicyEngine = await deployPolicyEngine(true, this.admin.address); + const newAddr = await newPolicyEngine.getAddress(); + await this.cmtat.connect(this.admin).attachPolicyEngine(newAddr); + expect(await this.cmtat.getPolicyEngine()).to.equal(newAddr); + }); it('testNonOwnerCannotAttachPolicyEngine', async function () { - const newPolicyEngine = await deployPolicyEngine(true, this.attacker.address) - const newAddr = await newPolicyEngine.getAddress() + const newPolicyEngine = await deployPolicyEngine(true, this.attacker.address); + const newAddr = await newPolicyEngine.getAddress(); await expect( - this.cmtat.connect(this.attacker).attachPolicyEngine(newAddr) - ).to.be.revertedWithCustomError(this.cmtat, 'OwnableUnauthorizedAccount') - }) + this.cmtat.connect(this.attacker).attachPolicyEngine(newAddr), + ).to.be.revertedWithCustomError(this.cmtat, 'OwnableUnauthorizedAccount'); + }); it('testListPoliciesForSelector', async function () { - const policies = await this.policyEngine.getPolicies(this.cmtatAddress, this.mintSelector) - expect(policies.length).to.equal(2) - expect(policies[0]).to.equal(this.pausePolicyAddress) - expect(policies[1]).to.equal(this.rbacPolicyAddress) - }) + const policies = await this.policyEngine.getPolicies(this.cmtatAddress, this.mintSelector); + expect(policies.length).to.equal(2); + expect(policies[0]).to.equal(this.pausePolicyAddress); + expect(policies[1]).to.equal(this.rbacPolicyAddress); + }); it('testRemovePolicy', async function () { - await this.policyEngine.connect(this.admin).removePolicy( - this.cmtatAddress, this.mintSelector, this.pausePolicyAddress - ) - const policies = await this.policyEngine.getPolicies(this.cmtatAddress, this.mintSelector) - expect(policies.length).to.equal(1) - }) - }) + await this.policyEngine + .connect(this.admin) + .removePolicy(this.cmtatAddress, this.mintSelector, this.pausePolicyAddress); + const policies = await this.policyEngine.getPolicies(this.cmtatAddress, this.mintSelector); + expect(policies.length).to.equal(1); + }); + }); } -module.exports = PolicyEngineCommon +module.exports = PolicyEngineCommon; diff --git a/test/common/ace/RBACPolicyCommon.js b/test/common/ace/RBACPolicyCommon.js index e91e973..d2899b5 100644 --- a/test/common/ace/RBACPolicyCommon.js +++ b/test/common/ace/RBACPolicyCommon.js @@ -1,5 +1,16 @@ -const { expect } = require('chai') -const { MINTER_ROLE, BURNER_ROLE, BURNER_FROM_ROLE, BURNER_SELF_ROLE, ENFORCER_ROLE, ERC20ENFORCER_ROLE, DEFAULT_ADMIN_ROLE, DOCUMENT_ROLE, SNAPSHOOTER_ROLE, CROSS_CHAIN_ROLE } = require('../../deploymentUtils') +const { expect } = require('chai'); +const { + MINTER_ROLE, + BURNER_ROLE, + BURNER_FROM_ROLE, + BURNER_SELF_ROLE, + ENFORCER_ROLE, + ERC20ENFORCER_ROLE, + DEFAULT_ADMIN_ROLE, + DOCUMENT_ROLE, + SNAPSHOOTER_ROLE, + CROSS_CHAIN_ROLE, +} = require('../../deploymentUtils'); /** * Tests RoleBasedAccessControlPolicy behavior on standard (PolicyEngine-based) contracts. @@ -17,275 +28,309 @@ const { MINTER_ROLE, BURNER_ROLE, BURNER_FROM_ROLE, BURNER_SELF_ROLE, ENFORCER_R * this.mintSelector – bytes4 selector for mint(address,uint256) * this.burnSelector – bytes4 selector for burn(address,uint256) */ -function RBACPolicyCommon () { +function RBACPolicyCommon() { context('RoleBasedAccessControlPolicy', function () { it('testAllowMintByMinterRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n); + }); it('testRejectMintWithoutMinterRole', async function () { await expect( - this.cmtat.connect(this.address1).mint(this.address2, 100n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).mint(this.address2, 100n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testAllowMintAfterGrantingMinterRole', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) - await this.cmtat.connect(this.address1).mint(this.address2, 50n) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) - }) + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1); + await this.cmtat.connect(this.address1).mint(this.address2, 50n); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n); + }); it('testRejectMintAfterRevokingMinterRole', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) - await this.rbacPolicy.connect(this.admin).revokeRole(MINTER_ROLE, this.address1) + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1); + await this.rbacPolicy.connect(this.admin).revokeRole(MINTER_ROLE, this.address1); await expect( - this.cmtat.connect(this.address1).mint(this.admin, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).mint(this.admin, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testAllowBurnByBurnerRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - await this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 50n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + await this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 50n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n); + }); it('testRejectBurnWithoutBurnerRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); await expect( - this.cmtat.connect(this.address1)['burn(address,uint256)'](this.address1, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1)['burn(address,uint256)'](this.address1, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testMultipleRolesForDifferentOperations', async function () { // Grant MINTER_ROLE to address1 (but not BURNER_ROLE) - await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) - await this.cmtat.connect(this.address1).mint(this.address2, 100n) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(100n) + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1); + await this.cmtat.connect(this.address1).mint(this.address2, 100n); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(100n); // address1 cannot burn await expect( - this.cmtat.connect(this.address1)['burn(address,uint256)'](this.address2, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1)['burn(address,uint256)'](this.address2, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testHasAllowedRole', async function () { - expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.admin)).to.equal(true) - expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.address1)).to.equal(false) - await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) - expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.address1)).to.equal(true) - }) + expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.admin)).to.equal(true); + expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.address1)).to.equal( + false, + ); + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1); + expect(await this.rbacPolicy.hasAllowedRole(this.mintSelector, this.address1)).to.equal(true); + }); it('testEmitOperationAllowanceEvents', async function () { - const setNameSelector = this.cmtat.interface.getFunction('setName').selector - const testRole = ethers.keccak256(ethers.toUtf8Bytes('TEST_ROLE')) - await expect(this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(setNameSelector, testRole)) + const setNameSelector = this.cmtat.interface.getFunction('setName').selector; + const testRole = ethers.keccak256(ethers.toUtf8Bytes('TEST_ROLE')); + await expect( + this.rbacPolicy + .connect(this.admin) + .grantOperationAllowanceToRole(setNameSelector, testRole), + ) .to.emit(this.rbacPolicy, 'OperationAllowanceGrantedToRole') - .withArgs(setNameSelector, testRole) - await expect(this.rbacPolicy.connect(this.admin).removeOperationAllowanceFromRole(setNameSelector, testRole)) + .withArgs(setNameSelector, testRole); + await expect( + this.rbacPolicy + .connect(this.admin) + .removeOperationAllowanceFromRole(setNameSelector, testRole), + ) .to.emit(this.rbacPolicy, 'OperationAllowanceRemovedFromRole') - .withArgs(setNameSelector, testRole) - }) + .withArgs(setNameSelector, testRole); + }); it('testRejectDuplicateOperationAllowanceGrant', async function () { await expect( - this.rbacPolicy.connect(this.admin).grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE) - ).to.be.reverted - }) + this.rbacPolicy + .connect(this.admin) + .grantOperationAllowanceToRole(this.mintSelector, MINTER_ROLE), + ).to.be.reverted; + }); it('testOnlyOwnerCanManageOperationAllowances', async function () { - const testRole = ethers.keccak256(ethers.toUtf8Bytes('TEST_ROLE')) + const testRole = ethers.keccak256(ethers.toUtf8Bytes('TEST_ROLE')); await expect( - this.rbacPolicy.connect(this.attacker).grantOperationAllowanceToRole(this.mintSelector, testRole) - ).to.be.revertedWithCustomError(this.rbacPolicy, 'OwnableUnauthorizedAccount') - }) + this.rbacPolicy + .connect(this.attacker) + .grantOperationAllowanceToRole(this.mintSelector, testRole), + ).to.be.revertedWithCustomError(this.rbacPolicy, 'OwnableUnauthorizedAccount'); + }); // ---- forcedTransfer ---- it('testAllowForcedTransferByEnforcerRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - await this.cmtat.connect(this.admin)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + await this.cmtat + .connect(this.admin) + ['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n); + }); it('testRejectForcedTransferWithoutEnforcerRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); await expect( - this.cmtat.connect(this.address1)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat + .connect(this.address1) + ['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testAllowForcedTransferAfterGrantingEnforcerRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - await this.rbacPolicy.connect(this.admin).grantRole(ENFORCER_ROLE, this.address2) - await this.cmtat.connect(this.address2)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + await this.rbacPolicy.connect(this.admin).grantRole(ENFORCER_ROLE, this.address2); + await this.cmtat + .connect(this.address2) + ['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n); + }); it('testRejectForcedTransferAfterRevokingEnforcerRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - await this.rbacPolicy.connect(this.admin).grantRole(ENFORCER_ROLE, this.address2) - await this.rbacPolicy.connect(this.admin).revokeRole(ENFORCER_ROLE, this.address2) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + await this.rbacPolicy.connect(this.admin).grantRole(ENFORCER_ROLE, this.address2); + await this.rbacPolicy.connect(this.admin).revokeRole(ENFORCER_ROLE, this.address2); await expect( - this.cmtat.connect(this.address2)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat + .connect(this.address2) + ['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); // ---- freezePartialTokens / unfreezePartialTokens ---- it('testAllowFreezeByERC20EnforcerRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 50n) - expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(50n) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + await this.cmtat + .connect(this.admin) + ['freezePartialTokens(address,uint256)'](this.address1, 50n); + expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(50n); + }); it('testRejectFreezeWithoutERC20EnforcerRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); await expect( - this.cmtat.connect(this.address1)['freezePartialTokens(address,uint256)'](this.address1, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat + .connect(this.address1) + ['freezePartialTokens(address,uint256)'](this.address1, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testAllowUnfreezeByERC20EnforcerRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 50n) - await this.cmtat.connect(this.admin)['unfreezePartialTokens(address,uint256)'](this.address1, 30n) - expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(20n) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + await this.cmtat + .connect(this.admin) + ['freezePartialTokens(address,uint256)'](this.address1, 50n); + await this.cmtat + .connect(this.admin) + ['unfreezePartialTokens(address,uint256)'](this.address1, 30n); + expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(20n); + }); it('testRejectUnfreezeWithoutERC20EnforcerRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 50n) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + await this.cmtat + .connect(this.admin) + ['freezePartialTokens(address,uint256)'](this.address1, 50n); await expect( - this.cmtat.connect(this.address1)['unfreezePartialTokens(address,uint256)'](this.address1, 30n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat + .connect(this.address1) + ['unfreezePartialTokens(address,uint256)'](this.address1, 30n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); // ---- setName (ERC20 Attribute Management) ---- it('testAllowSetNameByAdminRole', async function () { - await this.cmtat.connect(this.admin).setName('New Name') - expect(await this.cmtat.name()).to.equal('New Name') - }) + await this.cmtat.connect(this.admin).setName('New Name'); + expect(await this.cmtat.name()).to.equal('New Name'); + }); it('testRejectSetNameWithoutAdminRole', async function () { await expect( - this.cmtat.connect(this.address1).setName('New Name') - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).setName('New Name'), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); // ---- setTokenId (Extra Information Management) ---- it('testAllowSetTokenIdByAdminRole', async function () { - await this.cmtat.connect(this.admin).setTokenId('NEW_ISIN') - expect(await this.cmtat.tokenId()).to.equal('NEW_ISIN') - }) + await this.cmtat.connect(this.admin).setTokenId('NEW_ISIN'); + expect(await this.cmtat.tokenId()).to.equal('NEW_ISIN'); + }); it('testRejectSetTokenIdWithoutAdminRole', async function () { await expect( - this.cmtat.connect(this.address1).setTokenId('NEW_ISIN') - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).setTokenId('NEW_ISIN'), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); // ---- setDocumentEngine (Document Management) ---- it('testAllowSetDocumentEngineByDocumentRole', async function () { - await this.cmtat.connect(this.admin).setDocumentEngine(this.address1) - }) + await this.cmtat.connect(this.admin).setDocumentEngine(this.address1); + }); it('testRejectSetDocumentEngineWithoutDocumentRole', async function () { await expect( - this.cmtat.connect(this.address1).setDocumentEngine(this.address2) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).setDocumentEngine(this.address2), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); // ---- setSnapshotEngine (Snapshots) ---- it('testAllowSetSnapshotEngineBySnapshooterRole', async function () { - await this.cmtat.connect(this.admin).setSnapshotEngine(this.address1) - }) + await this.cmtat.connect(this.admin).setSnapshotEngine(this.address1); + }); it('testRejectSetSnapshotEngineWithoutSnapshooterRole', async function () { await expect( - this.cmtat.connect(this.address1).setSnapshotEngine(this.address2) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).setSnapshotEngine(this.address2), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); // ---- setCCIPAdmin ---- it('testAllowSetCCIPAdminByAdminRole', async function () { - await this.cmtat.connect(this.admin).setCCIPAdmin(this.address1) - expect(await this.cmtat.getCCIPAdmin()).to.equal(this.address1) - }) + await this.cmtat.connect(this.admin).setCCIPAdmin(this.address1); + expect(await this.cmtat.getCCIPAdmin()).to.equal(this.address1); + }); it('testRejectSetCCIPAdminWithoutAdminRole', async function () { await expect( - this.cmtat.connect(this.address1).setCCIPAdmin(this.address2) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).setCCIPAdmin(this.address2), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); // ---- crosschainMint / crosschainBurn (CROSS_CHAIN_ROLE) ---- it('testRejectCrosschainMintWithoutCrossChainRole', async function () { await expect( - this.cmtat.connect(this.address1).crosschainMint(this.address2, 100n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).crosschainMint(this.address2, 100n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testAllowCrosschainMintWithCrossChainRole', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(CROSS_CHAIN_ROLE, this.address1) - await this.cmtat.connect(this.address1).crosschainMint(this.address2, 100n) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(100n) - }) + await this.rbacPolicy.connect(this.admin).grantRole(CROSS_CHAIN_ROLE, this.address1); + await this.cmtat.connect(this.address1).crosschainMint(this.address2, 100n); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(100n); + }); it('testRejectCrosschainBurnWithoutCrossChainRole', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(CROSS_CHAIN_ROLE, this.admin) - await this.cmtat.connect(this.admin).crosschainMint(this.address1, 100n) + await this.rbacPolicy.connect(this.admin).grantRole(CROSS_CHAIN_ROLE, this.admin); + await this.cmtat.connect(this.admin).crosschainMint(this.address1, 100n); await expect( - this.cmtat.connect(this.address1).crosschainBurn(this.address1, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).crosschainBurn(this.address1, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testAllowCrosschainBurnWithCrossChainRole', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(CROSS_CHAIN_ROLE, this.admin) - await this.cmtat.connect(this.admin).crosschainMint(this.address1, 100n) - await this.cmtat.connect(this.admin).crosschainBurn(this.address1, 50n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) - }) + await this.rbacPolicy.connect(this.admin).grantRole(CROSS_CHAIN_ROLE, this.admin); + await this.cmtat.connect(this.admin).crosschainMint(this.address1, 100n); + await this.cmtat.connect(this.admin).crosschainBurn(this.address1, 50n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n); + }); // ---- burnFrom (BURNER_FROM_ROLE) ---- it('testRejectBurnFromWithoutBurnerFromRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); await expect( - this.cmtat.connect(this.address1).burnFrom(this.address1, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).burnFrom(this.address1, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testAllowBurnFromWithBurnerFromRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - await this.cmtat.connect(this.address1).approve(this.admin, 50n) - await this.rbacPolicy.connect(this.admin).grantRole(BURNER_FROM_ROLE, this.admin) - await this.cmtat.connect(this.admin).burnFrom(this.address1, 50n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + await this.cmtat.connect(this.address1).approve(this.admin, 50n); + await this.rbacPolicy.connect(this.admin).grantRole(BURNER_FROM_ROLE, this.admin); + await this.cmtat.connect(this.admin).burnFrom(this.address1, 50n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n); + }); // ---- burn(uint256) self-burn (BURNER_SELF_ROLE) ---- it('testRejectSelfBurnWithoutBurnerSelfRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); await expect( - this.cmtat.connect(this.address1)['burn(uint256)'](50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1)['burn(uint256)'](50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testAllowSelfBurnWithBurnerSelfRole', async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - await this.rbacPolicy.connect(this.admin).grantRole(BURNER_SELF_ROLE, this.address1) - await this.cmtat.connect(this.address1)['burn(uint256)'](50n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) - }) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + await this.rbacPolicy.connect(this.admin).grantRole(BURNER_SELF_ROLE, this.address1); + await this.cmtat.connect(this.address1)['burn(uint256)'](50n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n); + }); + }); } -module.exports = RBACPolicyCommon +module.exports = RBACPolicyCommon; diff --git a/test/common/cmtat/BurnModuleCommon.js b/test/common/cmtat/BurnModuleCommon.js index d01e78f..fb86c93 100644 --- a/test/common/cmtat/BurnModuleCommon.js +++ b/test/common/cmtat/BurnModuleCommon.js @@ -1,42 +1,46 @@ -const { expect } = require('chai') +const { expect } = require('chai'); -function BurnModuleCommon () { +function BurnModuleCommon() { context('ERC20 Burn Module', function () { beforeEach(async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + }); it('testCanBurnByAdmin', async function () { - this.logs = await this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 50n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) - await expect(this.logs).to.emit(this.cmtat, 'Transfer').withArgs(this.address1, ethers.ZeroAddress, 50n) - }) + this.logs = await this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 50n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n); + await expect(this.logs) + .to.emit(this.cmtat, 'Transfer') + .withArgs(this.address1, ethers.ZeroAddress, 50n); + }); it('testCannotBurnByNonBurner', async function () { await expect( - this.cmtat.connect(this.address1)['burn(address,uint256)'](this.address1, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1)['burn(address,uint256)'](this.address1, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testCannotBurnMoreThanBalance', async function () { await expect( - this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 200n) - ).to.be.revertedWithCustomError(this.cmtat, 'ERC20InsufficientBalance') - }) + this.cmtat.connect(this.admin)['burn(address,uint256)'](this.address1, 200n), + ).to.be.revertedWithCustomError(this.cmtat, 'ERC20InsufficientBalance'); + }); it('testBatchBurn', async function () { - await this.cmtat.connect(this.admin).mint(this.address2, 200n) - await this.cmtat.connect(this.admin).batchBurn([this.address1, this.address2], [30n, 50n]) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(70n) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(150n) - }) + await this.cmtat.connect(this.admin).mint(this.address2, 200n); + await this.cmtat.connect(this.admin).batchBurn([this.address1, this.address2], [30n, 50n]); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(70n); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(150n); + }); it('testBurnAndMint', async function () { - await this.cmtat.connect(this.admin).burnAndMint(this.address1, this.address2, 30n, 50n, '0x') - expect(await this.cmtat.balanceOf(this.address1)).to.equal(70n) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) - }) - }) + await this.cmtat + .connect(this.admin) + .burnAndMint(this.address1, this.address2, 30n, 50n, '0x'); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(70n); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n); + }); + }); } -module.exports = BurnModuleCommon +module.exports = BurnModuleCommon; diff --git a/test/common/cmtat/CMTATModuleCommon.js b/test/common/cmtat/CMTATModuleCommon.js index 4ed4cd2..f97290b 100644 --- a/test/common/cmtat/CMTATModuleCommon.js +++ b/test/common/cmtat/CMTATModuleCommon.js @@ -1,17 +1,17 @@ -const ERC20BaseCommon = require('./ERC20BaseCommon') -const MintModuleCommon = require('./MintModuleCommon') -const BurnModuleCommon = require('./BurnModuleCommon') -const ERC20EnforcementCommon = require('./ERC20EnforcementCommon') -const DocumentModuleCommon = require('./DocumentModuleCommon') -const SnapshotModuleCommon = require('./SnapshotModuleCommon') +const ERC20BaseCommon = require('./ERC20BaseCommon'); +const MintModuleCommon = require('./MintModuleCommon'); +const BurnModuleCommon = require('./BurnModuleCommon'); +const ERC20EnforcementCommon = require('./ERC20EnforcementCommon'); +const DocumentModuleCommon = require('./DocumentModuleCommon'); +const SnapshotModuleCommon = require('./SnapshotModuleCommon'); // Snapshot scheduling & global modules from CMTAT -const SnapshotModuleCommonScheduling = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling') -const SnapshotModuleCommonRescheduling = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling') -const SnapshotModuleCommonUnschedule = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule') -const SnapshotModuleCommonGetNextSnapshot = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot') -const SnapshotModuleMultiplePlannedTest = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest') -const SnapshotModuleOnePlannedSnapshotTest = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest') -const SnapshotModuleZeroPlannedSnapshotTest = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot') +const SnapshotModuleCommonScheduling = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling'); +const SnapshotModuleCommonRescheduling = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling'); +const SnapshotModuleCommonUnschedule = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule'); +const SnapshotModuleCommonGetNextSnapshot = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot'); +const SnapshotModuleMultiplePlannedTest = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest'); +const SnapshotModuleOnePlannedSnapshotTest = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest'); +const SnapshotModuleZeroPlannedSnapshotTest = require('../../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot'); /** * Aggregates all CMTAT module tests for standard (PolicyEngine-based) contracts. @@ -23,22 +23,22 @@ const SnapshotModuleZeroPlannedSnapshotTest = require('../../../submodules/CMTAT * this.policyEngine, this.rbacPolicy, this.rbacPolicyAddress, this.cmtatAddress * this.mintSelector, this.burnSelector */ -function CMTATModuleCommon () { - ERC20BaseCommon() - MintModuleCommon() - BurnModuleCommon() - ERC20EnforcementCommon() - DocumentModuleCommon() - SnapshotModuleCommon() +function CMTATModuleCommon() { + ERC20BaseCommon(); + MintModuleCommon(); + BurnModuleCommon(); + ERC20EnforcementCommon(); + DocumentModuleCommon(); + SnapshotModuleCommon(); // Snapshot scheduling & global (from CMTAT) - SnapshotModuleCommonScheduling() - SnapshotModuleCommonRescheduling() - SnapshotModuleCommonUnschedule() - SnapshotModuleCommonGetNextSnapshot() - SnapshotModuleMultiplePlannedTest() - SnapshotModuleOnePlannedSnapshotTest() - SnapshotModuleZeroPlannedSnapshotTest() + SnapshotModuleCommonScheduling(); + SnapshotModuleCommonRescheduling(); + SnapshotModuleCommonUnschedule(); + SnapshotModuleCommonGetNextSnapshot(); + SnapshotModuleMultiplePlannedTest(); + SnapshotModuleOnePlannedSnapshotTest(); + SnapshotModuleZeroPlannedSnapshotTest(); } -module.exports = CMTATModuleCommon +module.exports = CMTATModuleCommon; diff --git a/test/common/cmtat/DocumentModuleCommon.js b/test/common/cmtat/DocumentModuleCommon.js index 9561421..bbafbbb 100644 --- a/test/common/cmtat/DocumentModuleCommon.js +++ b/test/common/cmtat/DocumentModuleCommon.js @@ -1,131 +1,122 @@ -const { expect } = require('chai') -const { deployCCTStandalone } = require('../../deploymentUtils') +const { expect } = require('chai'); +const { deployCCTStandalone } = require('../../deploymentUtils'); -const ZERO_ADDRESS = ethers.ZeroAddress +const ZERO_ADDRESS = ethers.ZeroAddress; -function DocumentModuleCommon () { +function DocumentModuleCommon() { context('Document Engine Module', function () { beforeEach(async function () { - this.documentEngineMock = await ethers.deployContract('DocumentEngineMock') + this.documentEngineMock = await ethers.deployContract('DocumentEngineMock'); if ((await this.cmtat.documentEngine()) === ZERO_ADDRESS) { - await this.cmtat - .connect(this.admin) - .setDocumentEngine(this.documentEngineMock.target) + await this.cmtat.connect(this.admin).setDocumentEngine(this.documentEngineMock.target); } - }) + }); it('testCanSetAndGetADocument', async function () { - const name = ethers.encodeBytes32String('doc1') - const uri = 'https://github.com/CMTA/CMTAT' - const documentHash = ethers.encodeBytes32String('hash1') + const name = ethers.encodeBytes32String('doc1'); + const uri = 'https://github.com/CMTA/CMTAT'; + const documentHash = ethers.encodeBytes32String('hash1'); - await this.documentEngineMock.setDocument({ name, uri, documentHash }) + await this.documentEngineMock.setDocument({ name, uri, documentHash }); - const doc = await this.cmtat.getDocument(name) - expect(doc.uri).to.equal(uri) - expect(doc.documentHash).to.equal(documentHash) - expect(doc.lastModified).to.be.gt(0) - }) + const doc = await this.cmtat.getDocument(name); + expect(doc.uri).to.equal(uri); + expect(doc.documentHash).to.equal(documentHash); + expect(doc.lastModified).to.be.gt(0); + }); it('testCanUpdateADocument', async function () { - const name = ethers.encodeBytes32String('doc1') - const uri1 = 'https://github.com/CMTA/CMTAT' - const documentHash1 = ethers.encodeBytes32String('hash1') + const name = ethers.encodeBytes32String('doc1'); + const uri1 = 'https://github.com/CMTA/CMTAT'; + const documentHash1 = ethers.encodeBytes32String('hash1'); - const uri2 = 'https://github.com/CMTA/CMTAT/V2' - const documentHash2 = ethers.encodeBytes32String('hash2') + const uri2 = 'https://github.com/CMTA/CMTAT/V2'; + const documentHash2 = ethers.encodeBytes32String('hash2'); - await this.documentEngineMock.setDocument([name, uri1, documentHash1]) - await this.documentEngineMock.setDocument([name, uri2, documentHash2]) + await this.documentEngineMock.setDocument([name, uri1, documentHash1]); + await this.documentEngineMock.setDocument([name, uri2, documentHash2]); - const doc = await this.cmtat.getDocument(name) - expect(doc.uri).to.equal(uri2) - expect(doc.documentHash).to.equal(documentHash2) - expect(doc.lastModified).to.be.gt(0) - }) + const doc = await this.cmtat.getDocument(name); + expect(doc.uri).to.equal(uri2); + expect(doc.documentHash).to.equal(documentHash2); + expect(doc.lastModified).to.be.gt(0); + }); it('testCanGetNullValueIfNoDocument', async function () { - const name = ethers.encodeBytes32String('nonexistent') - const doc = await this.cmtat.getDocument(name) - expect(doc.uri).to.equal('') - expect(doc.documentHash).to.equal(ethers.encodeBytes32String('')) - expect(doc.lastModified).to.equal(0) - }) + const name = ethers.encodeBytes32String('nonexistent'); + const doc = await this.cmtat.getDocument(name); + expect(doc.uri).to.equal(''); + expect(doc.documentHash).to.equal(ethers.encodeBytes32String('')); + expect(doc.lastModified).to.equal(0); + }); it('testCanRemoveADocument', async function () { - const name = ethers.encodeBytes32String('doc1') - const uri = 'https://github.com/CMTA/CMTAT' - const documentHash = ethers.encodeBytes32String('hash1') + const name = ethers.encodeBytes32String('doc1'); + const uri = 'https://github.com/CMTA/CMTAT'; + const documentHash = ethers.encodeBytes32String('hash1'); - await this.documentEngineMock.setDocument([name, uri, documentHash]) - await this.documentEngineMock.removeDocument(name) + await this.documentEngineMock.setDocument([name, uri, documentHash]); + await this.documentEngineMock.removeDocument(name); - const doc = await this.cmtat.getDocument(name) - expect(doc.uri).to.equal('') - expect(doc.documentHash).to.equal(ethers.encodeBytes32String('')) - expect(doc.lastModified).to.equal(0) - }) + const doc = await this.cmtat.getDocument(name); + expect(doc.uri).to.equal(''); + expect(doc.documentHash).to.equal(ethers.encodeBytes32String('')); + expect(doc.lastModified).to.equal(0); + }); it('testCanReturnAllDocumentNames', async function () { - const name1 = ethers.encodeBytes32String('doc1') - const uri1 = 'https://github.com/CMTA/CMTAT' - const documentHash1 = ethers.encodeBytes32String('hash1') + const name1 = ethers.encodeBytes32String('doc1'); + const uri1 = 'https://github.com/CMTA/CMTAT'; + const documentHash1 = ethers.encodeBytes32String('hash1'); - const name2 = ethers.encodeBytes32String('doc2') - const uri2 = 'https://github.com/CMTA/CMTAT/V2' - const documentHash2 = ethers.encodeBytes32String('hash2') + const name2 = ethers.encodeBytes32String('doc2'); + const uri2 = 'https://github.com/CMTA/CMTAT/V2'; + const documentHash2 = ethers.encodeBytes32String('hash2'); - await this.documentEngineMock.setDocument([name1, uri1, documentHash1]) - await this.documentEngineMock.setDocument([name2, uri2, documentHash2]) + await this.documentEngineMock.setDocument([name1, uri1, documentHash1]); + await this.documentEngineMock.setDocument([name2, uri2, documentHash2]); - const documentNames = await this.cmtat.getAllDocuments() - expect(documentNames.length).to.equal(2) - expect(documentNames).to.include(name1) - expect(documentNames).to.include(name2) - }) + const documentNames = await this.cmtat.getAllDocuments(); + expect(documentNames.length).to.equal(2); + expect(documentNames).to.include(name1); + expect(documentNames).to.include(name2); + }); it('testCanSetDocumentEngine', async function () { - const newDocEngineMock = await ethers.deployContract('DocumentEngineMock') - this.logs = await this.cmtat - .connect(this.admin) - .setDocumentEngine(newDocEngineMock.target) + const newDocEngineMock = await ethers.deployContract('DocumentEngineMock'); + this.logs = await this.cmtat.connect(this.admin).setDocumentEngine(newDocEngineMock.target); await expect(this.logs) .to.emit(this.cmtat, 'DocumentEngine') - .withArgs(newDocEngineMock.target) - expect(await this.cmtat.documentEngine()).to.equal(newDocEngineMock.target) - }) + .withArgs(newDocEngineMock.target); + expect(await this.cmtat.documentEngine()).to.equal(newDocEngineMock.target); + }); it('testCannotSetDocumentEngineWithSameValue', async function () { await expect( - this.cmtat - .connect(this.admin) - .setDocumentEngine(await this.cmtat.documentEngine()) - ).to.be.revertedWithCustomError( - this.cmtat, - 'CMTAT_DocumentEngineModule_SameValue' - ) - }) + this.cmtat.connect(this.admin).setDocumentEngine(await this.cmtat.documentEngine()), + ).to.be.revertedWithCustomError(this.cmtat, 'CMTAT_DocumentEngineModule_SameValue'); + }); it('testGetEmptyDocumentsIfNoDocumentEngine', async function () { // Deploy a fresh token with no document engine - const policyEngineAddress = await this.policyEngine.getAddress() + const policyEngineAddress = await this.policyEngine.getAddress(); const freshCmtat = await deployCCTStandalone( ethers.ZeroAddress, this.admin.address, - policyEngineAddress - ) - - const name = ethers.encodeBytes32String('doc1') - const doc = await freshCmtat.getDocument(name) - expect(doc.uri).to.equal('') - expect(doc.documentHash).to.equal(ethers.encodeBytes32String('')) - expect(doc.lastModified).to.equal(0) - - const documentNames = await freshCmtat.getAllDocuments() - expect(documentNames.length).to.equal(0) - }) - }) + policyEngineAddress, + ); + + const name = ethers.encodeBytes32String('doc1'); + const doc = await freshCmtat.getDocument(name); + expect(doc.uri).to.equal(''); + expect(doc.documentHash).to.equal(ethers.encodeBytes32String('')); + expect(doc.lastModified).to.equal(0); + + const documentNames = await freshCmtat.getAllDocuments(); + expect(documentNames.length).to.equal(0); + }); + }); } -module.exports = DocumentModuleCommon +module.exports = DocumentModuleCommon; diff --git a/test/common/cmtat/ERC20BaseCommon.js b/test/common/cmtat/ERC20BaseCommon.js index 743811b..b9877db 100644 --- a/test/common/cmtat/ERC20BaseCommon.js +++ b/test/common/cmtat/ERC20BaseCommon.js @@ -1,82 +1,90 @@ -const { expect } = require('chai') +const { expect } = require('chai'); -function ERC20BaseCommon () { +function ERC20BaseCommon() { context('ERC20 Base Module', function () { context('Token structure', function () { it('testHasTheDefinedName', async function () { - expect(await this.cmtat.name()).to.equal('CMTA Token') - }) + expect(await this.cmtat.name()).to.equal('CMTA Token'); + }); it('testHasTheDefinedSymbol', async function () { - expect(await this.cmtat.symbol()).to.equal('CMTAT') - }) + expect(await this.cmtat.symbol()).to.equal('CMTAT'); + }); it('testDecimalsEqual0', async function () { - expect(await this.cmtat.decimals()).to.equal(0) - }) - }) + expect(await this.cmtat.decimals()).to.equal(0); + }); + }); context('Balance & Transfer', function () { - const TOKEN_AMOUNTS = [31n, 32n, 33n] - const TOKEN_INITIAL_SUPPLY = TOKEN_AMOUNTS.reduce((a, b) => a + b) + const TOKEN_AMOUNTS = [31n, 32n, 33n]; + const TOKEN_INITIAL_SUPPLY = TOKEN_AMOUNTS.reduce((a, b) => a + b); beforeEach(async function () { - await this.cmtat.connect(this.admin).mint(this.address1, TOKEN_AMOUNTS[0]) - await this.cmtat.connect(this.admin).mint(this.address2, TOKEN_AMOUNTS[1]) - await this.cmtat.connect(this.admin).mint(this.address3, TOKEN_AMOUNTS[2]) - }) + await this.cmtat.connect(this.admin).mint(this.address1, TOKEN_AMOUNTS[0]); + await this.cmtat.connect(this.admin).mint(this.address2, TOKEN_AMOUNTS[1]); + await this.cmtat.connect(this.admin).mint(this.address3, TOKEN_AMOUNTS[2]); + }); it('testHasTheCorrectBalanceBatch', async function () { - const ADDRESSES = [this.address1, this.address2, this.address3] - const result = await this.cmtat.batchBalanceOf(ADDRESSES) - expect(result[0][0]).to.equal(TOKEN_AMOUNTS[0]) - expect(result[0][1]).to.equal(TOKEN_AMOUNTS[1]) - expect(result[1]).to.equal(TOKEN_INITIAL_SUPPLY) - }) + const ADDRESSES = [this.address1, this.address2, this.address3]; + const result = await this.cmtat.batchBalanceOf(ADDRESSES); + expect(result[0][0]).to.equal(TOKEN_AMOUNTS[0]); + expect(result[0][1]).to.equal(TOKEN_AMOUNTS[1]); + expect(result[1]).to.equal(TOKEN_INITIAL_SUPPLY); + }); it('testTransferFromOneAccountToAnother', async function () { - const AMOUNT = 11n - this.logs = await this.cmtat.connect(this.address1).transfer(this.address2, AMOUNT) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(TOKEN_AMOUNTS[0] - AMOUNT) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(TOKEN_AMOUNTS[1] + AMOUNT) - await expect(this.logs).to.emit(this.cmtat, 'Transfer').withArgs(this.address1, this.address2, AMOUNT) - }) + const AMOUNT = 11n; + this.logs = await this.cmtat.connect(this.address1).transfer(this.address2, AMOUNT); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(TOKEN_AMOUNTS[0] - AMOUNT); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(TOKEN_AMOUNTS[1] + AMOUNT); + await expect(this.logs) + .to.emit(this.cmtat, 'Transfer') + .withArgs(this.address1, this.address2, AMOUNT); + }); it('testCannotTransferMoreTokensThanOwn', async function () { - const BALANCE = await this.cmtat.balanceOf(this.address1) - await expect( - this.cmtat.connect(this.address1).transfer(this.address2, 50n) - ).to.be.revertedWithCustomError(this.cmtat, 'ERC20InsufficientBalance') - .withArgs(this.address1.address, BALANCE, 50n) - }) + const BALANCE = await this.cmtat.balanceOf(this.address1); + await expect(this.cmtat.connect(this.address1).transfer(this.address2, 50n)) + .to.be.revertedWithCustomError(this.cmtat, 'ERC20InsufficientBalance') + .withArgs(this.address1.address, BALANCE, 50n); + }); it('testTransferFromWithAllowance', async function () { - await this.cmtat.connect(this.address1).approve(this.address3, 20n) - const AMOUNT = 11n - this.logs = await this.cmtat.connect(this.address3).transferFrom(this.address1, this.address2, AMOUNT) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(TOKEN_AMOUNTS[0] - AMOUNT) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(TOKEN_AMOUNTS[1] + AMOUNT) - await expect(this.logs).to.emit(this.cmtat, 'Transfer').withArgs(this.address1, this.address2, AMOUNT) - }) + await this.cmtat.connect(this.address1).approve(this.address3, 20n); + const AMOUNT = 11n; + this.logs = await this.cmtat + .connect(this.address3) + .transferFrom(this.address1, this.address2, AMOUNT); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(TOKEN_AMOUNTS[0] - AMOUNT); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(TOKEN_AMOUNTS[1] + AMOUNT); + await expect(this.logs) + .to.emit(this.cmtat, 'Transfer') + .withArgs(this.address1, this.address2, AMOUNT); + }); it('testCannotTransferFromWithInsufficientAllowance', async function () { - await this.cmtat.connect(this.address1).approve(this.address3, 20n) + await this.cmtat.connect(this.address1).approve(this.address3, 20n); await expect( - this.cmtat.connect(this.address3).transferFrom(this.address1, this.address2, 31n) - ).to.be.revertedWithCustomError(this.cmtat, 'ERC20InsufficientAllowance') - .withArgs(this.address3.address, 20n, 31n) - }) - }) + this.cmtat.connect(this.address3).transferFrom(this.address1, this.address2, 31n), + ) + .to.be.revertedWithCustomError(this.cmtat, 'ERC20InsufficientAllowance') + .withArgs(this.address3.address, 20n, 31n); + }); + }); context('Allowance', function () { it('testApproveAllowance', async function () { - expect(await this.cmtat.allowance(this.address1, this.address3)).to.equal(0n) - this.logs = await this.cmtat.connect(this.address1).approve(this.address3, 20n) - expect(await this.cmtat.allowance(this.address1, this.address3)).to.equal(20n) - await expect(this.logs).to.emit(this.cmtat, 'Approval').withArgs(this.address1, this.address3, 20n) - }) - }) - }) + expect(await this.cmtat.allowance(this.address1, this.address3)).to.equal(0n); + this.logs = await this.cmtat.connect(this.address1).approve(this.address3, 20n); + expect(await this.cmtat.allowance(this.address1, this.address3)).to.equal(20n); + await expect(this.logs) + .to.emit(this.cmtat, 'Approval') + .withArgs(this.address1, this.address3, 20n); + }); + }); + }); } -module.exports = ERC20BaseCommon +module.exports = ERC20BaseCommon; diff --git a/test/common/cmtat/ERC20EnforcementCommon.js b/test/common/cmtat/ERC20EnforcementCommon.js index a766cdd..e754637 100644 --- a/test/common/cmtat/ERC20EnforcementCommon.js +++ b/test/common/cmtat/ERC20EnforcementCommon.js @@ -1,60 +1,78 @@ -const { expect } = require('chai') +const { expect } = require('chai'); -function ERC20EnforcementCommon () { +function ERC20EnforcementCommon() { context('ERC20 Enforcement Module', function () { beforeEach(async function () { - await this.cmtat.connect(this.admin).mint(this.address1, 100n) - }) + await this.cmtat.connect(this.admin).mint(this.address1, 100n); + }); it('testFreezePartialTokens', async function () { - await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 50n) - expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(50n) - }) + await this.cmtat + .connect(this.admin) + ['freezePartialTokens(address,uint256)'](this.address1, 50n); + expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(50n); + }); it('testCannotFreezeWithoutRole', async function () { await expect( - this.cmtat.connect(this.address1)['freezePartialTokens(address,uint256)'](this.address1, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat + .connect(this.address1) + ['freezePartialTokens(address,uint256)'](this.address1, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testUnfreezePartialTokens', async function () { - await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 50n) - await this.cmtat.connect(this.admin)['unfreezePartialTokens(address,uint256)'](this.address1, 30n) - expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(20n) - }) + await this.cmtat + .connect(this.admin) + ['freezePartialTokens(address,uint256)'](this.address1, 50n); + await this.cmtat + .connect(this.admin) + ['unfreezePartialTokens(address,uint256)'](this.address1, 30n); + expect(await this.cmtat.getFrozenTokens(this.address1)).to.equal(20n); + }); it('testCannotTransferFrozenTokens', async function () { - await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 60n) + await this.cmtat + .connect(this.admin) + ['freezePartialTokens(address,uint256)'](this.address1, 60n); // Active balance = 100 - 60 = 40, so transferring 50 should fail await expect( - this.cmtat.connect(this.address1).transfer(this.address2, 50n) - ).to.be.revertedWithCustomError(this.cmtat, 'ERC7943InsufficientUnfrozenBalance') - }) + this.cmtat.connect(this.address1).transfer(this.address2, 50n), + ).to.be.revertedWithCustomError(this.cmtat, 'ERC7943InsufficientUnfrozenBalance'); + }); it('testCanTransferActiveBalance', async function () { - await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 60n) + await this.cmtat + .connect(this.admin) + ['freezePartialTokens(address,uint256)'](this.address1, 60n); // Active balance = 40, transferring 40 should work - await this.cmtat.connect(this.address1).transfer(this.address2, 40n) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(40n) - }) + await this.cmtat.connect(this.address1).transfer(this.address2, 40n); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(40n); + }); it('testForcedTransfer', async function () { - await this.cmtat.connect(this.admin)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) - }) + await this.cmtat + .connect(this.admin) + ['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(50n); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n); + }); it('testCannotForcedTransferWithoutRole', async function () { await expect( - this.cmtat.connect(this.address1)['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat + .connect(this.address1) + ['forcedTransfer(address,address,uint256)'](this.address1, this.address2, 50n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testGetActiveBalance', async function () { - await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1, 30n) - expect(await this.cmtat.getActiveBalanceOf(this.address1)).to.equal(70n) - }) - }) + await this.cmtat + .connect(this.admin) + ['freezePartialTokens(address,uint256)'](this.address1, 30n); + expect(await this.cmtat.getActiveBalanceOf(this.address1)).to.equal(70n); + }); + }); } -module.exports = ERC20EnforcementCommon +module.exports = ERC20EnforcementCommon; diff --git a/test/common/cmtat/MintModuleCommon.js b/test/common/cmtat/MintModuleCommon.js index 1b18718..439c3a4 100644 --- a/test/common/cmtat/MintModuleCommon.js +++ b/test/common/cmtat/MintModuleCommon.js @@ -1,47 +1,51 @@ -const { expect } = require('chai') -const { MINTER_ROLE } = require('../../deploymentUtils') +const { expect } = require('chai'); +const { MINTER_ROLE } = require('../../deploymentUtils'); -const ZERO_ADDRESS = ethers.ZeroAddress +const ZERO_ADDRESS = ethers.ZeroAddress; -function MintModuleCommon () { +function MintModuleCommon() { context('ERC20 Mint Module', function () { it('testCanBeMintedByAdmin', async function () { - expect(await this.cmtat.balanceOf(this.address1)).to.equal(0n) - this.logs = await this.cmtat.connect(this.admin).mint(this.address1, 20n) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(20n) - expect(await this.cmtat.totalSupply()).to.equal(20n) - await expect(this.logs).to.emit(this.cmtat, 'Transfer').withArgs(ZERO_ADDRESS, this.address1, 20n) - await expect(this.logs).to.emit(this.cmtat, 'Mint').withArgs(this.admin, this.address1, 20n, '0x') - }) + expect(await this.cmtat.balanceOf(this.address1)).to.equal(0n); + this.logs = await this.cmtat.connect(this.admin).mint(this.address1, 20n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(20n); + expect(await this.cmtat.totalSupply()).to.equal(20n); + await expect(this.logs) + .to.emit(this.cmtat, 'Transfer') + .withArgs(ZERO_ADDRESS, this.address1, 20n); + await expect(this.logs) + .to.emit(this.cmtat, 'Mint') + .withArgs(this.admin, this.address1, 20n, '0x'); + }); it('testCanMintByNewMinter', async function () { - await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1) - await this.cmtat.connect(this.address1).mint(this.address2, 50n) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n) - }) + await this.rbacPolicy.connect(this.admin).grantRole(MINTER_ROLE, this.address1); + await this.cmtat.connect(this.address1).mint(this.address2, 50n); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(50n); + }); it('testCannotMintByNonMinter', async function () { await expect( - this.cmtat.connect(this.address1).mint(this.address1, 20n) - ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected') - }) + this.cmtat.connect(this.address1).mint(this.address1, 20n), + ).to.be.revertedWithCustomError(this.policyEngine, 'PolicyRunRejected'); + }); it('testBatchMint', async function () { - const holders = [this.address1, this.address2, this.address3] - const amounts = [10n, 100n, 1000n] - await this.cmtat.connect(this.admin).batchMint(holders, amounts) - expect(await this.cmtat.balanceOf(this.address1)).to.equal(10n) - expect(await this.cmtat.balanceOf(this.address2)).to.equal(100n) - expect(await this.cmtat.balanceOf(this.address3)).to.equal(1000n) - expect(await this.cmtat.totalSupply()).to.equal(1110n) - }) + const holders = [this.address1, this.address2, this.address3]; + const amounts = [10n, 100n, 1000n]; + await this.cmtat.connect(this.admin).batchMint(holders, amounts); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(10n); + expect(await this.cmtat.balanceOf(this.address2)).to.equal(100n); + expect(await this.cmtat.balanceOf(this.address3)).to.equal(1000n); + expect(await this.cmtat.totalSupply()).to.equal(1110n); + }); it('testCannotMintToZeroAddress', async function () { await expect( - this.cmtat.connect(this.admin).mint(ZERO_ADDRESS, 20n) - ).to.be.revertedWithCustomError(this.cmtat, 'ERC20InvalidReceiver') - }) - }) + this.cmtat.connect(this.admin).mint(ZERO_ADDRESS, 20n), + ).to.be.revertedWithCustomError(this.cmtat, 'ERC20InvalidReceiver'); + }); + }); } -module.exports = MintModuleCommon +module.exports = MintModuleCommon; diff --git a/test/common/cmtat/SnapshotModuleCommon.js b/test/common/cmtat/SnapshotModuleCommon.js index bff88a5..a791f10 100644 --- a/test/common/cmtat/SnapshotModuleCommon.js +++ b/test/common/cmtat/SnapshotModuleCommon.js @@ -1,37 +1,32 @@ -const { expect } = require('chai') +const { expect } = require('chai'); -const ZERO_ADDRESS = ethers.ZeroAddress +const ZERO_ADDRESS = ethers.ZeroAddress; -function SnapshotModuleCommon () { +function SnapshotModuleCommon() { context('Snapshot Engine Module', function () { it('testCanSetSnapshotEngine', async function () { - const snapshotEngineMock = await ethers.deployContract( - 'SnapshotEngineMock', - [ZERO_ADDRESS, this.admin] - ) - this.logs = await this.cmtat - .connect(this.admin) - .setSnapshotEngine(snapshotEngineMock.target) + const snapshotEngineMock = await ethers.deployContract('SnapshotEngineMock', [ + ZERO_ADDRESS, + this.admin, + ]); + this.logs = await this.cmtat.connect(this.admin).setSnapshotEngine(snapshotEngineMock.target); await expect(this.logs) .to.emit(this.cmtat, 'SnapshotEngine') - .withArgs(snapshotEngineMock.target) - expect(await this.cmtat.snapshotEngine()).to.equal(snapshotEngineMock.target) - }) + .withArgs(snapshotEngineMock.target); + expect(await this.cmtat.snapshotEngine()).to.equal(snapshotEngineMock.target); + }); it('testCannotSetSnapshotEngineWithSameValue', async function () { - const snapshotEngineCurrent = await this.cmtat.snapshotEngine() + const snapshotEngineCurrent = await this.cmtat.snapshotEngine(); await expect( - this.cmtat.connect(this.admin).setSnapshotEngine(snapshotEngineCurrent) - ).to.be.revertedWithCustomError( - this.cmtat, - 'CMTAT_SnapshotModule_SameValue' - ) - }) + this.cmtat.connect(this.admin).setSnapshotEngine(snapshotEngineCurrent), + ).to.be.revertedWithCustomError(this.cmtat, 'CMTAT_SnapshotModule_SameValue'); + }); it('testSnapshotEngineIsZeroByDefault', async function () { - expect(await this.cmtat.snapshotEngine()).to.equal(ZERO_ADDRESS) - }) - }) + expect(await this.cmtat.snapshotEngine()).to.equal(ZERO_ADDRESS); + }); + }); } -module.exports = SnapshotModuleCommon +module.exports = SnapshotModuleCommon; diff --git a/test/custom/transferValidationPolicy.test.js b/test/custom/transferValidationPolicy.test.js index f7c71f1..3884b3c 100644 --- a/test/custom/transferValidationPolicy.test.js +++ b/test/custom/transferValidationPolicy.test.js @@ -1,307 +1,346 @@ -const { ethers, upgrades } = require('hardhat') -const { expect } = require('chai') -const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') +const { ethers, upgrades } = require('hardhat'); +const { expect } = require('chai'); +const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers'); const { fixture, MINTER_ROLE, DEPLOYMENT_DECIMAL, TERMS, deployPolicyEngine, - deployCCTLiteStandalone -} = require('../deploymentUtils') + deployCCTLiteStandalone, +} = require('../deploymentUtils'); // Parameter name hashes matching the ERC20TransferFromExtractor -const PARAM_SPENDER = ethers.keccak256(ethers.toUtf8Bytes('spender')) -const PARAM_FROM = ethers.keccak256(ethers.toUtf8Bytes('from')) -const PARAM_TO = ethers.keccak256(ethers.toUtf8Bytes('to')) -const PARAM_AMOUNT = ethers.keccak256(ethers.toUtf8Bytes('amount')) -const TRANSFER_PARAM_NAMES = [PARAM_SPENDER, PARAM_FROM, PARAM_TO, PARAM_AMOUNT] +const PARAM_SPENDER = ethers.keccak256(ethers.toUtf8Bytes('spender')); +const PARAM_FROM = ethers.keccak256(ethers.toUtf8Bytes('from')); +const PARAM_TO = ethers.keccak256(ethers.toUtf8Bytes('to')); +const PARAM_AMOUNT = ethers.keccak256(ethers.toUtf8Bytes('amount')); +const TRANSFER_PARAM_NAMES = [PARAM_SPENDER, PARAM_FROM, PARAM_TO, PARAM_AMOUNT]; /** * Deploy TransferValidationPolicy via upgrades.deployProxy */ -async function deployTransferValidationPolicy (policyEngineAddress, ownerAddress, ruleAddresses) { - const abiCoder = ethers.AbiCoder.defaultAbiCoder() - const configParams = ruleAddresses.length > 0 - ? abiCoder.encode(['address[]'], [ruleAddresses]) - : '0x' - const Factory = await ethers.getContractFactory('TransferValidationPolicy') +async function deployTransferValidationPolicy(policyEngineAddress, ownerAddress, ruleAddresses) { + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); + const configParams = + ruleAddresses.length > 0 ? abiCoder.encode(['address[]'], [ruleAddresses]) : '0x'; + const Factory = await ethers.getContractFactory('TransferValidationPolicy'); const policy = await upgrades.deployProxy( Factory, [policyEngineAddress, ownerAddress, configParams], - { initializer: 'initialize', unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], silenceWarnings: true } - ) - return policy + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], + silenceWarnings: true, + }, + ); + return policy; } /** * Deploy ERC20TransferFromExtractor (plain deploy, no proxy needed) */ -async function deployERC20TransferFromExtractor () { - const extractor = await ethers.deployContract('ERC20TransferFromExtractor') - return extractor +async function deployERC20TransferFromExtractor() { + const extractor = await ethers.deployContract('ERC20TransferFromExtractor'); + return extractor; } describe('TransferValidationPolicy', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(fixture)) + Object.assign(this, await loadFixture(fixture)); // Deploy PolicyEngine (defaultAllow = true so mint/burn work without extra policies) - this.policyEngine = await deployPolicyEngine(true, this.admin.address) - this.policyEngineAddress = await this.policyEngine.getAddress() + this.policyEngine = await deployPolicyEngine(true, this.admin.address); + this.policyEngineAddress = await this.policyEngine.getAddress(); // Deploy Lite Standalone token this.cmtat = await deployCCTLiteStandalone( this._.address, this.admin.address, - this.policyEngineAddress - ) - this.cmtatAddress = await this.cmtat.getAddress() + this.policyEngineAddress, + ); + this.cmtatAddress = await this.cmtat.getAddress(); // Deploy ERC20TransferFromExtractor - this.extractor = await deployERC20TransferFromExtractor() - this.extractorAddress = await this.extractor.getAddress() + this.extractor = await deployERC20TransferFromExtractor(); + this.extractorAddress = await this.extractor.getAddress(); // Get transfer/transferFrom selectors - this.transferSelector = this.cmtat.interface.getFunction('transfer(address,uint256)').selector - this.transferFromSelector = this.cmtat.interface.getFunction('transferFrom(address,address,uint256)').selector + this.transferSelector = this.cmtat.interface.getFunction('transfer(address,uint256)').selector; + this.transferFromSelector = this.cmtat.interface.getFunction( + 'transferFrom(address,address,uint256)', + ).selector; // Set extractor for transfer and transferFrom selectors on the policy engine - await this.policyEngine.connect(this.admin).setExtractor(this.transferSelector, this.extractorAddress) - await this.policyEngine.connect(this.admin).setExtractor(this.transferFromSelector, this.extractorAddress) + await this.policyEngine + .connect(this.admin) + .setExtractor(this.transferSelector, this.extractorAddress); + await this.policyEngine + .connect(this.admin) + .setExtractor(this.transferFromSelector, this.extractorAddress); // Mint tokens to admin for test transfers - await this.cmtat.connect(this.admin).mint(this.admin.address, 1000n) - }) + await this.cmtat.connect(this.admin).mint(this.admin.address, 1000n); + }); describe('MaxAmountRule', function () { beforeEach(async function () { // Deploy MaxAmountRule with max = 100 - this.maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]) - this.maxAmountRuleAddress = await this.maxAmountRule.getAddress() + this.maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]); + this.maxAmountRuleAddress = await this.maxAmountRule.getAddress(); // Deploy TransferValidationPolicy with the MaxAmountRule this.transferPolicy = await deployTransferValidationPolicy( this.policyEngineAddress, this.admin.address, - [this.maxAmountRuleAddress] - ) - this.transferPolicyAddress = await this.transferPolicy.getAddress() + [this.maxAmountRuleAddress], + ); + this.transferPolicyAddress = await this.transferPolicy.getAddress(); // Add TransferValidationPolicy to the PolicyEngine for transfer and transferFrom - await this.policyEngine.connect(this.admin).addPolicy( - this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES - ) - await this.policyEngine.connect(this.admin).addPolicy( - this.cmtatAddress, this.transferFromSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES - ) - }) + await this.policyEngine + .connect(this.admin) + .addPolicy( + this.cmtatAddress, + this.transferSelector, + this.transferPolicyAddress, + TRANSFER_PARAM_NAMES, + ); + await this.policyEngine + .connect(this.admin) + .addPolicy( + this.cmtatAddress, + this.transferFromSelector, + this.transferPolicyAddress, + TRANSFER_PARAM_NAMES, + ); + }); describe('transfer', function () { it('should allow transfer within max amount', async function () { - await expect( - this.cmtat.connect(this.admin).transfer(this.address1.address, 50n) - ).to.not.be.reverted - expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(50n) - }) + await expect(this.cmtat.connect(this.admin).transfer(this.address1.address, 50n)).to.not.be + .reverted; + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(50n); + }); it('should allow transfer at exact max amount', async function () { - await expect( - this.cmtat.connect(this.admin).transfer(this.address1.address, 100n) - ).to.not.be.reverted - expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n) - }) + await expect(this.cmtat.connect(this.admin).transfer(this.address1.address, 100n)).to.not.be + .reverted; + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n); + }); it('should reject transfer exceeding max amount', async function () { - await expect( - this.cmtat.connect(this.admin).transfer(this.address1.address, 101n) - ).to.be.reverted - }) - }) + await expect(this.cmtat.connect(this.admin).transfer(this.address1.address, 101n)).to.be + .reverted; + }); + }); describe('transferFrom', function () { beforeEach(async function () { // Admin approves address1 to spend - await this.cmtat.connect(this.admin).approve(this.address1.address, 500n) - }) + await this.cmtat.connect(this.admin).approve(this.address1.address, 500n); + }); it('should allow transferFrom within max amount', async function () { await expect( - this.cmtat.connect(this.address1).transferFrom(this.admin.address, this.address2.address, 50n) - ).to.not.be.reverted - expect(await this.cmtat.balanceOf(this.address2.address)).to.equal(50n) - }) + this.cmtat + .connect(this.address1) + .transferFrom(this.admin.address, this.address2.address, 50n), + ).to.not.be.reverted; + expect(await this.cmtat.balanceOf(this.address2.address)).to.equal(50n); + }); it('should reject transferFrom exceeding max amount', async function () { await expect( - this.cmtat.connect(this.address1).transferFrom(this.admin.address, this.address2.address, 101n) - ).to.be.reverted - }) - }) + this.cmtat + .connect(this.address1) + .transferFrom(this.admin.address, this.address2.address, 101n), + ).to.be.reverted; + }); + }); describe('canTransfer', function () { it('should return true for transfer within max amount', async function () { - expect( - await this.cmtat.canTransfer(this.admin.address, this.address1.address, 50n) - ).to.be.true - }) + expect(await this.cmtat.canTransfer(this.admin.address, this.address1.address, 50n)).to.be + .true; + }); it('should return false for transfer exceeding max amount', async function () { - expect( - await this.cmtat.canTransfer(this.admin.address, this.address1.address, 101n) - ).to.be.false - }) - }) + expect(await this.cmtat.canTransfer(this.admin.address, this.address1.address, 101n)).to.be + .false; + }); + }); describe('canTransferFrom', function () { it('should return true for transferFrom within max amount', async function () { expect( - await this.cmtat.canTransferFrom(this.address1.address, this.admin.address, this.address2.address, 50n) - ).to.be.true - }) + await this.cmtat.canTransferFrom( + this.address1.address, + this.admin.address, + this.address2.address, + 50n, + ), + ).to.be.true; + }); it('should return false for transferFrom exceeding max amount', async function () { expect( - await this.cmtat.canTransferFrom(this.address1.address, this.admin.address, this.address2.address, 101n) - ).to.be.false - }) - }) - }) + await this.cmtat.canTransferFrom( + this.address1.address, + this.admin.address, + this.address2.address, + 101n, + ), + ).to.be.false; + }); + }); + }); describe('RestrictedAddressRule', function () { beforeEach(async function () { // Deploy RestrictedAddressRule with address2 restricted initially - this.restrictedRule = await ethers.deployContract('RestrictedAddressRule', [[this.address2.address]]) - this.restrictedRuleAddress = await this.restrictedRule.getAddress() + this.restrictedRule = await ethers.deployContract('RestrictedAddressRule', [ + [this.address2.address], + ]); + this.restrictedRuleAddress = await this.restrictedRule.getAddress(); // Deploy TransferValidationPolicy with the RestrictedAddressRule this.transferPolicy = await deployTransferValidationPolicy( this.policyEngineAddress, this.admin.address, - [this.restrictedRuleAddress] - ) - this.transferPolicyAddress = await this.transferPolicy.getAddress() + [this.restrictedRuleAddress], + ); + this.transferPolicyAddress = await this.transferPolicy.getAddress(); // Add TransferValidationPolicy for transfer and transferFrom - await this.policyEngine.connect(this.admin).addPolicy( - this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES - ) - await this.policyEngine.connect(this.admin).addPolicy( - this.cmtatAddress, this.transferFromSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES - ) - }) + await this.policyEngine + .connect(this.admin) + .addPolicy( + this.cmtatAddress, + this.transferSelector, + this.transferPolicyAddress, + TRANSFER_PARAM_NAMES, + ); + await this.policyEngine + .connect(this.admin) + .addPolicy( + this.cmtatAddress, + this.transferFromSelector, + this.transferPolicyAddress, + TRANSFER_PARAM_NAMES, + ); + }); describe('transfer', function () { it('should allow transfer to unrestricted address', async function () { - await expect( - this.cmtat.connect(this.admin).transfer(this.address1.address, 50n) - ).to.not.be.reverted - expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(50n) - }) + await expect(this.cmtat.connect(this.admin).transfer(this.address1.address, 50n)).to.not.be + .reverted; + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(50n); + }); it('should reject transfer to restricted address', async function () { - await expect( - this.cmtat.connect(this.admin).transfer(this.address2.address, 50n) - ).to.be.reverted - }) + await expect(this.cmtat.connect(this.admin).transfer(this.address2.address, 50n)).to.be + .reverted; + }); it('should reject transfer from restricted address', async function () { // First give address2 some tokens via unrestricted path (remove restriction temporarily) - await this.restrictedRule.setRestricted(this.address2.address, false) - await this.cmtat.connect(this.admin).transfer(this.address2.address, 100n) + await this.restrictedRule.setRestricted(this.address2.address, false); + await this.cmtat.connect(this.admin).transfer(this.address2.address, 100n); // Re-restrict - await this.restrictedRule.setRestricted(this.address2.address, true) + await this.restrictedRule.setRestricted(this.address2.address, true); - await expect( - this.cmtat.connect(this.address2).transfer(this.address1.address, 50n) - ).to.be.reverted - }) + await expect(this.cmtat.connect(this.address2).transfer(this.address1.address, 50n)).to.be + .reverted; + }); it('should allow transfer after removing restriction', async function () { - await this.restrictedRule.setRestricted(this.address2.address, false) - await expect( - this.cmtat.connect(this.admin).transfer(this.address2.address, 50n) - ).to.not.be.reverted - expect(await this.cmtat.balanceOf(this.address2.address)).to.equal(50n) - }) - }) + await this.restrictedRule.setRestricted(this.address2.address, false); + await expect(this.cmtat.connect(this.admin).transfer(this.address2.address, 50n)).to.not.be + .reverted; + expect(await this.cmtat.balanceOf(this.address2.address)).to.equal(50n); + }); + }); describe('canTransfer', function () { it('should return true for unrestricted addresses', async function () { - expect( - await this.cmtat.canTransfer(this.admin.address, this.address1.address, 50n) - ).to.be.true - }) + expect(await this.cmtat.canTransfer(this.admin.address, this.address1.address, 50n)).to.be + .true; + }); it('should return false when recipient is restricted', async function () { - expect( - await this.cmtat.canTransfer(this.admin.address, this.address2.address, 50n) - ).to.be.false - }) + expect(await this.cmtat.canTransfer(this.admin.address, this.address2.address, 50n)).to.be + .false; + }); it('should return false when sender is restricted', async function () { - expect( - await this.cmtat.canTransfer(this.address2.address, this.address1.address, 50n) - ).to.be.false - }) - }) - }) + expect(await this.cmtat.canTransfer(this.address2.address, this.address1.address, 50n)).to + .be.false; + }); + }); + }); describe('Multiple rules (MaxAmount + RestrictedAddress)', function () { beforeEach(async function () { - this.maxAmountRule = await ethers.deployContract('MaxAmountRule', [200n]) - this.restrictedRule = await ethers.deployContract('RestrictedAddressRule', [[this.address3.address]]) + this.maxAmountRule = await ethers.deployContract('MaxAmountRule', [200n]); + this.restrictedRule = await ethers.deployContract('RestrictedAddressRule', [ + [this.address3.address], + ]); this.transferPolicy = await deployTransferValidationPolicy( this.policyEngineAddress, this.admin.address, - [await this.maxAmountRule.getAddress(), await this.restrictedRule.getAddress()] - ) - this.transferPolicyAddress = await this.transferPolicy.getAddress() - - await this.policyEngine.connect(this.admin).addPolicy( - this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES - ) - await this.policyEngine.connect(this.admin).addPolicy( - this.cmtatAddress, this.transferFromSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES - ) - }) + [await this.maxAmountRule.getAddress(), await this.restrictedRule.getAddress()], + ); + this.transferPolicyAddress = await this.transferPolicy.getAddress(); + + await this.policyEngine + .connect(this.admin) + .addPolicy( + this.cmtatAddress, + this.transferSelector, + this.transferPolicyAddress, + TRANSFER_PARAM_NAMES, + ); + await this.policyEngine + .connect(this.admin) + .addPolicy( + this.cmtatAddress, + this.transferFromSelector, + this.transferPolicyAddress, + TRANSFER_PARAM_NAMES, + ); + }); it('should allow valid transfer (within amount, unrestricted)', async function () { - await expect( - this.cmtat.connect(this.admin).transfer(this.address1.address, 100n) - ).to.not.be.reverted - }) + await expect(this.cmtat.connect(this.admin).transfer(this.address1.address, 100n)).to.not.be + .reverted; + }); it('should reject transfer exceeding max amount even to unrestricted address', async function () { - await expect( - this.cmtat.connect(this.admin).transfer(this.address1.address, 201n) - ).to.be.reverted - }) + await expect(this.cmtat.connect(this.admin).transfer(this.address1.address, 201n)).to.be + .reverted; + }); it('should reject transfer to restricted address even within max amount', async function () { - await expect( - this.cmtat.connect(this.admin).transfer(this.address3.address, 50n) - ).to.be.reverted - }) + await expect(this.cmtat.connect(this.admin).transfer(this.address3.address, 50n)).to.be + .reverted; + }); it('canTransfer should return false when either rule rejects', async function () { // Exceeds max - expect( - await this.cmtat.canTransfer(this.admin.address, this.address1.address, 201n) - ).to.be.false + expect(await this.cmtat.canTransfer(this.admin.address, this.address1.address, 201n)).to.be + .false; // Restricted recipient - expect( - await this.cmtat.canTransfer(this.admin.address, this.address3.address, 50n) - ).to.be.false - }) + expect(await this.cmtat.canTransfer(this.admin.address, this.address3.address, 50n)).to.be + .false; + }); it('canTransfer should return true when both rules pass', async function () { - expect( - await this.cmtat.canTransfer(this.admin.address, this.address1.address, 100n) - ).to.be.true - }) - }) + expect(await this.cmtat.canTransfer(this.admin.address, this.address1.address, 100n)).to.be + .true; + }); + }); describe('Policy management', function () { it('should work with no rules configured', async function () { @@ -309,149 +348,155 @@ describe('TransferValidationPolicy', function () { this.transferPolicy = await deployTransferValidationPolicy( this.policyEngineAddress, this.admin.address, - [] - ) - this.transferPolicyAddress = await this.transferPolicy.getAddress() - - await this.policyEngine.connect(this.admin).addPolicy( - this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES - ) - - await expect( - this.cmtat.connect(this.admin).transfer(this.address1.address, 500n) - ).to.not.be.reverted - }) + [], + ); + this.transferPolicyAddress = await this.transferPolicy.getAddress(); + + await this.policyEngine + .connect(this.admin) + .addPolicy( + this.cmtatAddress, + this.transferSelector, + this.transferPolicyAddress, + TRANSFER_PARAM_NAMES, + ); + + await expect(this.cmtat.connect(this.admin).transfer(this.address1.address, 500n)).to.not.be + .reverted; + }); it('should allow owner to update rules via setRules', async function () { // Start with no rules this.transferPolicy = await deployTransferValidationPolicy( this.policyEngineAddress, this.admin.address, - [] - ) - this.transferPolicyAddress = await this.transferPolicy.getAddress() - - await this.policyEngine.connect(this.admin).addPolicy( - this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES - ) + [], + ); + this.transferPolicyAddress = await this.transferPolicy.getAddress(); + + await this.policyEngine + .connect(this.admin) + .addPolicy( + this.cmtatAddress, + this.transferSelector, + this.transferPolicyAddress, + TRANSFER_PARAM_NAMES, + ); // Transfer should succeed with no rules - await expect( - this.cmtat.connect(this.admin).transfer(this.address1.address, 500n) - ).to.not.be.reverted + await expect(this.cmtat.connect(this.admin).transfer(this.address1.address, 500n)).to.not.be + .reverted; // Now add a MaxAmountRule via setRules - const maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]) - await this.transferPolicy.connect(this.admin).setRules([await maxAmountRule.getAddress()]) + const maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]); + await this.transferPolicy.connect(this.admin).setRules([await maxAmountRule.getAddress()]); // Transfer above max should now fail - await expect( - this.cmtat.connect(this.admin).transfer(this.address2.address, 101n) - ).to.be.reverted + await expect(this.cmtat.connect(this.admin).transfer(this.address2.address, 101n)).to.be + .reverted; // Transfer within max should still succeed - await expect( - this.cmtat.connect(this.admin).transfer(this.address2.address, 50n) - ).to.not.be.reverted - }) + await expect(this.cmtat.connect(this.admin).transfer(this.address2.address, 50n)).to.not.be + .reverted; + }); it('should not allow non-owner to call setRules', async function () { this.transferPolicy = await deployTransferValidationPolicy( this.policyEngineAddress, this.admin.address, - [] - ) + [], + ); - const maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]) + const maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]); await expect( - this.transferPolicy.connect(this.address1).setRules([await maxAmountRule.getAddress()]) - ).to.be.reverted - }) + this.transferPolicy.connect(this.address1).setRules([await maxAmountRule.getAddress()]), + ).to.be.reverted; + }); it('should report correct rules and rulesCount', async function () { - const rule1 = await ethers.deployContract('MaxAmountRule', [100n]) - const rule2 = await ethers.deployContract('RestrictedAddressRule', [[]]) + const rule1 = await ethers.deployContract('MaxAmountRule', [100n]); + const rule2 = await ethers.deployContract('RestrictedAddressRule', [[]]); this.transferPolicy = await deployTransferValidationPolicy( this.policyEngineAddress, this.admin.address, - [await rule1.getAddress(), await rule2.getAddress()] - ) + [await rule1.getAddress(), await rule2.getAddress()], + ); - expect(await this.transferPolicy.rulesCount()).to.equal(2n) - const rules = await this.transferPolicy.rules() - expect(rules[0]).to.equal(await rule1.getAddress()) - expect(rules[1]).to.equal(await rule2.getAddress()) - }) - }) + expect(await this.transferPolicy.rulesCount()).to.equal(2n); + const rules = await this.transferPolicy.rules(); + expect(rules[0]).to.equal(await rule1.getAddress()); + expect(rules[1]).to.equal(await rule2.getAddress()); + }); + }); describe('No policy attached (defaultAllow = true)', function () { it('should allow transfers when no policy is registered for transfer selector', async function () { // PolicyEngine has defaultAllow = true and no policy for transfer - await expect( - this.cmtat.connect(this.admin).transfer(this.address1.address, 500n) - ).to.not.be.reverted - }) + await expect(this.cmtat.connect(this.admin).transfer(this.address1.address, 500n)).to.not.be + .reverted; + }); it('canTransfer should return true when no policy is registered', async function () { - expect( - await this.cmtat.canTransfer(this.admin.address, this.address1.address, 500n) - ).to.be.true - }) - }) + expect(await this.cmtat.canTransfer(this.admin.address, this.address1.address, 500n)).to.be + .true; + }); + }); describe('canTransfer with module-level restrictions', function () { beforeEach(async function () { // Set up MaxAmountRule policy on transfer selector - this.maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]) + this.maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]); this.transferPolicy = await deployTransferValidationPolicy( this.policyEngineAddress, this.admin.address, - [await this.maxAmountRule.getAddress()] - ) - this.transferPolicyAddress = await this.transferPolicy.getAddress() - - await this.policyEngine.connect(this.admin).addPolicy( - this.cmtatAddress, this.transferSelector, this.transferPolicyAddress, TRANSFER_PARAM_NAMES - ) + [await this.maxAmountRule.getAddress()], + ); + this.transferPolicyAddress = await this.transferPolicy.getAddress(); + + await this.policyEngine + .connect(this.admin) + .addPolicy( + this.cmtatAddress, + this.transferSelector, + this.transferPolicyAddress, + TRANSFER_PARAM_NAMES, + ); // Give address1 some tokens - await this.cmtat.connect(this.admin).transfer(this.address1.address, 50n) - }) + await this.cmtat.connect(this.admin).transfer(this.address1.address, 50n); + }); it('canTransfer should return false when sender is frozen', async function () { - await this.cmtat.connect(this.admin).setAddressFrozen(this.address1.address, true) - expect( - await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n) - ).to.be.false - }) + await this.cmtat.connect(this.admin).setAddressFrozen(this.address1.address, true); + expect(await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n)).to.be + .false; + }); it('canTransfer should return false when recipient is frozen', async function () { - await this.cmtat.connect(this.admin).setAddressFrozen(this.address2.address, true) - expect( - await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n) - ).to.be.false - }) + await this.cmtat.connect(this.admin).setAddressFrozen(this.address2.address, true); + expect(await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n)).to.be + .false; + }); it('canTransfer should return false when contract is paused', async function () { - await this.cmtat.connect(this.admin).pause() - expect( - await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n) - ).to.be.false - }) + await this.cmtat.connect(this.admin).pause(); + expect(await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n)).to.be + .false; + }); it('canTransfer should return false when transfer exceeds active balance (frozen tokens)', async function () { // Freeze 40 of address1's 50 tokens → active balance = 10 - await this.cmtat.connect(this.admin)['freezePartialTokens(address,uint256)'](this.address1.address, 40n) - expect( - await this.cmtat.canTransfer(this.address1.address, this.address2.address, 20n) - ).to.be.false - }) + await this.cmtat + .connect(this.admin) + ['freezePartialTokens(address,uint256)'](this.address1.address, 40n); + expect(await this.cmtat.canTransfer(this.address1.address, this.address2.address, 20n)).to.be + .false; + }); it('canTransfer should return true for valid transfer with no module restrictions', async function () { - expect( - await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n) - ).to.be.true - }) - }) -}) + expect(await this.cmtat.canTransfer(this.address1.address, this.address2.address, 10n)).to.be + .true; + }); + }); +}); diff --git a/test/deployment/liteStandaloneDeployment.test.js b/test/deployment/liteStandaloneDeployment.test.js index 0feab24..3eb48a1 100644 --- a/test/deployment/liteStandaloneDeployment.test.js +++ b/test/deployment/liteStandaloneDeployment.test.js @@ -1,66 +1,62 @@ -const { - loadFixture, - deployCCTLiteStandalone, - createLiteFixture -} = require('../deploymentUtils') +const { loadFixture, deployCCTLiteStandalone, createLiteFixture } = require('../deploymentUtils'); // Reuse CMTAT common modules -const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon') -const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon') -const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon') -const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') -const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') -const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') -const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon') -const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon') -const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon') -const ExtraInfoModuleCommon = require('../../submodules/CMTAT/test/common/ExtraInfoModuleCommon') -const DocumentModuleCommon = require('../../submodules/CMTAT/test/common/DocumentModule/DocumentModuleCommon') -const SnapshotModuleCommon = require('../common/cmtat/SnapshotModuleCommon') +const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon'); +const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon'); +const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon'); +const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon'); +const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon'); +const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon'); +const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon'); +const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon'); +const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon'); +const ExtraInfoModuleCommon = require('../../submodules/CMTAT/test/common/ExtraInfoModuleCommon'); +const DocumentModuleCommon = require('../../submodules/CMTAT/test/common/DocumentModule/DocumentModuleCommon'); +const SnapshotModuleCommon = require('../common/cmtat/SnapshotModuleCommon'); // Snapshot scheduling & global modules from CMTAT -const SnapshotModuleCommonScheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling') -const SnapshotModuleCommonRescheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling') -const SnapshotModuleCommonUnschedule = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule') -const SnapshotModuleCommonGetNextSnapshot = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot') -const SnapshotModuleMultiplePlannedTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest') -const SnapshotModuleOnePlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest') -const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot') +const SnapshotModuleCommonScheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling'); +const SnapshotModuleCommonRescheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling'); +const SnapshotModuleCommonUnschedule = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule'); +const SnapshotModuleCommonGetNextSnapshot = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot'); +const SnapshotModuleMultiplePlannedTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest'); +const SnapshotModuleOnePlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest'); +const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot'); -const liteFixture = createLiteFixture(deployCCTLiteStandalone) +const liteFixture = createLiteFixture(deployCCTLiteStandalone); describe('ComplianceTokenCMTATLiteStandalone', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(liteFixture)) - }) + Object.assign(this, await loadFixture(liteFixture)); + }); // Core CMTAT commons - VersionModuleCommon() - PauseModuleCommon() - ERC20MintModuleCommon() - ERC20BurnModuleCommon() - ERC20BaseModuleCommon() - EnforcementModuleCommon() + VersionModuleCommon(); + PauseModuleCommon(); + ERC20MintModuleCommon(); + ERC20BurnModuleCommon(); + ERC20BaseModuleCommon(); + EnforcementModuleCommon(); // Extensions - ERC20EnforcementModuleCommon() + ERC20EnforcementModuleCommon(); // options - ERC20CrossChainModuleCommon() - CCIPModuleCommon() + ERC20CrossChainModuleCommon(); + CCIPModuleCommon(); // Extensions - ExtraInfoModuleCommon() + ExtraInfoModuleCommon(); // Engines - DocumentModuleCommon() - SnapshotModuleCommon() + DocumentModuleCommon(); + SnapshotModuleCommon(); // Snapshot scheduling & global - SnapshotModuleCommonScheduling() - SnapshotModuleCommonRescheduling() - SnapshotModuleCommonUnschedule() - SnapshotModuleCommonGetNextSnapshot() - SnapshotModuleMultiplePlannedTest() - SnapshotModuleOnePlannedSnapshotTest() - SnapshotModuleZeroPlannedSnapshotTest() -}) + SnapshotModuleCommonScheduling(); + SnapshotModuleCommonRescheduling(); + SnapshotModuleCommonUnschedule(); + SnapshotModuleCommonGetNextSnapshot(); + SnapshotModuleMultiplePlannedTest(); + SnapshotModuleOnePlannedSnapshotTest(); + SnapshotModuleZeroPlannedSnapshotTest(); +}); diff --git a/test/deployment/liteUUPSUpgradeableDeployment.test.js b/test/deployment/liteUUPSUpgradeableDeployment.test.js index ae093f5..a1e3e90 100644 --- a/test/deployment/liteUUPSUpgradeableDeployment.test.js +++ b/test/deployment/liteUUPSUpgradeableDeployment.test.js @@ -1,135 +1,150 @@ -const { ethers, upgrades } = require('hardhat') -const { expect } = require('chai') +const { ethers, upgrades } = require('hardhat'); +const { expect } = require('chai'); const { loadFixture, deployCCTLiteUUPSUpgradeable, - createLiteFixture -} = require('../deploymentUtils') + createLiteFixture, +} = require('../deploymentUtils'); // Reuse CMTAT common modules -const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon') -const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon') -const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon') -const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') -const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') -const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') -const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon') -const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon') -const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon') -const ExtraInfoModuleCommon = require('../../submodules/CMTAT/test/common/ExtraInfoModuleCommon') -const DocumentModuleCommon = require('../../submodules/CMTAT/test/common/DocumentModule/DocumentModuleCommon') -const SnapshotModuleCommon = require('../common/cmtat/SnapshotModuleCommon') +const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon'); +const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon'); +const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon'); +const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon'); +const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon'); +const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon'); +const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon'); +const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon'); +const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon'); +const ExtraInfoModuleCommon = require('../../submodules/CMTAT/test/common/ExtraInfoModuleCommon'); +const DocumentModuleCommon = require('../../submodules/CMTAT/test/common/DocumentModule/DocumentModuleCommon'); +const SnapshotModuleCommon = require('../common/cmtat/SnapshotModuleCommon'); // Snapshot scheduling & global modules from CMTAT -const SnapshotModuleCommonScheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling') -const SnapshotModuleCommonRescheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling') -const SnapshotModuleCommonUnschedule = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule') -const SnapshotModuleCommonGetNextSnapshot = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot') -const SnapshotModuleMultiplePlannedTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest') -const SnapshotModuleOnePlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest') -const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot') +const SnapshotModuleCommonScheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling'); +const SnapshotModuleCommonRescheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling'); +const SnapshotModuleCommonUnschedule = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule'); +const SnapshotModuleCommonGetNextSnapshot = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot'); +const SnapshotModuleMultiplePlannedTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest'); +const SnapshotModuleOnePlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest'); +const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot'); -const PROXY_UPGRADE_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PROXY_UPGRADE_ROLE')) +const PROXY_UPGRADE_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PROXY_UPGRADE_ROLE')); -const liteFixture = createLiteFixture(deployCCTLiteUUPSUpgradeable) +const liteFixture = createLiteFixture(deployCCTLiteUUPSUpgradeable); describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(liteFixture)) - }) + Object.assign(this, await loadFixture(liteFixture)); + }); // UUPS proxy-specific context('Re-initialization', function () { it('testCannotBeReinitialized', async function () { - const policyEngineAddress = await this.policyEngine.getAddress() + const policyEngineAddress = await this.policyEngine.getAddress(); await expect( - this.cmtat.connect(this.admin).initialize( - this.admin.address, - ['CMTA Token', 'CMTAT', 0], - ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], - policyEngineAddress, - ethers.ZeroAddress, - ethers.ZeroAddress - ) - ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') - }) - }) + this.cmtat + .connect(this.admin) + .initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + [ + 'CMTAT_ISIN', + ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], + 'CMTAT_info', + ], + policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress, + ), + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); + }); + }); context('UUPS Upgrade', function () { it('testAdminWithRoleCanUpgrade', async function () { // Grant PROXY_UPGRADE_ROLE to admin - await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address) + await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address); - const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable', this.admin) + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATLiteUUPSUpgradeable', + this.admin, + ); await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - kind: 'uups' - }) - }) + kind: 'uups', + }); + }); it('testCannotUpgradeWithoutProxyUpgradeRole', async function () { - const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable', this.attacker) + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATLiteUUPSUpgradeable', + this.attacker, + ); await expect( upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - kind: 'uups' - }) - ).to.be.revertedWithCustomError(this.cmtat, 'AccessControlUnauthorizedAccount') - }) + kind: 'uups', + }), + ).to.be.revertedWithCustomError(this.cmtat, 'AccessControlUnauthorizedAccount'); + }); it('testStatePreservedAfterUpgrade', async function () { // Mint some tokens before upgrade - await this.cmtat.connect(this.admin).mint(this.address1.address, 100n) - expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n) + await this.cmtat.connect(this.admin).mint(this.address1.address, 100n); + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n); // Grant upgrade role and upgrade - await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address) - const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable', this.admin) + await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address); + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATLiteUUPSUpgradeable', + this.admin, + ); const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - kind: 'uups' - }) + kind: 'uups', + }); // Verify state preserved - expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n) - expect(await upgraded.name()).to.equal('CMTA Token') - expect(await upgraded.symbol()).to.equal('CMTAT') - }) - }) + expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n); + expect(await upgraded.name()).to.equal('CMTA Token'); + expect(await upgraded.symbol()).to.equal('CMTAT'); + }); + }); // Core CMTAT commons - VersionModuleCommon() - PauseModuleCommon() - ERC20MintModuleCommon() - ERC20BurnModuleCommon() - ERC20BaseModuleCommon() - EnforcementModuleCommon() + VersionModuleCommon(); + PauseModuleCommon(); + ERC20MintModuleCommon(); + ERC20BurnModuleCommon(); + ERC20BaseModuleCommon(); + EnforcementModuleCommon(); // Extensions - ERC20EnforcementModuleCommon() + ERC20EnforcementModuleCommon(); // options - ERC20CrossChainModuleCommon() - CCIPModuleCommon() + ERC20CrossChainModuleCommon(); + CCIPModuleCommon(); // Extensions - ExtraInfoModuleCommon() + ExtraInfoModuleCommon(); // Engines - DocumentModuleCommon() - SnapshotModuleCommon() + DocumentModuleCommon(); + SnapshotModuleCommon(); // Snapshot scheduling & global - SnapshotModuleCommonScheduling() - SnapshotModuleCommonRescheduling() - SnapshotModuleCommonUnschedule() - SnapshotModuleCommonGetNextSnapshot() - SnapshotModuleMultiplePlannedTest() - SnapshotModuleOnePlannedSnapshotTest() - SnapshotModuleZeroPlannedSnapshotTest() -}) + SnapshotModuleCommonScheduling(); + SnapshotModuleCommonRescheduling(); + SnapshotModuleCommonUnschedule(); + SnapshotModuleCommonGetNextSnapshot(); + SnapshotModuleMultiplePlannedTest(); + SnapshotModuleOnePlannedSnapshotTest(); + SnapshotModuleZeroPlannedSnapshotTest(); +}); diff --git a/test/deployment/liteUpgradeableDeployment.test.js b/test/deployment/liteUpgradeableDeployment.test.js index 01f6f19..99390bf 100644 --- a/test/deployment/liteUpgradeableDeployment.test.js +++ b/test/deployment/liteUpgradeableDeployment.test.js @@ -1,85 +1,87 @@ -const { ethers } = require('hardhat') -const { expect } = require('chai') -const { - loadFixture, - deployCCTLiteUpgradeable, - createLiteFixture -} = require('../deploymentUtils') +const { ethers } = require('hardhat'); +const { expect } = require('chai'); +const { loadFixture, deployCCTLiteUpgradeable, createLiteFixture } = require('../deploymentUtils'); // Reuse CMTAT common modules -const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon') -const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon') -const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon') -const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon') -const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon') -const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon') -const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon') -const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon') -const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon') -const ExtraInfoModuleCommon = require('../../submodules/CMTAT/test/common/ExtraInfoModuleCommon') -const DocumentModuleCommon = require('../../submodules/CMTAT/test/common/DocumentModule/DocumentModuleCommon') -const SnapshotModuleCommon = require('../common/cmtat/SnapshotModuleCommon') +const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon'); +const ERC20MintModuleCommon = require('../../submodules/CMTAT/test/common/ERC20MintModuleCommon'); +const ERC20BurnModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BurnModuleCommon'); +const ERC20BaseModuleCommon = require('../../submodules/CMTAT/test/common/ERC20BaseModuleCommon'); +const EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/EnforcementModuleCommon'); +const ERC20EnforcementModuleCommon = require('../../submodules/CMTAT/test/common/ERC20EnforcementModuleCommon'); +const VersionModuleCommon = require('../../submodules/CMTAT/test/common/VersionModuleCommon'); +const ERC20CrossChainModuleCommon = require('../../submodules/CMTAT/test/common/ERC20CrossChainModuleCommon'); +const CCIPModuleCommon = require('../../submodules/CMTAT/test/common/CCIPModuleCommon'); +const ExtraInfoModuleCommon = require('../../submodules/CMTAT/test/common/ExtraInfoModuleCommon'); +const DocumentModuleCommon = require('../../submodules/CMTAT/test/common/DocumentModule/DocumentModuleCommon'); +const SnapshotModuleCommon = require('../common/cmtat/SnapshotModuleCommon'); // Snapshot scheduling & global modules from CMTAT -const SnapshotModuleCommonScheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling') -const SnapshotModuleCommonRescheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling') -const SnapshotModuleCommonUnschedule = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule') -const SnapshotModuleCommonGetNextSnapshot = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot') -const SnapshotModuleMultiplePlannedTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest') -const SnapshotModuleOnePlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest') -const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot') +const SnapshotModuleCommonScheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonScheduling'); +const SnapshotModuleCommonRescheduling = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonRescheduling'); +const SnapshotModuleCommonUnschedule = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonUnschedule'); +const SnapshotModuleCommonGetNextSnapshot = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/SnapshotModuleCommonGetNextSnapshot'); +const SnapshotModuleMultiplePlannedTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleMultiplePlannedTest'); +const SnapshotModuleOnePlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleOnePlannedSnapshotTest'); +const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot'); -const liteFixture = createLiteFixture(deployCCTLiteUpgradeable) +const liteFixture = createLiteFixture(deployCCTLiteUpgradeable); describe('ComplianceTokenCMTATLiteUpgradeable', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(liteFixture)) - }) + Object.assign(this, await loadFixture(liteFixture)); + }); // Proxy-specific context('Re-initialization', function () { it('testCannotBeReinitialized', async function () { - const policyEngineAddress = await this.policyEngine.getAddress() + const policyEngineAddress = await this.policyEngine.getAddress(); await expect( - this.cmtat.connect(this.admin).initialize( - this.admin.address, - ['CMTA Token', 'CMTAT', 0], - ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], - policyEngineAddress, - ethers.ZeroAddress, - ethers.ZeroAddress - ) - ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') - }) - }) + this.cmtat + .connect(this.admin) + .initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + [ + 'CMTAT_ISIN', + ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], + 'CMTAT_info', + ], + policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress, + ), + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); + }); + }); // Core CMTAT commons - VersionModuleCommon() - PauseModuleCommon() - ERC20MintModuleCommon() - ERC20BurnModuleCommon() - ERC20BaseModuleCommon() - EnforcementModuleCommon() + VersionModuleCommon(); + PauseModuleCommon(); + ERC20MintModuleCommon(); + ERC20BurnModuleCommon(); + ERC20BaseModuleCommon(); + EnforcementModuleCommon(); // Extensions - ERC20EnforcementModuleCommon() + ERC20EnforcementModuleCommon(); // options - ERC20CrossChainModuleCommon() - CCIPModuleCommon() + ERC20CrossChainModuleCommon(); + CCIPModuleCommon(); // Extensions - ExtraInfoModuleCommon() + ExtraInfoModuleCommon(); // Engines - DocumentModuleCommon() - SnapshotModuleCommon() + DocumentModuleCommon(); + SnapshotModuleCommon(); // Snapshot scheduling & global - SnapshotModuleCommonScheduling() - SnapshotModuleCommonRescheduling() - SnapshotModuleCommonUnschedule() - SnapshotModuleCommonGetNextSnapshot() - SnapshotModuleMultiplePlannedTest() - SnapshotModuleOnePlannedSnapshotTest() - SnapshotModuleZeroPlannedSnapshotTest() -}) + SnapshotModuleCommonScheduling(); + SnapshotModuleCommonRescheduling(); + SnapshotModuleCommonUnschedule(); + SnapshotModuleCommonGetNextSnapshot(); + SnapshotModuleMultiplePlannedTest(); + SnapshotModuleOnePlannedSnapshotTest(); + SnapshotModuleZeroPlannedSnapshotTest(); +}); diff --git a/test/deployment/standaloneDeployment.test.js b/test/deployment/standaloneDeployment.test.js index b459add..40e0e3b 100644 --- a/test/deployment/standaloneDeployment.test.js +++ b/test/deployment/standaloneDeployment.test.js @@ -1,28 +1,24 @@ -const { - loadFixture, - deployCCTStandalone, - createStandardFixture -} = require('../deploymentUtils') +const { loadFixture, deployCCTStandalone, createStandardFixture } = require('../deploymentUtils'); // ACE-specific common modules -const DeploymentCommon = require('../common/ace/DeploymentCommon') -const PausePolicyCommon = require('../common/ace/PausePolicyCommon') -const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') -const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') -const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') -const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon') +const DeploymentCommon = require('../common/ace/DeploymentCommon'); +const PausePolicyCommon = require('../common/ace/PausePolicyCommon'); +const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon'); +const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon'); +const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon'); +const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon'); -const standardFixture = createStandardFixture(deployCCTStandalone) +const standardFixture = createStandardFixture(deployCCTStandalone); describe('ComplianceTokenCMTATStandalone', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(standardFixture)) - }) + Object.assign(this, await loadFixture(standardFixture)); + }); - DeploymentCommon() - PausePolicyCommon() - RBACPolicyCommon() - CombinedPolicyCommon() - PolicyEngineCommon() - CMTATModuleCommon() -}) + DeploymentCommon(); + PausePolicyCommon(); + RBACPolicyCommon(); + CombinedPolicyCommon(); + PolicyEngineCommon(); + CMTATModuleCommon(); +}); diff --git a/test/deployment/upgradeableDeployment.test.js b/test/deployment/upgradeableDeployment.test.js index 5444e40..2c96ad3 100644 --- a/test/deployment/upgradeableDeployment.test.js +++ b/test/deployment/upgradeableDeployment.test.js @@ -1,46 +1,48 @@ -const { ethers } = require('hardhat') -const { expect } = require('chai') -const { - loadFixture, - deployCCTUpgradeable, - createStandardFixture -} = require('../deploymentUtils') +const { ethers } = require('hardhat'); +const { expect } = require('chai'); +const { loadFixture, deployCCTUpgradeable, createStandardFixture } = require('../deploymentUtils'); // ACE-specific common modules -const DeploymentCommon = require('../common/ace/DeploymentCommon') -const PausePolicyCommon = require('../common/ace/PausePolicyCommon') -const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') -const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') -const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') -const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon') +const DeploymentCommon = require('../common/ace/DeploymentCommon'); +const PausePolicyCommon = require('../common/ace/PausePolicyCommon'); +const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon'); +const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon'); +const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon'); +const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon'); -const standardFixture = createStandardFixture(deployCCTUpgradeable) +const standardFixture = createStandardFixture(deployCCTUpgradeable); describe('ComplianceTokenCMTATUpgradeable', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(standardFixture)) - }) + Object.assign(this, await loadFixture(standardFixture)); + }); // Proxy-specific context('Re-initialization', function () { it('testCannotBeReinitialized', async function () { await expect( - this.cmtat.connect(this.admin).initialize( - this.admin.address, - ['CMTA Token', 'CMTAT', 0], - ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], - this.policyEngineAddress, - ethers.ZeroAddress, - ethers.ZeroAddress - ) - ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') - }) - }) + this.cmtat + .connect(this.admin) + .initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + [ + 'CMTAT_ISIN', + ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], + 'CMTAT_info', + ], + this.policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress, + ), + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); + }); + }); - DeploymentCommon() - PausePolicyCommon() - RBACPolicyCommon() - CombinedPolicyCommon() - PolicyEngineCommon() - CMTATModuleCommon() -}) + DeploymentCommon(); + PausePolicyCommon(); + RBACPolicyCommon(); + CombinedPolicyCommon(); + PolicyEngineCommon(); + CMTATModuleCommon(); +}); diff --git a/test/deployment/uupsUpgradeableDeployment.test.js b/test/deployment/uupsUpgradeableDeployment.test.js index f7bb587..2a658d2 100644 --- a/test/deployment/uupsUpgradeableDeployment.test.js +++ b/test/deployment/uupsUpgradeableDeployment.test.js @@ -1,90 +1,105 @@ -const { ethers, upgrades } = require('hardhat') -const { expect } = require('chai') +const { ethers, upgrades } = require('hardhat'); +const { expect } = require('chai'); const { loadFixture, deployCCTUUPSUpgradeable, - createStandardFixture -} = require('../deploymentUtils') + createStandardFixture, +} = require('../deploymentUtils'); // ACE-specific common modules -const DeploymentCommon = require('../common/ace/DeploymentCommon') -const PausePolicyCommon = require('../common/ace/PausePolicyCommon') -const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon') -const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon') -const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon') -const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon') +const DeploymentCommon = require('../common/ace/DeploymentCommon'); +const PausePolicyCommon = require('../common/ace/PausePolicyCommon'); +const RBACPolicyCommon = require('../common/ace/RBACPolicyCommon'); +const CombinedPolicyCommon = require('../common/ace/CombinedPolicyCommon'); +const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon'); +const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon'); -const standardFixture = createStandardFixture(deployCCTUUPSUpgradeable) +const standardFixture = createStandardFixture(deployCCTUUPSUpgradeable); describe('ComplianceTokenCMTATUUPSUpgradeable', function () { beforeEach(async function () { - Object.assign(this, await loadFixture(standardFixture)) - }) + Object.assign(this, await loadFixture(standardFixture)); + }); // UUPS proxy-specific context('Re-initialization', function () { it('testCannotBeReinitialized', async function () { await expect( - this.cmtat.connect(this.admin).initialize( - this.admin.address, - ['CMTA Token', 'CMTAT', 0], - ['CMTAT_ISIN', ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], 'CMTAT_info'], - this.policyEngineAddress, - ethers.ZeroAddress, - ethers.ZeroAddress - ) - ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization') - }) - }) + this.cmtat + .connect(this.admin) + .initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + [ + 'CMTAT_ISIN', + ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], + 'CMTAT_info', + ], + this.policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress, + ), + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); + }); + }); context('UUPS Upgrade', function () { it('testOwnerCanUpgrade', async function () { - const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable', this.admin) + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATUUPSUpgradeable', + this.admin, + ); await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - kind: 'uups' - }) - }) + kind: 'uups', + }); + }); it('testNonOwnerCannotUpgrade', async function () { - const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable', this.attacker) + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATUUPSUpgradeable', + this.attacker, + ); await expect( upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - kind: 'uups' - }) - ).to.be.revertedWithCustomError(this.cmtat, 'OwnableUnauthorizedAccount') - }) + kind: 'uups', + }), + ).to.be.revertedWithCustomError(this.cmtat, 'OwnableUnauthorizedAccount'); + }); it('testStatePreservedAfterUpgrade', async function () { // Mint some tokens before upgrade - await this.cmtat.connect(this.admin).mint(this.address1.address, 100n) - expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n) + await this.cmtat.connect(this.admin).mint(this.address1.address, 100n); + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n); // Upgrade - const FactoryV2 = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable', this.admin) + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATUUPSUpgradeable', + this.admin, + ); const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - kind: 'uups' - }) + kind: 'uups', + }); // Verify state preserved - expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n) - expect(await upgraded.name()).to.equal('CMTA Token') - expect(await upgraded.symbol()).to.equal('CMTAT') - }) - }) + expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n); + expect(await upgraded.name()).to.equal('CMTA Token'); + expect(await upgraded.symbol()).to.equal('CMTAT'); + }); + }); - DeploymentCommon() - PausePolicyCommon() - RBACPolicyCommon() - CombinedPolicyCommon() - PolicyEngineCommon() - CMTATModuleCommon() -}) + DeploymentCommon(); + PausePolicyCommon(); + RBACPolicyCommon(); + CombinedPolicyCommon(); + PolicyEngineCommon(); + CMTATModuleCommon(); +}); diff --git a/test/deploymentUtils.js b/test/deploymentUtils.js index f245e00..ae447fa 100644 --- a/test/deploymentUtils.js +++ b/test/deploymentUtils.js @@ -1,31 +1,31 @@ -const { ethers, upgrades } = require('hardhat') -const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers') +const { ethers, upgrades } = require('hardhat'); +const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers'); -const ZERO_ADDRESS = ethers.ZeroAddress -const DEPLOYMENT_DECIMAL = 0n +const ZERO_ADDRESS = ethers.ZeroAddress; +const DEPLOYMENT_DECIMAL = 0n; const TERMS = [ 'doc1', 'https://example.com/doc1', - '0x6a12eff2f559a5e529ca2c563c53194f6463ed5c61d1ae8f8731137467ab0279' -] + '0x6a12eff2f559a5e529ca2c563c53194f6463ed5c61d1ae8f8731137467ab0279', +]; // Role constants (match CMTAT convention) -const MINTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('MINTER_ROLE')) -const BURNER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_ROLE')) -const BURNER_FROM_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_FROM_ROLE')) -const BURNER_SELF_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_SELF_ROLE')) -const PAUSER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PAUSER_ROLE')) -const ENFORCER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('ENFORCER_ROLE')) -const ERC20ENFORCER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('ERC20ENFORCER_ROLE')) -const DOCUMENT_ROLE = ethers.keccak256(ethers.toUtf8Bytes('DOCUMENT_ROLE')) -const SNAPSHOOTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('SNAPSHOOTER_ROLE')) -const CROSS_CHAIN_ROLE = ethers.keccak256(ethers.toUtf8Bytes('CROSS_CHAIN_ROLE')) -const DEFAULT_ADMIN_ROLE = '0x0000000000000000000000000000000000000000000000000000000000000000' +const MINTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('MINTER_ROLE')); +const BURNER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_ROLE')); +const BURNER_FROM_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_FROM_ROLE')); +const BURNER_SELF_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_SELF_ROLE')); +const PAUSER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PAUSER_ROLE')); +const ENFORCER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('ENFORCER_ROLE')); +const ERC20ENFORCER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('ERC20ENFORCER_ROLE')); +const DOCUMENT_ROLE = ethers.keccak256(ethers.toUtf8Bytes('DOCUMENT_ROLE')); +const SNAPSHOOTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('SNAPSHOOTER_ROLE')); +const CROSS_CHAIN_ROLE = ethers.keccak256(ethers.toUtf8Bytes('CROSS_CHAIN_ROLE')); +const DEFAULT_ADMIN_ROLE = '0x0000000000000000000000000000000000000000000000000000000000000000'; /** * Fixture matching CMTAT signer convention */ -async function fixture () { +async function fixture() { const [ _, admin, @@ -35,8 +35,8 @@ async function fixture () { deployerAddress, fakeRuleEngine, ruleEngine, - attacker - ] = await ethers.getSigners() + attacker, + ] = await ethers.getSigners(); return { _, admin, @@ -46,64 +46,81 @@ async function fixture () { deployerAddress, fakeRuleEngine, ruleEngine, - attacker - } + attacker, + }; } /* ======== ACE Infrastructure Deploy Helpers ======== */ -async function deployPolicyEngine (defaultAllow, initialOwner) { - const Factory = await ethers.getContractFactory('PolicyEngine') - const policyEngine = await upgrades.deployProxy( - Factory, - [defaultAllow, initialOwner], - { initializer: 'initialize', unsafeAllow: ['constructor'], silenceWarnings: true } - ) - return policyEngine +async function deployPolicyEngine(defaultAllow, initialOwner) { + const Factory = await ethers.getContractFactory('PolicyEngine'); + const policyEngine = await upgrades.deployProxy(Factory, [defaultAllow, initialOwner], { + initializer: 'initialize', + unsafeAllow: ['constructor'], + silenceWarnings: true, + }); + return policyEngine; } -async function deployPausePolicy (policyEngineAddress, ownerAddress, initiallyPaused = false) { - const abiCoder = ethers.AbiCoder.defaultAbiCoder() - const configParams = abiCoder.encode(['bool'], [initiallyPaused]) - const Factory = await ethers.getContractFactory('PausePolicy') +async function deployPausePolicy(policyEngineAddress, ownerAddress, initiallyPaused = false) { + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); + const configParams = abiCoder.encode(['bool'], [initiallyPaused]); + const Factory = await ethers.getContractFactory('PausePolicy'); const pausePolicy = await upgrades.deployProxy( Factory, [policyEngineAddress, ownerAddress, configParams], - { initializer: 'initialize', unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], silenceWarnings: true } - ) - return pausePolicy + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], + silenceWarnings: true, + }, + ); + return pausePolicy; } -async function deployRBACPolicy (policyEngineAddress, ownerAddress) { - const Factory = await ethers.getContractFactory('RoleBasedAccessControlPolicy') +async function deployRBACPolicy(policyEngineAddress, ownerAddress) { + const Factory = await ethers.getContractFactory('RoleBasedAccessControlPolicy'); const rbacPolicy = await upgrades.deployProxy( Factory, [policyEngineAddress, ownerAddress, '0x'], - { initializer: 'initialize', unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], silenceWarnings: true } - ) - return rbacPolicy + { + initializer: 'initialize', + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], + silenceWarnings: true, + }, + ); + return rbacPolicy; } /* ======== Standard Contract Deploy Helpers ======== */ -async function deployCCTStandalone (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { - const cmtat = await ethers.deployContract( - 'ComplianceTokenCMTATStandalone', - [ - forwarder, - admin, - ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], - ['CMTAT_ISIN', TERMS, 'CMTAT_info'], - policyEngineAddress, - snapshotEngine, - documentEngine - ] - ) - return cmtat +async function deployCCTStandalone( + forwarder, + admin, + policyEngineAddress, + snapshotEngine = ZERO_ADDRESS, + documentEngine = ZERO_ADDRESS, +) { + const cmtat = await ethers.deployContract('ComplianceTokenCMTATStandalone', [ + forwarder, + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress, + snapshotEngine, + documentEngine, + ]); + return cmtat; } -async function deployCCTUpgradeable (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { - const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUpgradeable') +async function deployCCTUpgradeable( + forwarder, + admin, + policyEngineAddress, + snapshotEngine = ZERO_ADDRESS, + documentEngine = ZERO_ADDRESS, +) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUpgradeable'); const cmtat = await upgrades.deployProxy( Factory, [ @@ -112,38 +129,47 @@ async function deployCCTUpgradeable (forwarder, admin, policyEngineAddress, snap ['CMTAT_ISIN', TERMS, 'CMTAT_info'], policyEngineAddress, snapshotEngine, - documentEngine + documentEngine, ], { initializer: 'initialize', constructorArgs: [forwarder], unsafeAllow: ['missing-initializer', 'constructor'], - silenceWarnings: true - } - ) - return cmtat + silenceWarnings: true, + }, + ); + return cmtat; } /* ======== Lite Contract Deploy Helpers ======== */ -async function deployCCTLiteStandalone (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { - const cmtat = await ethers.deployContract( - 'ComplianceTokenCMTATLiteStandalone', - [ - forwarder, - admin, - ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], - ['CMTAT_ISIN', TERMS, 'CMTAT_info'], - policyEngineAddress, - snapshotEngine, - documentEngine - ] - ) - return cmtat +async function deployCCTLiteStandalone( + forwarder, + admin, + policyEngineAddress, + snapshotEngine = ZERO_ADDRESS, + documentEngine = ZERO_ADDRESS, +) { + const cmtat = await ethers.deployContract('ComplianceTokenCMTATLiteStandalone', [ + forwarder, + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress, + snapshotEngine, + documentEngine, + ]); + return cmtat; } -async function deployCCTLiteUpgradeable (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { - const Factory = await ethers.getContractFactory('ComplianceTokenCMTATLiteUpgradeable') +async function deployCCTLiteUpgradeable( + forwarder, + admin, + policyEngineAddress, + snapshotEngine = ZERO_ADDRESS, + documentEngine = ZERO_ADDRESS, +) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATLiteUpgradeable'); const cmtat = await upgrades.deployProxy( Factory, [ @@ -152,22 +178,34 @@ async function deployCCTLiteUpgradeable (forwarder, admin, policyEngineAddress, ['CMTAT_ISIN', TERMS, 'CMTAT_info'], policyEngineAddress, snapshotEngine, - documentEngine + documentEngine, ], { initializer: 'initialize', - constructorArgs: [forwarder, admin, ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], ['CMTAT_ISIN', TERMS, 'CMTAT_info'], policyEngineAddress], + constructorArgs: [ + forwarder, + admin, + ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], + ['CMTAT_ISIN', TERMS, 'CMTAT_info'], + policyEngineAddress, + ], unsafeAllow: ['missing-initializer', 'constructor'], - silenceWarnings: true - } - ) - return cmtat + silenceWarnings: true, + }, + ); + return cmtat; } /* ======== UUPS Contract Deploy Helpers ======== */ -async function deployCCTUUPSUpgradeable (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { - const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable') +async function deployCCTUUPSUpgradeable( + forwarder, + admin, + policyEngineAddress, + snapshotEngine = ZERO_ADDRESS, + documentEngine = ZERO_ADDRESS, +) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATUUPSUpgradeable'); const cmtat = await upgrades.deployProxy( Factory, [ @@ -176,21 +214,27 @@ async function deployCCTUUPSUpgradeable (forwarder, admin, policyEngineAddress, ['CMTAT_ISIN', TERMS, 'CMTAT_info'], policyEngineAddress, snapshotEngine, - documentEngine + documentEngine, ], { initializer: 'initialize', constructorArgs: [forwarder], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - kind: 'uups' - } - ) - return cmtat + kind: 'uups', + }, + ); + return cmtat; } -async function deployCCTLiteUUPSUpgradeable (forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS) { - const Factory = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable') +async function deployCCTLiteUUPSUpgradeable( + forwarder, + admin, + policyEngineAddress, + snapshotEngine = ZERO_ADDRESS, + documentEngine = ZERO_ADDRESS, +) { + const Factory = await ethers.getContractFactory('ComplianceTokenCMTATLiteUUPSUpgradeable'); const cmtat = await upgrades.deployProxy( Factory, [ @@ -199,17 +243,17 @@ async function deployCCTLiteUUPSUpgradeable (forwarder, admin, policyEngineAddre ['CMTAT_ISIN', TERMS, 'CMTAT_info'], policyEngineAddress, snapshotEngine, - documentEngine + documentEngine, ], { initializer: 'initialize', constructorArgs: [forwarder], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, - kind: 'uups' - } - ) - return cmtat + kind: 'uups', + }, + ); + return cmtat; } /* ======== Fixture Factories ======== */ @@ -219,59 +263,90 @@ async function deployCCTLiteUUPSUpgradeable (forwarder, admin, policyEngineAddre * All contract deployment, policy registration, and role grants happen once; * loadFixture snapshots the state and restores it for each test. */ -function createStandardFixture (deployTokenFn) { - return async function standardFixture () { - const [_, admin, address1, address2, address3, deployerAddress, fakeRuleEngine, ruleEngine, attacker] = await ethers.getSigners() +function createStandardFixture(deployTokenFn) { + return async function standardFixture() { + const [ + _, + admin, + address1, + address2, + address3, + deployerAddress, + fakeRuleEngine, + ruleEngine, + attacker, + ] = await ethers.getSigners(); // Deploy ACE infrastructure - const policyEngine = await deployPolicyEngine(true, admin.address) - const policyEngineAddress = await policyEngine.getAddress() + const policyEngine = await deployPolicyEngine(true, admin.address); + const policyEngineAddress = await policyEngine.getAddress(); - const pausePolicy = await deployPausePolicy(policyEngineAddress, admin.address, false) - const pausePolicyAddress = await pausePolicy.getAddress() + const pausePolicy = await deployPausePolicy(policyEngineAddress, admin.address, false); + const pausePolicyAddress = await pausePolicy.getAddress(); - const rbacPolicy = await deployRBACPolicy(policyEngineAddress, admin.address) - const rbacPolicyAddress = await rbacPolicy.getAddress() + const rbacPolicy = await deployRBACPolicy(policyEngineAddress, admin.address); + const rbacPolicyAddress = await rbacPolicy.getAddress(); // Deploy compliance token - const cmtat = await deployTokenFn(_.address, admin.address, policyEngineAddress) - const cmtatAddress = await cmtat.getAddress() + const cmtat = await deployTokenFn(_.address, admin.address, policyEngineAddress); + const cmtatAddress = await cmtat.getAddress(); // Collect all selectors - const mintSelector = cmtat.interface.getFunction('mint(address,uint256)').selector - const burnSelector = cmtat.interface.getFunction('burn(address,uint256)').selector - const selfBurnSelector = cmtat.interface.getFunction('burn(uint256)').selector - const burnFromSelector = cmtat.interface.getFunction('burnFrom').selector - const transferSelector = cmtat.interface.getFunction('transfer(address,uint256)').selector - const transferFromSelector = cmtat.interface.getFunction('transferFrom(address,address,uint256)').selector - const forcedTransferSelector = cmtat.interface.getFunction('forcedTransfer(address,address,uint256)').selector - const freezeSelector = cmtat.interface.getFunction('freezePartialTokens(address,uint256)').selector - const unfreezeSelector = cmtat.interface.getFunction('unfreezePartialTokens(address,uint256)').selector - const setNameSelector = cmtat.interface.getFunction('setName').selector - const setTokenIdSelector = cmtat.interface.getFunction('setTokenId').selector - const setDocumentEngineSelector = cmtat.interface.getFunction('setDocumentEngine').selector - const setSnapshotEngineSelector = cmtat.interface.getFunction('setSnapshotEngine').selector - const setCCIPAdminSelector = cmtat.interface.getFunction('setCCIPAdmin').selector - const crosschainMintSelector = cmtat.interface.getFunction('crosschainMint').selector - const crosschainBurnSelector = cmtat.interface.getFunction('crosschainBurn').selector + const mintSelector = cmtat.interface.getFunction('mint(address,uint256)').selector; + const burnSelector = cmtat.interface.getFunction('burn(address,uint256)').selector; + const selfBurnSelector = cmtat.interface.getFunction('burn(uint256)').selector; + const burnFromSelector = cmtat.interface.getFunction('burnFrom').selector; + const transferSelector = cmtat.interface.getFunction('transfer(address,uint256)').selector; + const transferFromSelector = cmtat.interface.getFunction( + 'transferFrom(address,address,uint256)', + ).selector; + const forcedTransferSelector = cmtat.interface.getFunction( + 'forcedTransfer(address,address,uint256)', + ).selector; + const freezeSelector = cmtat.interface.getFunction( + 'freezePartialTokens(address,uint256)', + ).selector; + const unfreezeSelector = cmtat.interface.getFunction( + 'unfreezePartialTokens(address,uint256)', + ).selector; + const setNameSelector = cmtat.interface.getFunction('setName').selector; + const setTokenIdSelector = cmtat.interface.getFunction('setTokenId').selector; + const setDocumentEngineSelector = cmtat.interface.getFunction('setDocumentEngine').selector; + const setSnapshotEngineSelector = cmtat.interface.getFunction('setSnapshotEngine').selector; + const setCCIPAdminSelector = cmtat.interface.getFunction('setCCIPAdmin').selector; + const crosschainMintSelector = cmtat.interface.getFunction('crosschainMint').selector; + const crosschainBurnSelector = cmtat.interface.getFunction('crosschainBurn').selector; const allSelectors = [ - mintSelector, burnSelector, selfBurnSelector, burnFromSelector, - forcedTransferSelector, freezeSelector, unfreezeSelector, - setNameSelector, setTokenIdSelector, - setDocumentEngineSelector, setSnapshotEngineSelector, setCCIPAdminSelector, - crosschainMintSelector, crosschainBurnSelector - ] + mintSelector, + burnSelector, + selfBurnSelector, + burnFromSelector, + forcedTransferSelector, + freezeSelector, + unfreezeSelector, + setNameSelector, + setTokenIdSelector, + setDocumentEngineSelector, + setSnapshotEngineSelector, + setCCIPAdminSelector, + crosschainMintSelector, + crosschainBurnSelector, + ]; // Add PausePolicy + RBAC to all admin selectors for (const sel of allSelectors) { - await policyEngine.connect(admin).addPolicy(cmtatAddress, sel, pausePolicyAddress, []) - await policyEngine.connect(admin).addPolicy(cmtatAddress, sel, rbacPolicyAddress, []) + await policyEngine.connect(admin).addPolicy(cmtatAddress, sel, pausePolicyAddress, []); + await policyEngine.connect(admin).addPolicy(cmtatAddress, sel, rbacPolicyAddress, []); } // Transfer selectors get PausePolicy only (no RBAC - anyone can transfer) - await policyEngine.connect(admin).addPolicy(cmtatAddress, transferSelector, pausePolicyAddress, []) - await policyEngine.connect(admin).addPolicy(cmtatAddress, transferFromSelector, pausePolicyAddress, []) + await policyEngine + .connect(admin) + .addPolicy(cmtatAddress, transferSelector, pausePolicyAddress, []); + await policyEngine + .connect(admin) + .addPolicy(cmtatAddress, transferFromSelector, pausePolicyAddress, []); // Grant operation allowances const opAllowances = [ @@ -288,51 +363,100 @@ function createStandardFixture (deployTokenFn) { [setSnapshotEngineSelector, SNAPSHOOTER_ROLE], [setCCIPAdminSelector, DEFAULT_ADMIN_ROLE], [crosschainMintSelector, CROSS_CHAIN_ROLE], - [crosschainBurnSelector, CROSS_CHAIN_ROLE] - ] + [crosschainBurnSelector, CROSS_CHAIN_ROLE], + ]; for (const [sel, role] of opAllowances) { - await rbacPolicy.connect(admin).grantOperationAllowanceToRole(sel, role) + await rbacPolicy.connect(admin).grantOperationAllowanceToRole(sel, role); } // Grant roles to admin - const adminRoles = [MINTER_ROLE, BURNER_ROLE, ENFORCER_ROLE, ERC20ENFORCER_ROLE, DOCUMENT_ROLE, SNAPSHOOTER_ROLE] + const adminRoles = [ + MINTER_ROLE, + BURNER_ROLE, + ENFORCER_ROLE, + ERC20ENFORCER_ROLE, + DOCUMENT_ROLE, + SNAPSHOOTER_ROLE, + ]; for (const role of adminRoles) { - await rbacPolicy.connect(admin).grantRole(role, admin.address) + await rbacPolicy.connect(admin).grantRole(role, admin.address); } return { - _, admin, address1, address2, address3, deployerAddress, fakeRuleEngine, ruleEngine, attacker, - policyEngine, policyEngineAddress, pausePolicy, pausePolicyAddress, - rbacPolicy, rbacPolicyAddress, - cmtat, cmtatAddress, - mintSelector, burnSelector, selfBurnSelector, burnFromSelector, - transferSelector, transferFromSelector, - forcedTransferSelector, freezeSelector, unfreezeSelector, - setNameSelector, setTokenIdSelector, - setDocumentEngineSelector, setSnapshotEngineSelector, setCCIPAdminSelector, - crosschainMintSelector, crosschainBurnSelector, - erc1404: true - } - } + _, + admin, + address1, + address2, + address3, + deployerAddress, + fakeRuleEngine, + ruleEngine, + attacker, + policyEngine, + policyEngineAddress, + pausePolicy, + pausePolicyAddress, + rbacPolicy, + rbacPolicyAddress, + cmtat, + cmtatAddress, + mintSelector, + burnSelector, + selfBurnSelector, + burnFromSelector, + transferSelector, + transferFromSelector, + forcedTransferSelector, + freezeSelector, + unfreezeSelector, + setNameSelector, + setTokenIdSelector, + setDocumentEngineSelector, + setSnapshotEngineSelector, + setCCIPAdminSelector, + crosschainMintSelector, + crosschainBurnSelector, + erc1404: true, + }; + }; } /** * Creates a fixture for lite (AccessControl + PolicyEngine for validation) deployment tests. * Deploys just the PolicyEngine and token; no PausePolicy or RBAC needed. */ -function createLiteFixture (deployTokenFn) { - return async function liteFixture () { - const [_, admin, address1, address2, address3, deployerAddress, fakeRuleEngine, ruleEngine, attacker] = await ethers.getSigners() - - const policyEngine = await deployPolicyEngine(true, admin.address) - const cmtat = await deployTokenFn(_.address, admin.address, await policyEngine.getAddress()) +function createLiteFixture(deployTokenFn) { + return async function liteFixture() { + const [ + _, + admin, + address1, + address2, + address3, + deployerAddress, + fakeRuleEngine, + ruleEngine, + attacker, + ] = await ethers.getSigners(); + + const policyEngine = await deployPolicyEngine(true, admin.address); + const cmtat = await deployTokenFn(_.address, admin.address, await policyEngine.getAddress()); return { - _, admin, address1, address2, address3, deployerAddress, fakeRuleEngine, ruleEngine, attacker, - policyEngine, cmtat, - erc1404: true - } - } + _, + admin, + address1, + address2, + address3, + deployerAddress, + fakeRuleEngine, + ruleEngine, + attacker, + policyEngine, + cmtat, + erc1404: true, + }; + }; } module.exports = { @@ -362,5 +486,5 @@ module.exports = { deployCCTLiteUpgradeable, deployCCTLiteUUPSUpgradeable, createStandardFixture, - createLiteFixture -} + createLiteFixture, +}; diff --git a/test/testUtils.js b/test/testUtils.js index 9e8d279..e44197a 100644 --- a/test/testUtils.js +++ b/test/testUtils.js @@ -1,24 +1,40 @@ -const {ethers, upgrades } = require("hardhat"); +const { ethers, upgrades } = require('hardhat'); const ZERO_ADDRESS = ethers.ZeroAddress; const DEPLOYMENT_DECIMAL = 0; const TERMS = { - name: "Token Terms v2", - uri: "https://cmta.ch/standards/cmta-token-cmtat", - documentHash: ethers.keccak256(ethers.toUtf8Bytes("terms-v2")) + name: 'Token Terms v2', + uri: 'https://cmta.ch/standards/cmta-token-cmtat', + documentHash: ethers.keccak256(ethers.toUtf8Bytes('terms-v2')), }; -const ERC20_ATTRIBUTES = ["Security Token", "ST", DEPLOYMENT_DECIMAL]; -const EXTRA_INFO_ATTRIBUTES_STANDALONE = ["1234567890", TERMS, "ComplianceTokenCMTATStandalone smart contract"]; -const EXTRA_INFO_ATTRIBUTES_UPGRADEABLE = ["1234567890", TERMS, "ComplianceTokenCMTATUpgradeable smart contract"]; -const EXTRA_INFO_ATTRIBUTES_LITE_STANDALONE = ["1234567890", TERMS, "ComplianceTokenCMTATLiteStandalone smart contract"]; -const EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE = ["1234567890", TERMS, "ComplianceTokenCMTATLiteUpgradeable smart contract"]; +const ERC20_ATTRIBUTES = ['Security Token', 'ST', DEPLOYMENT_DECIMAL]; +const EXTRA_INFO_ATTRIBUTES_STANDALONE = [ + '1234567890', + TERMS, + 'ComplianceTokenCMTATStandalone smart contract', +]; +const EXTRA_INFO_ATTRIBUTES_UPGRADEABLE = [ + '1234567890', + TERMS, + 'ComplianceTokenCMTATUpgradeable smart contract', +]; +const EXTRA_INFO_ATTRIBUTES_LITE_STANDALONE = [ + '1234567890', + TERMS, + 'ComplianceTokenCMTATLiteStandalone smart contract', +]; +const EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE = [ + '1234567890', + TERMS, + 'ComplianceTokenCMTATLiteUpgradeable smart contract', +]; // Role constants matching CMTAT convention -const MINTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes("MINTER_ROLE")); -const BURNER_ROLE = ethers.keccak256(ethers.toUtf8Bytes("BURNER_ROLE")); -const DEFAULT_ADMIN_ROLE = "0x0000000000000000000000000000000000000000000000000000000000000000"; +const MINTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('MINTER_ROLE')); +const BURNER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_ROLE')); +const DEFAULT_ADMIN_ROLE = '0x0000000000000000000000000000000000000000000000000000000000000000'; -async function etherAddresses () { +async function etherAddresses() { const [ admin, forwarder, @@ -28,8 +44,8 @@ async function etherAddresses () { deployerAddress, fakeRuleEngine, ruleEngine, - attacker - ] = await ethers.getSigners() + attacker, + ] = await ethers.getSigners(); return { admin, forwarder, @@ -39,22 +55,22 @@ async function etherAddresses () { deployerAddress, fakeRuleEngine, ruleEngine, - attacker - } + attacker, + }; } /** * Deploy PolicyEngine through upgrades.deployProxy (ERC1967 proxy pattern) */ async function deployPolicyEngine(defaultAllow, initialOwner) { - const PolicyEngineFactory = await ethers.getContractFactory("PolicyEngine"); + const PolicyEngineFactory = await ethers.getContractFactory('PolicyEngine'); const policyEngine = await upgrades.deployProxy( PolicyEngineFactory, [defaultAllow, initialOwner], { initializer: 'initialize', - unsafeAllow: ['constructor'] - } + unsafeAllow: ['constructor'], + }, ); return policyEngine; } @@ -64,15 +80,15 @@ async function deployPolicyEngine(defaultAllow, initialOwner) { */ async function deployPausePolicy(policyEngineAddress, ownerAddress, initiallyPaused = false) { const abiCoder = ethers.AbiCoder.defaultAbiCoder(); - const configParams = abiCoder.encode(["bool"], [initiallyPaused]); - const PausePolicyFactory = await ethers.getContractFactory("PausePolicy"); + const configParams = abiCoder.encode(['bool'], [initiallyPaused]); + const PausePolicyFactory = await ethers.getContractFactory('PausePolicy'); const pausePolicy = await upgrades.deployProxy( PausePolicyFactory, [policyEngineAddress, ownerAddress, configParams], { initializer: 'initialize', - unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'] - } + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], + }, ); return pausePolicy; } @@ -81,14 +97,14 @@ async function deployPausePolicy(policyEngineAddress, ownerAddress, initiallyPau * Deploy RoleBasedAccessControlPolicy through upgrades.deployProxy */ async function deployRBACPolicy(policyEngineAddress, ownerAddress) { - const RBACFactory = await ethers.getContractFactory("RoleBasedAccessControlPolicy"); + const RBACFactory = await ethers.getContractFactory('RoleBasedAccessControlPolicy'); const rbacPolicy = await upgrades.deployProxy( RBACFactory, - [policyEngineAddress, ownerAddress, "0x"], + [policyEngineAddress, ownerAddress, '0x'], { initializer: 'initialize', - unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'] - } + unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], + }, ); return rbacPolicy; } @@ -96,40 +112,40 @@ async function deployRBACPolicy(policyEngineAddress, ownerAddress) { /** * Deploy ComplianceTokenCMTATStandalone (non-upgradeable) */ -async function deployComplianceTokenCMTATStandalone(forwarderAddress, adminAddress, policyEngineAddress) { - const cmtat = await ethers.deployContract( - "ComplianceTokenCMTATStandalone", - [ - forwarderAddress, - adminAddress, - ERC20_ATTRIBUTES, - EXTRA_INFO_ATTRIBUTES_STANDALONE, - policyEngineAddress - ] - ); +async function deployComplianceTokenCMTATStandalone( + forwarderAddress, + adminAddress, + policyEngineAddress, +) { + const cmtat = await ethers.deployContract('ComplianceTokenCMTATStandalone', [ + forwarderAddress, + adminAddress, + ERC20_ATTRIBUTES, + EXTRA_INFO_ATTRIBUTES_STANDALONE, + policyEngineAddress, + ]); return cmtat; } /** * Deploy ComplianceTokenCMTATUpgradeable (proxy) */ -async function deployComplianceTokenCMTATUpgradeable(forwarderAddress, adminAddress, policyEngineAddress) { +async function deployComplianceTokenCMTATUpgradeable( + forwarderAddress, + adminAddress, + policyEngineAddress, +) { const ETHERS_CMTAT_PROXY_FACTORY = await ethers.getContractFactory( - 'ComplianceTokenCMTATUpgradeable' + 'ComplianceTokenCMTATUpgradeable', ); const cmtat = await upgrades.deployProxy( ETHERS_CMTAT_PROXY_FACTORY, - [ - adminAddress, - ERC20_ATTRIBUTES, - EXTRA_INFO_ATTRIBUTES_UPGRADEABLE, - policyEngineAddress - ], + [adminAddress, ERC20_ATTRIBUTES, EXTRA_INFO_ATTRIBUTES_UPGRADEABLE, policyEngineAddress], { initializer: 'initialize', constructorArgs: [forwarderAddress], - unsafeAllow: ['missing-initializer', 'constructor'] - } + unsafeAllow: ['missing-initializer', 'constructor'], + }, ); return cmtat; } @@ -137,40 +153,46 @@ async function deployComplianceTokenCMTATUpgradeable(forwarderAddress, adminAddr /** * Deploy ComplianceTokenCMTATLiteStandalone (non-upgradeable) */ -async function deployComplianceTokenCMTATLiteStandalone(forwarderAddress, adminAddress, policyEngineAddress) { - const cmtat = await ethers.deployContract( - "ComplianceTokenCMTATLiteStandalone", - [ - forwarderAddress, - adminAddress, - ERC20_ATTRIBUTES, - EXTRA_INFO_ATTRIBUTES_LITE_STANDALONE, - policyEngineAddress - ] - ); +async function deployComplianceTokenCMTATLiteStandalone( + forwarderAddress, + adminAddress, + policyEngineAddress, +) { + const cmtat = await ethers.deployContract('ComplianceTokenCMTATLiteStandalone', [ + forwarderAddress, + adminAddress, + ERC20_ATTRIBUTES, + EXTRA_INFO_ATTRIBUTES_LITE_STANDALONE, + policyEngineAddress, + ]); return cmtat; } /** * Deploy ComplianceTokenCMTATLiteUpgradeable (proxy) */ -async function deployComplianceTokenCMTATLiteUpgradeable(forwarderAddress, adminAddress, policyEngineAddress) { +async function deployComplianceTokenCMTATLiteUpgradeable( + forwarderAddress, + adminAddress, + policyEngineAddress, +) { const ETHERS_CMTAT_PROXY_FACTORY = await ethers.getContractFactory( - 'ComplianceTokenCMTATLiteUpgradeable' + 'ComplianceTokenCMTATLiteUpgradeable', ); const cmtat = await upgrades.deployProxy( ETHERS_CMTAT_PROXY_FACTORY, - [ - adminAddress, - ERC20_ATTRIBUTES, - EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE, - policyEngineAddress - ], + [adminAddress, ERC20_ATTRIBUTES, EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE, policyEngineAddress], { initializer: 'initialize', - constructorArgs: [forwarderAddress, adminAddress, ERC20_ATTRIBUTES, EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE, policyEngineAddress], - unsafeAllow: ['missing-initializer', 'constructor'] - } + constructorArgs: [ + forwarderAddress, + adminAddress, + ERC20_ATTRIBUTES, + EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE, + policyEngineAddress, + ], + unsafeAllow: ['missing-initializer', 'constructor'], + }, ); return cmtat; } @@ -191,4 +213,4 @@ module.exports = { deployComplianceTokenCMTATUpgradeable, deployComplianceTokenCMTATLiteStandalone, deployComplianceTokenCMTATLiteUpgradeable, -}; \ No newline at end of file +}; From 435f974a1eacbfc1807613570515f2b596575803 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Wed, 15 Apr 2026 17:01:37 +0100 Subject: [PATCH 28/57] Update readme and fix lint unused var --- README.md | 32 ++++++++++++++++++++ test/common/ace/RBACPolicyCommon.js | 5 --- test/custom/transferValidationPolicy.test.js | 9 +----- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 62647f8..c23c251 100644 --- a/README.md +++ b/README.md @@ -237,6 +237,38 @@ To run tests: npx hardhat test ``` +# Linting & Formatting + +## ESLint + +Lint JavaScript files (tests, scripts, config): + +```shell +npm run lint +``` + +Auto-fix fixable issues: + +```shell +npm run lint:fix +``` + +## Prettier + +Check formatting for JS, JSON, Markdown, and Solidity: + +```shell +npm run format:check +``` + +Auto-format all files: + +```shell +npm run format +``` + +Solidity formatting uses [prettier-plugin-solidity](https://github.com/prettier-solidity/prettier-plugin-solidity) and is scoped to `contracts/**/*.sol` only (submodules and dependencies are excluded). + # Scripts ## Deployment scripts diff --git a/test/common/ace/RBACPolicyCommon.js b/test/common/ace/RBACPolicyCommon.js index d2899b5..4efe456 100644 --- a/test/common/ace/RBACPolicyCommon.js +++ b/test/common/ace/RBACPolicyCommon.js @@ -1,14 +1,9 @@ const { expect } = require('chai'); const { MINTER_ROLE, - BURNER_ROLE, BURNER_FROM_ROLE, BURNER_SELF_ROLE, ENFORCER_ROLE, - ERC20ENFORCER_ROLE, - DEFAULT_ADMIN_ROLE, - DOCUMENT_ROLE, - SNAPSHOOTER_ROLE, CROSS_CHAIN_ROLE, } = require('../../deploymentUtils'); diff --git a/test/custom/transferValidationPolicy.test.js b/test/custom/transferValidationPolicy.test.js index 3884b3c..0a5b470 100644 --- a/test/custom/transferValidationPolicy.test.js +++ b/test/custom/transferValidationPolicy.test.js @@ -1,14 +1,7 @@ const { ethers, upgrades } = require('hardhat'); const { expect } = require('chai'); const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers'); -const { - fixture, - MINTER_ROLE, - DEPLOYMENT_DECIMAL, - TERMS, - deployPolicyEngine, - deployCCTLiteStandalone, -} = require('../deploymentUtils'); +const { fixture, deployPolicyEngine, deployCCTLiteStandalone } = require('../deploymentUtils'); // Parameter name hashes matching the ERC20TransferFromExtractor const PARAM_SPENDER = ethers.keccak256(ethers.toUtf8Bytes('spender')); From 724ab3df15695d56cbcf1419945fc7c14bd13de7 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Wed, 15 Apr 2026 17:39:00 +0100 Subject: [PATCH 29/57] add authorization clause in PolicyProtected attachPolicyEngine, delete redundant testUtils --- .../modified/PolicyProtectedUpgradeable.sol | 3 + .../modules/lite/CCTCMTATBasePolicyEngine.sol | 4 +- contracts/modules/standard/CCTCommon.sol | 5 +- test/testUtils.js | 216 ------------------ 4 files changed, 5 insertions(+), 223 deletions(-) delete mode 100644 test/testUtils.js diff --git a/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol b/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol index a536871..16a9ba9 100644 --- a/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol +++ b/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol @@ -76,8 +76,11 @@ abstract contract PolicyProtectedUpgradeable is Initializable, ERC165Upgradeable _; } + function _authorizeAttachPolicyEngine(address policyEngine) internal virtual; + /// @inheritdoc IPolicyProtected function attachPolicyEngine(address policyEngine) external virtual override { + _authorizeAttachPolicyEngine(policyEngine); _attachPolicyEngine(policyEngine); } diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index 0dbb666..65fed2b 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -170,9 +170,7 @@ abstract contract CCTCMTATBasePolicyEngine is } } - function attachPolicyEngine(address policyEngine) external virtual override onlyRole(DEFAULT_ADMIN_ROLE) { - _attachPolicyEngine(policyEngine); - } + function _authorizeAttachPolicyEngine(address) internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} /*////////////////////////////////////////////////////////////// INTERNAL/PRIVATE FUNCTIONS diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index c4f345f..c7e2368 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -176,10 +176,7 @@ abstract contract CCTCommon is return CMTATBaseCommon.transferFrom(from, to, value); } - // Add onlyOwner modifier - function attachPolicyEngine(address policyEngine) external virtual override onlyOwner { - _attachPolicyEngine(policyEngine); - } + function _authorizeAttachPolicyEngine(address) internal virtual override onlyOwner {} /* ============ View functions ============ */ diff --git a/test/testUtils.js b/test/testUtils.js deleted file mode 100644 index e44197a..0000000 --- a/test/testUtils.js +++ /dev/null @@ -1,216 +0,0 @@ -const { ethers, upgrades } = require('hardhat'); - -const ZERO_ADDRESS = ethers.ZeroAddress; -const DEPLOYMENT_DECIMAL = 0; -const TERMS = { - name: 'Token Terms v2', - uri: 'https://cmta.ch/standards/cmta-token-cmtat', - documentHash: ethers.keccak256(ethers.toUtf8Bytes('terms-v2')), -}; -const ERC20_ATTRIBUTES = ['Security Token', 'ST', DEPLOYMENT_DECIMAL]; -const EXTRA_INFO_ATTRIBUTES_STANDALONE = [ - '1234567890', - TERMS, - 'ComplianceTokenCMTATStandalone smart contract', -]; -const EXTRA_INFO_ATTRIBUTES_UPGRADEABLE = [ - '1234567890', - TERMS, - 'ComplianceTokenCMTATUpgradeable smart contract', -]; -const EXTRA_INFO_ATTRIBUTES_LITE_STANDALONE = [ - '1234567890', - TERMS, - 'ComplianceTokenCMTATLiteStandalone smart contract', -]; -const EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE = [ - '1234567890', - TERMS, - 'ComplianceTokenCMTATLiteUpgradeable smart contract', -]; - -// Role constants matching CMTAT convention -const MINTER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('MINTER_ROLE')); -const BURNER_ROLE = ethers.keccak256(ethers.toUtf8Bytes('BURNER_ROLE')); -const DEFAULT_ADMIN_ROLE = '0x0000000000000000000000000000000000000000000000000000000000000000'; - -async function etherAddresses() { - const [ - admin, - forwarder, - address1, - address2, - address3, - deployerAddress, - fakeRuleEngine, - ruleEngine, - attacker, - ] = await ethers.getSigners(); - return { - admin, - forwarder, - address1, - address2, - address3, - deployerAddress, - fakeRuleEngine, - ruleEngine, - attacker, - }; -} - -/** - * Deploy PolicyEngine through upgrades.deployProxy (ERC1967 proxy pattern) - */ -async function deployPolicyEngine(defaultAllow, initialOwner) { - const PolicyEngineFactory = await ethers.getContractFactory('PolicyEngine'); - const policyEngine = await upgrades.deployProxy( - PolicyEngineFactory, - [defaultAllow, initialOwner], - { - initializer: 'initialize', - unsafeAllow: ['constructor'], - }, - ); - return policyEngine; -} - -/** - * Deploy PausePolicy through upgrades.deployProxy - */ -async function deployPausePolicy(policyEngineAddress, ownerAddress, initiallyPaused = false) { - const abiCoder = ethers.AbiCoder.defaultAbiCoder(); - const configParams = abiCoder.encode(['bool'], [initiallyPaused]); - const PausePolicyFactory = await ethers.getContractFactory('PausePolicy'); - const pausePolicy = await upgrades.deployProxy( - PausePolicyFactory, - [policyEngineAddress, ownerAddress, configParams], - { - initializer: 'initialize', - unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], - }, - ); - return pausePolicy; -} - -/** - * Deploy RoleBasedAccessControlPolicy through upgrades.deployProxy - */ -async function deployRBACPolicy(policyEngineAddress, ownerAddress) { - const RBACFactory = await ethers.getContractFactory('RoleBasedAccessControlPolicy'); - const rbacPolicy = await upgrades.deployProxy( - RBACFactory, - [policyEngineAddress, ownerAddress, '0x'], - { - initializer: 'initialize', - unsafeAllow: ['constructor', 'missing-initializer', 'missing-initializer-call'], - }, - ); - return rbacPolicy; -} - -/** - * Deploy ComplianceTokenCMTATStandalone (non-upgradeable) - */ -async function deployComplianceTokenCMTATStandalone( - forwarderAddress, - adminAddress, - policyEngineAddress, -) { - const cmtat = await ethers.deployContract('ComplianceTokenCMTATStandalone', [ - forwarderAddress, - adminAddress, - ERC20_ATTRIBUTES, - EXTRA_INFO_ATTRIBUTES_STANDALONE, - policyEngineAddress, - ]); - return cmtat; -} - -/** - * Deploy ComplianceTokenCMTATUpgradeable (proxy) - */ -async function deployComplianceTokenCMTATUpgradeable( - forwarderAddress, - adminAddress, - policyEngineAddress, -) { - const ETHERS_CMTAT_PROXY_FACTORY = await ethers.getContractFactory( - 'ComplianceTokenCMTATUpgradeable', - ); - const cmtat = await upgrades.deployProxy( - ETHERS_CMTAT_PROXY_FACTORY, - [adminAddress, ERC20_ATTRIBUTES, EXTRA_INFO_ATTRIBUTES_UPGRADEABLE, policyEngineAddress], - { - initializer: 'initialize', - constructorArgs: [forwarderAddress], - unsafeAllow: ['missing-initializer', 'constructor'], - }, - ); - return cmtat; -} - -/** - * Deploy ComplianceTokenCMTATLiteStandalone (non-upgradeable) - */ -async function deployComplianceTokenCMTATLiteStandalone( - forwarderAddress, - adminAddress, - policyEngineAddress, -) { - const cmtat = await ethers.deployContract('ComplianceTokenCMTATLiteStandalone', [ - forwarderAddress, - adminAddress, - ERC20_ATTRIBUTES, - EXTRA_INFO_ATTRIBUTES_LITE_STANDALONE, - policyEngineAddress, - ]); - return cmtat; -} - -/** - * Deploy ComplianceTokenCMTATLiteUpgradeable (proxy) - */ -async function deployComplianceTokenCMTATLiteUpgradeable( - forwarderAddress, - adminAddress, - policyEngineAddress, -) { - const ETHERS_CMTAT_PROXY_FACTORY = await ethers.getContractFactory( - 'ComplianceTokenCMTATLiteUpgradeable', - ); - const cmtat = await upgrades.deployProxy( - ETHERS_CMTAT_PROXY_FACTORY, - [adminAddress, ERC20_ATTRIBUTES, EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE, policyEngineAddress], - { - initializer: 'initialize', - constructorArgs: [ - forwarderAddress, - adminAddress, - ERC20_ATTRIBUTES, - EXTRA_INFO_ATTRIBUTES_LITE_UPGRADEABLE, - policyEngineAddress, - ], - unsafeAllow: ['missing-initializer', 'constructor'], - }, - ); - return cmtat; -} - -module.exports = { - ZERO_ADDRESS, - MINTER_ROLE, - BURNER_ROLE, - DEFAULT_ADMIN_ROLE, - DEPLOYMENT_DECIMAL, - TERMS, - ERC20_ATTRIBUTES, - etherAddresses, - deployPolicyEngine, - deployPausePolicy, - deployRBACPolicy, - deployComplianceTokenCMTATStandalone, - deployComplianceTokenCMTATUpgradeable, - deployComplianceTokenCMTATLiteStandalone, - deployComplianceTokenCMTATLiteUpgradeable, -}; From 46a56d2724340f99291ed9457e2818a30b4d5ab1 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Thu, 16 Apr 2026 11:12:53 +0100 Subject: [PATCH 30/57] Remove ERC-2771 support for CMTAT+ACE --- .../ComplianceTokenCMTATLiteStandalone.sol | 12 ++-- ...omplianceTokenCMTATLiteUUPSUpgradeable.sol | 11 +--- .../ComplianceTokenCMTATLiteUpgradeable.sol | 24 +------- .../ComplianceTokenCMTATStandalone.sol | 13 ++--- .../ComplianceTokenCMTATUUPSUpgradeable.sol | 11 +--- .../ComplianceTokenCMTATUpgradeable.sol | 11 +--- .../modules/lite/CCTCMTATBaseERC2771.sol | 54 ------------------ contracts/modules/standard/CCTBaseERC2771.sol | 57 ------------------- scripts/demo.js | 2 - scripts/lite/deploy-lite-standalone.js | 10 ++-- scripts/lite/deploy-lite-upgradeable.js | 16 ++---- scripts/lite/deploy-lite-uups.js | 10 ++-- .../standard/deploy-standard-standalone.js | 10 ++-- .../standard/deploy-standard-upgradeable.js | 10 ++-- scripts/standard/deploy-standard-uups.js | 10 ++-- slither.config.json | 2 +- test/common/cmtat/DocumentModuleCommon.js | 1 - test/custom/transferValidationPolicy.test.js | 1 - .../liteUUPSUpgradeableDeployment.test.js | 3 - .../uupsUpgradeableDeployment.test.js | 3 - test/deploymentUtils.js | 22 +------ 21 files changed, 54 insertions(+), 239 deletions(-) delete mode 100644 contracts/modules/lite/CCTCMTATBaseERC2771.sol delete mode 100644 contracts/modules/standard/CCTBaseERC2771.sol diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol index a0683c6..9dabd19 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol @@ -2,9 +2,8 @@ pragma solidity ^0.8.20; -import {CCTCMTATBaseERC2771} from "../../modules/lite/CCTCMTATBaseERC2771.sol"; +import {CCTCMTATBaseERC20CrossChain} from "../../modules/lite/CCTCMTATBaseERC20CrossChain.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; @@ -13,27 +12,24 @@ import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/tokenizat * @author Chainlink * @notice Standalone Compliance Token contract with Chainlink ACE policy validation on CMTA transfers */ -contract ComplianceTokenCMTATLiteStandalone is CCTCMTATBaseERC2771 { +contract ComplianceTokenCMTATLiteStandalone is CCTCMTATBaseERC20CrossChain { /** * @notice Contract version for standalone deployment - * @param forwarderIrrevocable address of the forwarder, required for the gasless support * @param admin address of the admin of contract (Access Control) * @param ERC20Attributes_ ERC20 name, symbol and decimals * @param extraInformationAttributes_ tokenId, terms, information + * @param policyEngine_ address of the policy engine * @param snapshotEngine_ address of the snapshot engine * @param documentEngine_ address of the document engine - * @param policyEngine_ address of the policy engine */ - /// @custom:oz-upgrades-unsafe-allow constructor constructor( - address forwarderIrrevocable, address admin, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, address policyEngine_, ISnapshotEngine snapshotEngine_, IERC1643 documentEngine_ - ) ERC2771Module(forwarderIrrevocable) { + ) { // Initialize the contract to avoid front-running initialize( admin, diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol index 995f5fd..93cebb2 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol @@ -3,23 +3,18 @@ pragma solidity ^0.8.20; import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; -import {CCTCMTATBaseERC2771} from "../../modules/lite/CCTCMTATBaseERC2771.sol"; -import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {CCTCMTATBaseERC20CrossChain} from "../../modules/lite/CCTCMTATBaseERC20CrossChain.sol"; /** * @title ComplianceTokenCMTATLiteUUPSUpgradeable * @author Chainlink * @notice UUPS upgradeable lite ComplianceToken contract with Chainlink ACE policy validation on CMTA transfers */ -contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC2771, UUPSUpgradeable { +contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC20CrossChain, UUPSUpgradeable { bytes32 public constant PROXY_UPGRADE_ROLE = keccak256("PROXY_UPGRADE_ROLE"); - /** - * @notice Contract version for UUPS proxy deployment - * @param forwarderIrrevocable address of the forwarder, required for the gasless support - */ /// @custom:oz-upgrades-unsafe-allow constructor - constructor(address forwarderIrrevocable) ERC2771Module(forwarderIrrevocable) { + constructor() { // Disable the possibility to initialize the implementation _disableInitializers(); } diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol index 8617713..b191e1f 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol @@ -2,34 +2,16 @@ pragma solidity ^0.8.20; -import {CCTCMTATBaseERC2771} from "../../modules/lite/CCTCMTATBaseERC2771.sol"; -import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {CCTCMTATBaseERC20CrossChain} from "../../modules/lite/CCTCMTATBaseERC20CrossChain.sol"; /** * @title ComplianceTokenCMTATLite * @author Chainlink * @notice Standalone upgradeable lite Compliance Token contract with Chainlink ACE policy validation on CMTA transfers */ -contract ComplianceTokenCMTATLiteUpgradeable is CCTCMTATBaseERC2771 { - /** - * @notice Contract version for standalone deployment - * @param forwarderIrrevocable address of the forwarder, required for the gasless support - * @param admin address of the admin of contract (Access Control) - * @param ERC20Attributes_ ERC20 name, symbol and decimals - * @param extraInformationAttributes_ tokenId, terms, information - * @param snapshotEngine_ address of the snapshot engine - * @param documentEngine_ address of the document engine - * @param policyEngine_ address of the policy engine - */ +contract ComplianceTokenCMTATLiteUpgradeable is CCTCMTATBaseERC20CrossChain { /// @custom:oz-upgrades-unsafe-allow constructor - constructor( - address forwarderIrrevocable, - address admin, - ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, - ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, - address policyEngine_ - ) ERC2771Module(forwarderIrrevocable) { + constructor() { // Disable the possibility to initialize the implementation _disableInitializers(); } diff --git a/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol index a8f0a6e..ad27833 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol @@ -2,9 +2,8 @@ pragma solidity ^0.8.20; -import {CCTBaseERC2771} from "../../modules/standard/CCTBaseERC2771.sol"; +import {CCTCommon} from "../../modules/standard/CCTCommon.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol"; @@ -13,26 +12,24 @@ import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/engine/ID * @author Chainlink * @notice Standalone ComplianceToken contract with Chainlink ACE policy validation on all public functions */ -contract ComplianceTokenCMTATStandalone is CCTBaseERC2771 { +contract ComplianceTokenCMTATStandalone is CCTCommon { /** * @notice Contract version for standalone deployment - * @param forwarderIrrevocable address of the forwarder, required for the gasless support + * @param admin_ address of the admin/owner * @param ERC20Attributes_ ERC20 name, symbol and decimals * @param extraInformationAttributes_ tokenId, terms, information + * @param policyEngine_ address of the policy engine * @param snapshotEngine_ address of the snapshot engine * @param documentEngine_ address of the document engine - * @param policyEngine_ address of the policy engine */ - /// @custom:oz-upgrades-unsafe-allow constructor constructor( - address forwarderIrrevocable_, address admin_, ICMTATConstructor.ERC20Attributes memory ERC20Attributes_, ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_, address policyEngine_, ISnapshotEngine snapshotEngine_, IERC1643 documentEngine_ - ) ERC2771Module(forwarderIrrevocable_) { + ) { // Initialize the contract to avoid front-running initialize( admin_, diff --git a/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol b/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol index 2706053..1006306 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol @@ -3,21 +3,16 @@ pragma solidity ^0.8.20; import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; -import {CCTBaseERC2771} from "../../modules/standard/CCTBaseERC2771.sol"; -import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {CCTCommon} from "../../modules/standard/CCTCommon.sol"; /** * @title ComplianceTokenCMTATUUPSUpgradeable * @author Chainlink * @notice UUPS upgradeable ComplianceToken contract with Chainlink ACE policy validation on all public functions */ -contract ComplianceTokenCMTATUUPSUpgradeable is CCTBaseERC2771, UUPSUpgradeable { - /** - * @notice Contract version for UUPS proxy deployment - * @param forwarderIrrevocable address of the forwarder, required for the gasless support - */ +contract ComplianceTokenCMTATUUPSUpgradeable is CCTCommon, UUPSUpgradeable { /// @custom:oz-upgrades-unsafe-allow constructor - constructor(address forwarderIrrevocable) ERC2771Module(forwarderIrrevocable) { + constructor() { // Disable the possibility to initialize the implementation _disableInitializers(); } diff --git a/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol b/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol index b487830..68f69a7 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol @@ -2,21 +2,16 @@ pragma solidity ^0.8.20; -import {CCTBaseERC2771} from "../../modules/standard/CCTBaseERC2771.sol"; -import {ERC2771Module} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; +import {CCTCommon} from "../../modules/standard/CCTCommon.sol"; /** * @title ComplianceTokenCMTATUpgradeable * @author Chainlink * @notice Upgradeable ComplianceToken contract with Chainlink ACE policy validation on all public functions */ -contract ComplianceTokenCMTATUpgradeable is CCTBaseERC2771 { - /** - * @notice Contract version for upgradeable deployment - * @param forwarderIrrevocable address of the forwarder, required for the gasless support - */ +contract ComplianceTokenCMTATUpgradeable is CCTCommon { /// @custom:oz-upgrades-unsafe-allow constructor - constructor(address forwarderIrrevocable) ERC2771Module(forwarderIrrevocable) { + constructor() { // Disable the possibility to initialize the implementation _disableInitializers(); } diff --git a/contracts/modules/lite/CCTCMTATBaseERC2771.sol b/contracts/modules/lite/CCTCMTATBaseERC2771.sol deleted file mode 100644 index b3dfea8..0000000 --- a/contracts/modules/lite/CCTCMTATBaseERC2771.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - -import {CCTCMTATBaseERC20CrossChain} from "./CCTCMTATBaseERC20CrossChain.sol"; -import { - ERC2771Module, - ERC2771ContextUpgradeable -} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; -import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; - -abstract contract CCTCMTATBaseERC2771 is CCTCMTATBaseERC20CrossChain, ERC2771Module { - /*////////////////////////////////////////////////////////////// - ERC2771 MODULE - //////////////////////////////////////////////////////////////*/ - /** - * @dev This surcharge is not necessary if you do not use the 2771Module - */ - function _msgSender() - internal - view - virtual - override(ContextUpgradeable, ERC2771ContextUpgradeable) - returns (address sender) - { - return ERC2771ContextUpgradeable._msgSender(); - } - - /** - * @dev This surcharge is not necessary if you do not use the 2771Module - */ - function _contextSuffixLength() - internal - view - virtual - override(ContextUpgradeable, ERC2771ContextUpgradeable) - returns (uint256) - { - return ERC2771ContextUpgradeable._contextSuffixLength(); - } - - /** - * @dev This surcharge is not necessary if you do not use the 2771Module - */ - function _msgData() - internal - view - virtual - override(ContextUpgradeable, ERC2771ContextUpgradeable) - returns (bytes calldata) - { - return ERC2771ContextUpgradeable._msgData(); - } -} diff --git a/contracts/modules/standard/CCTBaseERC2771.sol b/contracts/modules/standard/CCTBaseERC2771.sol deleted file mode 100644 index 4a030eb..0000000 --- a/contracts/modules/standard/CCTBaseERC2771.sol +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - -import {CCTCommon} from "./CCTCommon.sol"; -import { - ERC2771Module, - ERC2771ContextUpgradeable -} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC2771Module.sol"; -import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; -import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; -import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol"; - -abstract contract CCTBaseERC2771 is CCTCommon, ERC2771Module { - /*////////////////////////////////////////////////////////////// - ERC2771 MODULE - //////////////////////////////////////////////////////////////*/ - /** - * @dev This surcharge is not necessary if you do not use the 2771Module - */ - function _msgSender() - internal - view - virtual - override(ContextUpgradeable, ERC2771ContextUpgradeable) - returns (address sender) - { - return ERC2771ContextUpgradeable._msgSender(); - } - - /** - * @dev This surcharge is not necessary if you do not use the 2771Module - */ - function _contextSuffixLength() - internal - view - virtual - override(ContextUpgradeable, ERC2771ContextUpgradeable) - returns (uint256) - { - return ERC2771ContextUpgradeable._contextSuffixLength(); - } - - /** - * @dev This surcharge is not necessary if you do not use the 2771Module - */ - function _msgData() - internal - view - virtual - override(ContextUpgradeable, ERC2771ContextUpgradeable) - returns (bytes calldata) - { - return ERC2771ContextUpgradeable._msgData(); - } -} diff --git a/scripts/demo.js b/scripts/demo.js index 35895fc..07c5a34 100644 --- a/scripts/demo.js +++ b/scripts/demo.js @@ -144,7 +144,6 @@ async function main() { * 3. Deploy ComplianceTokenCMTATStandalone * ============================================================ */ console.log('\n--- Step 3: Deploy ComplianceTokenCMTATStandalone ---'); - const forwarderIrrevocable = ZeroAddress; const ERC20Attributes = { name: 'Security Token', symbol: 'ST', @@ -163,7 +162,6 @@ async function main() { const CMTATFactory = await ethers.getContractFactory('ComplianceTokenCMTATStandalone', deployer); const cmtat = await CMTATFactory.deploy( - forwarderIrrevocable, admin, ERC20Attributes, extraInformationAttributes, diff --git a/scripts/lite/deploy-lite-standalone.js b/scripts/lite/deploy-lite-standalone.js index dbf68f1..ea81e59 100644 --- a/scripts/lite/deploy-lite-standalone.js +++ b/scripts/lite/deploy-lite-standalone.js @@ -28,9 +28,10 @@ async function main() { console.log('Deploying to network:', network.name, 'with account:', deployer.address); } - // To change - const forwarderIrrevocable = ZeroAddress; + // To change - set to deployed engine addresses if needed const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; + const snapshotEngine = ZeroAddress; + const documentEngine = ZeroAddress; const ERC20Attributes = { name: 'Security Token', symbol: 'ST', @@ -57,13 +58,12 @@ async function main() { deployer, ); const cmtat = await CMTATFactory.deploy( - forwarderIrrevocable, admin, ERC20Attributes, extraInformationAttributes, policyEngineAddress, - ZeroAddress, - ZeroAddress, + snapshotEngine, + documentEngine, ); await cmtat.waitForDeployment(); diff --git a/scripts/lite/deploy-lite-upgradeable.js b/scripts/lite/deploy-lite-upgradeable.js index 84ea140..2dce397 100644 --- a/scripts/lite/deploy-lite-upgradeable.js +++ b/scripts/lite/deploy-lite-upgradeable.js @@ -28,9 +28,10 @@ async function main() { console.log('Deploying to network:', network.name, 'with account:', deployer.address); } - // To change - const forwarderIrrevocable = ZeroAddress; + // To change - set to deployed engine addresses if needed const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; + const snapshotEngine = ZeroAddress; + const documentEngine = ZeroAddress; const ERC20Attributes = ['Security Token', 'ST', 8]; const terms = { name: 'Token Terms v1', @@ -54,18 +55,11 @@ async function main() { ERC20Attributes, extraInformationAttributes, policyEngineAddress, - ZeroAddress, - ZeroAddress, + snapshotEngine, + documentEngine, ], { initializer: 'initialize', - constructorArgs: [ - forwarderIrrevocable, - admin, - ERC20Attributes, - extraInformationAttributes, - policyEngineAddress, - ], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, }, diff --git a/scripts/lite/deploy-lite-uups.js b/scripts/lite/deploy-lite-uups.js index 3073928..0d5795c 100644 --- a/scripts/lite/deploy-lite-uups.js +++ b/scripts/lite/deploy-lite-uups.js @@ -28,9 +28,10 @@ async function main() { console.log('Deploying to network:', network.name, 'with account:', deployer.address); } - // To change - const forwarderIrrevocable = ZeroAddress; + // To change - set to deployed engine addresses if needed const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; + const snapshotEngine = ZeroAddress; + const documentEngine = ZeroAddress; const ERC20Attributes = ['Security Token', 'ST', 8]; const terms = { name: 'Token Terms v1', @@ -57,12 +58,11 @@ async function main() { ERC20Attributes, extraInformationAttributes, policyEngineAddress, - ZeroAddress, - ZeroAddress, + snapshotEngine, + documentEngine, ], { initializer: 'initialize', - constructorArgs: [forwarderIrrevocable], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', diff --git a/scripts/standard/deploy-standard-standalone.js b/scripts/standard/deploy-standard-standalone.js index e94d4ea..3c1eecc 100644 --- a/scripts/standard/deploy-standard-standalone.js +++ b/scripts/standard/deploy-standard-standalone.js @@ -28,9 +28,10 @@ async function main() { console.log('Deploying to network:', network.name, 'with account:', deployer.address); } - // To change - const forwarderIrrevocable = ZeroAddress; + // To change - set to deployed engine addresses if needed const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; + const snapshotEngine = ZeroAddress; + const documentEngine = ZeroAddress; const ERC20Attributes = { name: 'Security Token', symbol: 'ST', @@ -54,13 +55,12 @@ async function main() { const CMTATFactory = await ethers.getContractFactory('ComplianceTokenCMTATStandalone', deployer); const cmtat = await CMTATFactory.deploy( - forwarderIrrevocable, admin, ERC20Attributes, extraInformationAttributes, policyEngineAddress, - ZeroAddress, - ZeroAddress, + snapshotEngine, + documentEngine, ); await cmtat.waitForDeployment(); diff --git a/scripts/standard/deploy-standard-upgradeable.js b/scripts/standard/deploy-standard-upgradeable.js index 1cd676e..46f2f8a 100644 --- a/scripts/standard/deploy-standard-upgradeable.js +++ b/scripts/standard/deploy-standard-upgradeable.js @@ -28,9 +28,10 @@ async function main() { console.log('Deploying to network:', network.name, 'with account:', deployer.address); } - // To change - const forwarderIrrevocable = ZeroAddress; + // To change - set to deployed engine addresses if needed const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; + const snapshotEngine = ZeroAddress; + const documentEngine = ZeroAddress; const ERC20Attributes = ['Security Token', 'ST', 0]; const terms = { name: 'Token Terms v2', @@ -54,12 +55,11 @@ async function main() { ERC20Attributes, extraInformationAttributes, policyEngineAddress, - ZeroAddress, - ZeroAddress, + snapshotEngine, + documentEngine, ], { initializer: 'initialize', - constructorArgs: [forwarderIrrevocable], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, }, diff --git a/scripts/standard/deploy-standard-uups.js b/scripts/standard/deploy-standard-uups.js index a0a82de..7d53b33 100644 --- a/scripts/standard/deploy-standard-uups.js +++ b/scripts/standard/deploy-standard-uups.js @@ -28,9 +28,10 @@ async function main() { console.log('Deploying to network:', network.name, 'with account:', deployer.address); } - // To change - const forwarderIrrevocable = ZeroAddress; + // To change - set to deployed engine addresses if needed const admin = isHardhatNetwork ? deployer.address : '0x1000000000000000000000000000000000000001'; + const snapshotEngine = ZeroAddress; + const documentEngine = ZeroAddress; const ERC20Attributes = ['Security Token', 'ST', 0]; const terms = { name: 'Token Terms v2', @@ -54,12 +55,11 @@ async function main() { ERC20Attributes, extraInformationAttributes, policyEngineAddress, - ZeroAddress, - ZeroAddress, + snapshotEngine, + documentEngine, ], { initializer: 'initialize', - constructorArgs: [forwarderIrrevocable], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', diff --git a/slither.config.json b/slither.config.json index 911c4f3..0f6729f 100644 --- a/slither.config.json +++ b/slither.config.json @@ -1,4 +1,4 @@ { - "filter_paths": "node_modules,submodules,contracts/test", + "filter_paths": "node_modules,submodules,test", "compile_force_framework": "foundry" } diff --git a/test/common/cmtat/DocumentModuleCommon.js b/test/common/cmtat/DocumentModuleCommon.js index bbafbbb..f96c1cf 100644 --- a/test/common/cmtat/DocumentModuleCommon.js +++ b/test/common/cmtat/DocumentModuleCommon.js @@ -102,7 +102,6 @@ function DocumentModuleCommon() { // Deploy a fresh token with no document engine const policyEngineAddress = await this.policyEngine.getAddress(); const freshCmtat = await deployCCTStandalone( - ethers.ZeroAddress, this.admin.address, policyEngineAddress, ); diff --git a/test/custom/transferValidationPolicy.test.js b/test/custom/transferValidationPolicy.test.js index 0a5b470..cb97ad0 100644 --- a/test/custom/transferValidationPolicy.test.js +++ b/test/custom/transferValidationPolicy.test.js @@ -48,7 +48,6 @@ describe('TransferValidationPolicy', function () { // Deploy Lite Standalone token this.cmtat = await deployCCTLiteStandalone( - this._.address, this.admin.address, this.policyEngineAddress, ); diff --git a/test/deployment/liteUUPSUpgradeableDeployment.test.js b/test/deployment/liteUUPSUpgradeableDeployment.test.js index a1e3e90..0165bee 100644 --- a/test/deployment/liteUUPSUpgradeableDeployment.test.js +++ b/test/deployment/liteUUPSUpgradeableDeployment.test.js @@ -70,7 +70,6 @@ describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { this.admin, ); await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { - constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', @@ -84,7 +83,6 @@ describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { ); await expect( upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { - constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', @@ -104,7 +102,6 @@ describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { this.admin, ); const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { - constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', diff --git a/test/deployment/uupsUpgradeableDeployment.test.js b/test/deployment/uupsUpgradeableDeployment.test.js index 2a658d2..8d6f6b6 100644 --- a/test/deployment/uupsUpgradeableDeployment.test.js +++ b/test/deployment/uupsUpgradeableDeployment.test.js @@ -50,7 +50,6 @@ describe('ComplianceTokenCMTATUUPSUpgradeable', function () { this.admin, ); await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { - constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', @@ -64,7 +63,6 @@ describe('ComplianceTokenCMTATUUPSUpgradeable', function () { ); await expect( upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { - constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', @@ -83,7 +81,6 @@ describe('ComplianceTokenCMTATUUPSUpgradeable', function () { this.admin, ); const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { - constructorArgs: [this._.address], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', diff --git a/test/deploymentUtils.js b/test/deploymentUtils.js index ae447fa..b5fec88 100644 --- a/test/deploymentUtils.js +++ b/test/deploymentUtils.js @@ -95,14 +95,12 @@ async function deployRBACPolicy(policyEngineAddress, ownerAddress) { /* ======== Standard Contract Deploy Helpers ======== */ async function deployCCTStandalone( - forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS, ) { const cmtat = await ethers.deployContract('ComplianceTokenCMTATStandalone', [ - forwarder, admin, ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], ['CMTAT_ISIN', TERMS, 'CMTAT_info'], @@ -114,7 +112,6 @@ async function deployCCTStandalone( } async function deployCCTUpgradeable( - forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, @@ -133,7 +130,6 @@ async function deployCCTUpgradeable( ], { initializer: 'initialize', - constructorArgs: [forwarder], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, }, @@ -144,14 +140,12 @@ async function deployCCTUpgradeable( /* ======== Lite Contract Deploy Helpers ======== */ async function deployCCTLiteStandalone( - forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, documentEngine = ZERO_ADDRESS, ) { const cmtat = await ethers.deployContract('ComplianceTokenCMTATLiteStandalone', [ - forwarder, admin, ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], ['CMTAT_ISIN', TERMS, 'CMTAT_info'], @@ -163,7 +157,6 @@ async function deployCCTLiteStandalone( } async function deployCCTLiteUpgradeable( - forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, @@ -182,13 +175,6 @@ async function deployCCTLiteUpgradeable( ], { initializer: 'initialize', - constructorArgs: [ - forwarder, - admin, - ['CMTA Token', 'CMTAT', DEPLOYMENT_DECIMAL], - ['CMTAT_ISIN', TERMS, 'CMTAT_info'], - policyEngineAddress, - ], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, }, @@ -199,7 +185,6 @@ async function deployCCTLiteUpgradeable( /* ======== UUPS Contract Deploy Helpers ======== */ async function deployCCTUUPSUpgradeable( - forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, @@ -218,7 +203,6 @@ async function deployCCTUUPSUpgradeable( ], { initializer: 'initialize', - constructorArgs: [forwarder], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', @@ -228,7 +212,6 @@ async function deployCCTUUPSUpgradeable( } async function deployCCTLiteUUPSUpgradeable( - forwarder, admin, policyEngineAddress, snapshotEngine = ZERO_ADDRESS, @@ -247,7 +230,6 @@ async function deployCCTLiteUUPSUpgradeable( ], { initializer: 'initialize', - constructorArgs: [forwarder], unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', @@ -288,7 +270,7 @@ function createStandardFixture(deployTokenFn) { const rbacPolicyAddress = await rbacPolicy.getAddress(); // Deploy compliance token - const cmtat = await deployTokenFn(_.address, admin.address, policyEngineAddress); + const cmtat = await deployTokenFn(admin.address, policyEngineAddress); const cmtatAddress = await cmtat.getAddress(); // Collect all selectors @@ -440,7 +422,7 @@ function createLiteFixture(deployTokenFn) { ] = await ethers.getSigners(); const policyEngine = await deployPolicyEngine(true, admin.address); - const cmtat = await deployTokenFn(_.address, admin.address, await policyEngine.getAddress()); + const cmtat = await deployTokenFn(admin.address, await policyEngine.getAddress()); return { _, From a84968aa8a7a92cd0be7e60f624019e870d58150 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Thu, 16 Apr 2026 14:07:03 +0100 Subject: [PATCH 31/57] Change docs and licence --- .../deployment/lite/ComplianceTokenCMTATLiteStandalone.sol | 2 +- .../lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol | 2 +- .../deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol | 2 +- .../deployment/standard/ComplianceTokenCMTATStandalone.sol | 4 ++-- .../standard/ComplianceTokenCMTATUUPSUpgradeable.sol | 4 ++-- .../deployment/standard/ComplianceTokenCMTATUpgradeable.sol | 4 ++-- contracts/modules/demo/DemoImports.sol | 2 +- test/common/cmtat/DocumentModuleCommon.js | 5 +---- test/custom/transferValidationPolicy.test.js | 5 +---- 9 files changed, 12 insertions(+), 18 deletions(-) diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol index 9dabd19..c891883 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol @@ -1,4 +1,4 @@ -//SPDX-License-Identifier: MPL-2.0 +// SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol index 93cebb2..70d5f55 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol @@ -1,4 +1,4 @@ -//SPDX-License-Identifier: MPL-2.0 +// SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol index b191e1f..5e2a52d 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol @@ -1,4 +1,4 @@ -//SPDX-License-Identifier: MPL-2.0 +// SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; diff --git a/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol index ad27833..96af348 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol @@ -1,4 +1,4 @@ -//SPDX-License-Identifier: MPL-2.0 +// SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; @@ -10,7 +10,7 @@ import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/engine/ID /** * @title ComplianceTokenCMTATStandalone * @author Chainlink - * @notice Standalone ComplianceToken contract with Chainlink ACE policy validation on all public functions + * @notice Standalone ComplianceToken contract with Chainlink ACE policy validation on state-changing operations */ contract ComplianceTokenCMTATStandalone is CCTCommon { /** diff --git a/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol b/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol index 1006306..c5bc751 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol @@ -1,4 +1,4 @@ -//SPDX-License-Identifier: MPL-2.0 +// SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; @@ -8,7 +8,7 @@ import {CCTCommon} from "../../modules/standard/CCTCommon.sol"; /** * @title ComplianceTokenCMTATUUPSUpgradeable * @author Chainlink - * @notice UUPS upgradeable ComplianceToken contract with Chainlink ACE policy validation on all public functions + * @notice UUPS upgradeable ComplianceToken contract with Chainlink ACE policy validation on state-changing operations */ contract ComplianceTokenCMTATUUPSUpgradeable is CCTCommon, UUPSUpgradeable { /// @custom:oz-upgrades-unsafe-allow constructor diff --git a/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol b/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol index 68f69a7..7bc8dc2 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol @@ -1,4 +1,4 @@ -//SPDX-License-Identifier: MPL-2.0 +// SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; @@ -7,7 +7,7 @@ import {CCTCommon} from "../../modules/standard/CCTCommon.sol"; /** * @title ComplianceTokenCMTATUpgradeable * @author Chainlink - * @notice Upgradeable ComplianceToken contract with Chainlink ACE policy validation on all public functions + * @notice Upgradeable ComplianceToken contract with Chainlink ACE policy validation on state-changing operations */ contract ComplianceTokenCMTATUpgradeable is CCTCommon { /// @custom:oz-upgrades-unsafe-allow constructor diff --git a/contracts/modules/demo/DemoImports.sol b/contracts/modules/demo/DemoImports.sol index e8b6789..8e2dac8 100644 --- a/contracts/modules/demo/DemoImports.sol +++ b/contracts/modules/demo/DemoImports.sol @@ -1,4 +1,4 @@ -//SPDX-License-Identifier: MPL-2.0 +// SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; diff --git a/test/common/cmtat/DocumentModuleCommon.js b/test/common/cmtat/DocumentModuleCommon.js index f96c1cf..57107a1 100644 --- a/test/common/cmtat/DocumentModuleCommon.js +++ b/test/common/cmtat/DocumentModuleCommon.js @@ -101,10 +101,7 @@ function DocumentModuleCommon() { it('testGetEmptyDocumentsIfNoDocumentEngine', async function () { // Deploy a fresh token with no document engine const policyEngineAddress = await this.policyEngine.getAddress(); - const freshCmtat = await deployCCTStandalone( - this.admin.address, - policyEngineAddress, - ); + const freshCmtat = await deployCCTStandalone(this.admin.address, policyEngineAddress); const name = ethers.encodeBytes32String('doc1'); const doc = await freshCmtat.getDocument(name); diff --git a/test/custom/transferValidationPolicy.test.js b/test/custom/transferValidationPolicy.test.js index cb97ad0..240ef7d 100644 --- a/test/custom/transferValidationPolicy.test.js +++ b/test/custom/transferValidationPolicy.test.js @@ -47,10 +47,7 @@ describe('TransferValidationPolicy', function () { this.policyEngineAddress = await this.policyEngine.getAddress(); // Deploy Lite Standalone token - this.cmtat = await deployCCTLiteStandalone( - this.admin.address, - this.policyEngineAddress, - ); + this.cmtat = await deployCCTLiteStandalone(this.admin.address, this.policyEngineAddress); this.cmtatAddress = await this.cmtat.getAddress(); // Deploy ERC20TransferFromExtractor From dfa172a9a72504b0a9b07db30194722ba53115e4 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Tue, 21 Apr 2026 14:36:56 +0100 Subject: [PATCH 32/57] Correct docs and update storage slot for example TransferValidationPolicy --- README.md | 59 ++++++++++++------- .../custom/TransferValidationPolicy.sol | 4 +- 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index c23c251..2393ff8 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ ## Deployment versions -Two versions are available; _lite_ version which substitutes RuleEngine with Chainlink ACE PolicyEngine, and _standard_ version, which uses PolicyEngine to protect all external functions instead of OpenZeppelin role-based AccessControl. +Two versions are available; _lite_ version which substitutes RuleEngine with Chainlink ACE PolicyEngine, and _standard_ version, which uses PolicyEngine to protect state-changing operations instead of OpenZeppelin role-based AccessControl. ### Standard -Replaces CMTAT's `AccessControlUpgradeable` (role-based) with `OwnableUpgradeable` (single owner) and integrates Chainlink ACE `PolicyProtectedUpgradeable` for all access control and compliance validation. +Replaces CMTAT's `AccessControlUpgradeable` (role-based) with `OwnableUpgradeable` (single owner) and integrates Chainlink ACE `PolicyProtectedUpgradeable` for access control and compliance validation on state-changing operations (mint, burn, transfer, enforcement, admin functions). | Contract | Proxy type | | ------------------------------------- | ------------------ | @@ -45,27 +45,28 @@ Keeps CMTAT's `AccessControlUpgradeable` (role-based) for module authorization a ### Initialization -The `Engine` struct parameter is replaced with a direct `address policyEngine_`: +The `Engine` struct parameter is replaced with `address policyEngine_`, `ISnapshotEngine snapshotEngine_`, and `IERC1643 documentEngine_`: ```solidity // CMTAT -constructor(..., ICMTATConstructor.Engine memory engines_) +constructor(forwarder, admin, ..., ICMTATConstructor.Engine memory engines_) // ComplianceTokenCMTAT (Standard & Lite) -constructor(..., address policyEngine_) +constructor(admin, ..., address policyEngine_, ISnapshotEngine snapshotEngine_, IERC1643 documentEngine_) ``` +ERC-2771 (gasless transaction forwarding) has been removed from all deployment contracts. The standalone contracts no longer take a `forwarderIrrevocable` parameter, and the upgradeable contracts have parameterless constructors. + ### Modules All CMTAT functional modules are preserved in both variants: - ERC20MintModule, ERC20BurnModule - ERC20EnforcementModule (freeze/enforcement) -- PauseModule (Standard: via PausePolicy; Lite: native) +- PauseModule (Standard: `pause()`/`unpause()`/`deactivateContract()` are not exposed on the token — pausing is enforced externally via a PausePolicy on the PolicyEngine which rejects operations when paused; Lite: native `onlyRole(PAUSER_ROLE)`) - SnapshotEngineModule, DocumentEngineModule - ExtraInformationModule - ERC20CrossChainModule, CCIPModule -- ERC2771Module (gasless transactions) ### Removed from Standard @@ -74,6 +75,21 @@ All CMTAT functional modules are preserved in both variants: - `CMTATBaseRuleEngine` — replaced by `PolicyProtectedUpgradeable` - `ValidationModuleRuleEngine` — replaced by direct PolicyEngine calls - All `onlyRole()` authorization functions — replaced by `runPolicy` modifier +- `pause()`, `unpause()`, `deactivateContract()` — not exposed on the token contract; the `_authorizePause` and `_authorizeDeactivate` hooks are intentionally left unimplemented so these functions remain abstract and are excluded from the compiled contract. Pausing is enforced externally via a PausePolicy attached to the PolicyEngine, which rejects protected operations when paused + +### Design notes + +#### Why `approve()` is not policy-protected + +`approve()` is intentionally not gated by `runPolicy` in either variant. An approval by itself does not move tokens — it only sets an allowance. The actual token movement happens via `transferFrom()`, which **is** policy-protected. Protecting `approve()` would add gas overhead without security benefit, since: + +1. A malicious or excessive approval has no effect until `transferFrom()` is called, at which point the PolicyEngine validates the transfer. +2. The `ERC20TransferFromExtractor` extracts the `spender` address from `transferFrom()` calls, so policies can restrict which spenders are allowed to move tokens regardless of existing approvals. +3. In the Lite variant, `approve()` is gated by `whenNotPaused` as a convenience (matching upstream CMTAT behavior), but this is not a security-critical check. + +### Removed from both variants + +- `ERC2771Module` — gasless transaction forwarding is not supported (ACE does not currently support ERC-2771) ### Added @@ -295,24 +311,25 @@ npx hardhat run scripts/lite/deploy-lite-standalone.js `scripts/demo.js` provides a complete end-to-end deployment of the Standard variant with the full Chainlink ACE policy stack. It deploys and wires together all contracts in the correct order: 1. **PolicyEngine** (proxy) — central policy orchestrator with `defaultAllow = true` -2. **ComplianceTokenCMTATStandalone** — the token contract, attached to the PolicyEngine -3. **PausePolicy** (proxy) — added to all external functions (mint, burn, transfer, enforcement, admin) -4. **RoleBasedAccessControlPolicy** (proxy) — added to all external functions with role-to-selector mappings -5. **MockV3Aggregator** — mock Chainlink reserve price feed (Hardhat network only) -6. **SecureMintPolicy** (proxy) — added to `mint()`, enforces reserve-backed minting via price feed -7. **MintBurnExtractor** — set for `mint()` selector, extracts `account` and `amount` parameters -8. **ERC20TransferExtractor** — set for `transfer()` selector -9. **ERC20TransferFromExtractor** — set for `transferFrom()` selector -10. **MaxAmountRule** + **RestrictedAddressRule** — mock IRule contracts for transfer validation -11. **TransferValidationPolicy** (proxy) — added to `transfer()` and `transferFrom()` with both rules - -The script also configures RBAC operation allowances and grants roles (`MINTER_ROLE`, `BURNER_ROLE`, `BURNER_FROM_ROLE`, `ENFORCER_ROLE`, `ERC20ENFORCER_ROLE`) to the admin account. +2. **DocumentEngineMock** + **SnapshotEngineMock** — mock engine contracts for document/snapshot support +3. **ComplianceTokenCMTATStandalone** — the token contract, attached to the PolicyEngine and engines +4. **PausePolicy** (proxy) — added to all state-changing selectors (mint, burn, transfer, enforcement, admin) +5. **RoleBasedAccessControlPolicy** (proxy) — added to admin selectors with role-to-selector mappings +6. **MockV3Aggregator** — mock Chainlink reserve price feed (Hardhat network only) +7. **SecureMintPolicy** (proxy) — added to `mint()`, enforces reserve-backed minting via price feed +8. **MintBurnExtractor** — set for `mint()` selector, extracts `account` and `amount` parameters +9. **ERC20TransferExtractor** — set for `transfer()` selector +10. **ERC20TransferFromExtractor** — set for `transferFrom()` selector +11. **MaxAmountRule** + **RestrictedAddressRule** — mock IRule contracts for transfer validation +12. **TransferValidationPolicy** (proxy) — added to `transfer()` and `transferFrom()` with both rules + +The script also configures RBAC operation allowances and grants roles (`MINTER_ROLE`, `BURNER_ROLE`, `BURNER_FROM_ROLE`, `ENFORCER_ROLE`, `ERC20ENFORCER_ROLE`, `DOCUMENT_ROLE`, `SNAPSHOOTER_ROLE`) to the admin account. Policy execution order per function: - `mint()` → PausePolicy → RBAC → SecureMintPolicy -- `transfer()` / `transferFrom()` → PausePolicy → RBAC → TransferValidationPolicy -- All other functions → PausePolicy → RBAC +- `transfer()` / `transferFrom()` → PausePolicy → TransferValidationPolicy +- All other state-changing functions → PausePolicy → RBAC Run the demo on a local Hardhat network: diff --git a/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol index cb4f5bd..d2fca0a 100644 --- a/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol +++ b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol @@ -31,7 +31,7 @@ contract TransferValidationPolicy is Policy { } // keccak256(abi.encode(uint256(keccak256("cmta.TransferValidationPolicy")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 private constant STORAGE_LOCATION = 0x9d1bc980e8a6a99b0c67a28b08c935a5db13a988e2a9b52481bff1e80ee16800; + bytes32 private constant STORAGE_LOCATION = 0xd90ded5881f9295c61e86b2e3b551acbb5fe06f9f79d0cec87ddc5bb60d48e00; function _getStorage() private pure returns (TransferValidationStorage storage $) { assembly { @@ -49,6 +49,7 @@ contract TransferValidationPolicy is Policy { address[] memory ruleAddrs = abi.decode(parameters, (address[])); TransferValidationStorage storage $ = _getStorage(); for (uint256 i = 0; i < ruleAddrs.length; ++i) { + require(ruleAddrs[i] != address(0), "Rule address cannot be zero"); $.rules.push(IRule(ruleAddrs[i])); } } @@ -62,6 +63,7 @@ contract TransferValidationPolicy is Policy { TransferValidationStorage storage $ = _getStorage(); delete $.rules; for (uint256 i = 0; i < rules_.length; ++i) { + require(address(rules_[i]) != address(0), "Rule address cannot be zero"); $.rules.push(rules_[i]); } } From a5da8da9eb5b932b0921b4ed0546319e782e406f Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Tue, 21 Apr 2026 16:44:46 +0100 Subject: [PATCH 33/57] CM-1215 Update submodules and correct docs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2393ff8..1f3f57a 100644 --- a/README.md +++ b/README.md @@ -226,7 +226,7 @@ contract MyCustomRule is IRule { ## Initialize submodules ```shell -git submodule update +git submodule update. --init ``` ## Install dependencies From 22c84822499ed6cc034f91d4c2c1b21d29d19cbe Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Tue, 21 Apr 2026 16:44:46 +0100 Subject: [PATCH 34/57] Update submodules and correct docs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2393ff8..1f3f57a 100644 --- a/README.md +++ b/README.md @@ -226,7 +226,7 @@ contract MyCustomRule is IRule { ## Initialize submodules ```shell -git submodule update +git submodule update. --init ``` ## Install dependencies From e05b31bf5d3462be71581f9f5da2e36395bf2f1c Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Thu, 30 Apr 2026 17:32:59 +0200 Subject: [PATCH 35/57] Add github workflow --- .github/workflows/ci.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..bf5c3a3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,31 @@ +name: Hardhat CI + +on: + push: + branches: [dev, master, main] + pull_request: + branches: [dev, master, main] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2 + + - name: Setup NodeJS 20.5.0 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 #v4.4.0 + with: + node-version: 20.5.0 + + - name: Show NodeJS version + run: npm --version + + - name: Checkout submodules + run: git submodule update --init --recursive + + - name: Install Project Dependencies + run: npm install + + - name: Run Hardhat Test + run: npx hardhat test From aa86f1e03bfd812a8a29d644a035dd6e05c7d4e0 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Fri, 8 May 2026 15:53:35 +0200 Subject: [PATCH 36/57] docs(readme): clarify Standard variant runtime dependency on Chainlink ACE contracts and config --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 1f3f57a..850c01c 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,20 @@ Keeps CMTAT's `AccessControlUpgradeable` (role-based) for module authorization a ## Changes from CMTAT +### Warning (Standard Variant) + +In the **Standard** variant, critical operations are authorized through ACE `runPolicy` checks instead of local `onlyRole(...)` checks. This includes core actions such as `mint`, burn functions, forced transfer/enforcement actions, and sensitive admin/configuration operations. + +This means `PolicyEngine` configuration is security-critical infrastructure. A bad config change can unintentionally allow or block sensitive actions. +It also introduces a direct runtime dependency on Chainlink ACE contracts (PolicyEngine, attached policies, extractor/mapper configuration): if ACE contracts are unavailable, misconfigured, or incorrectly upgraded, authorization and compliance checks in the token are directly affected. + +Treat the following as privileged governance actions: + +- `addPolicy` / `removePolicy` +- `setExtractor` / `setPolicyMapper` +- `setDefaultAllow` +- `attachPolicyEngine` + ### Access Control | Aspect | CMTAT | Standard | Lite | From c7c0fd3dc68e519b27ffa9f3561e1e52cafa414d Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Fri, 8 May 2026 15:55:41 +0200 Subject: [PATCH 37/57] docs: clarify runPolicy context cleanup semantics on revert in README and PolicyProtectedUpgradeableNatSpec --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 850c01c..37d9a9e 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ In the **Standard** variant, critical operations are authorized through ACE `run This means `PolicyEngine` configuration is security-critical infrastructure. A bad config change can unintentionally allow or block sensitive actions. It also introduces a direct runtime dependency on Chainlink ACE contracts (PolicyEngine, attached policies, extractor/mapper configuration): if ACE contracts are unavailable, misconfigured, or incorrectly upgraded, authorization and compliance checks in the token are directly affected. +For `runPolicy` context handling, cleanup is best-effort on success only: context is cleared after the guarded function completes successfully. If the guarded call reverts, cleanup is not reached, and previously stored context remains in storage. Treat the following as privileged governance actions: From 0b875b1a1811551866722e402d24866dbd2d224b Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Fri, 8 May 2026 16:31:55 +0200 Subject: [PATCH 38/57] docs(contracts): clarify runPolicy context cleanup behavior on revert in PolicyProtectedUpgradeable NatSpec --- .../chainlink-ace/modified/PolicyProtectedUpgradeable.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol b/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol index 16a9ba9..2bbb267 100644 --- a/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol +++ b/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol @@ -45,7 +45,8 @@ abstract contract PolicyProtectedUpgradeable is Initializable, ERC165Upgradeable } /** * @dev Modifier to run the policy engine on the current method. - * @notice After the function execution completes, any context that was set will be automatically cleared. + * @notice Context is cleared only after successful execution of the guarded function. + * If the guarded function reverts, this cleanup path is not reached and previously stored context remains. */ modifier runPolicy() { From db91035c2d0f07d3326ede796d6170d47ac3dd21 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Fri, 8 May 2026 16:39:23 +0200 Subject: [PATCH 39/57] refactor(contracts): remove unused imports (keeping intentional Demo/NatSpec cases) following aderyn report --- .../chainlink-ace/modified/PolicyProtectedUpgradeable.sol | 1 - contracts/modules/lite/CCTCMTATBasePolicyEngine.sol | 2 -- contracts/modules/standard/CCTCommon.sol | 3 --- 3 files changed, 6 deletions(-) diff --git a/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol b/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol index 2bbb267..870cf11 100644 --- a/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol +++ b/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol @@ -6,7 +6,6 @@ import {IPolicyProtected} from "@chainlink/policy-management/interfaces/IPolicyP import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import {ERC165Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /** * @title PolicyProtectedUpgradeable.sol diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index 65fed2b..c5e84e7 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -7,9 +7,7 @@ import { CMTATBaseAccessControl } from "../../../submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol"; import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; -import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index c7e2368..8a59bc4 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -19,7 +19,6 @@ import { ERC20MintModule, ERC20MintModuleInternal } from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol"; -import {VersionModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/VersionModule.sol"; import {ERC20BaseModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol"; /* = Option & Extension = */ import {ERC20CrossChainModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol"; @@ -35,8 +34,6 @@ import { } from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol"; import {SnapshotEngineModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol"; /* = Interface = */ -import {IERC5679} from "../../../submodules/CMTAT/contracts/interfaces/technical/IERC5679.sol"; -import {IBurnMintERC20} from "../../../submodules/CMTAT/contracts/interfaces/technical/IMintBurnToken.sol"; import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; /* ==== Chainlink ACE === */ From e21f1d3b3b38451ff2818801dae5d1d75cf3e318 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Fri, 8 May 2026 16:40:42 +0200 Subject: [PATCH 40/57] refactor(mocks): make RestrictedAddressRule owner immutable to reduce storage gas (aderyn report) --- contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol b/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol index eb5a388..1ac4409 100644 --- a/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol +++ b/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol @@ -55,7 +55,7 @@ contract RestrictedAddressRule is IRule { uint8 constant TO_RESTRICTED = 15; mapping(address => bool) public restricted; - address public owner; + address public immutable owner; modifier onlyOwner() { require(msg.sender == owner, "only owner"); From 058283180dfceee22a99e0f4db4fc696099c51e0 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Fri, 8 May 2026 16:45:22 +0200 Subject: [PATCH 41/57] Update CMTAT to v3.2.0 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 37d9a9e..402c515 100644 --- a/README.md +++ b/README.md @@ -235,7 +235,7 @@ contract MyCustomRule is IRule { ## Library -- CMTAT [v3.2.0-rc0](https://github.com/CMTA/CMTAT/releases/tag/v3.2.0-rc0) +- CMTAT [v3.2.0](https://github.com/CMTA/CMTAT/releases/tag/v3.2.0) - Chainlink ACE ^1.0.0 ## Initialize submodules From 60432dbcbe24590f4ca2c9e98c3857b76d9ea5cb Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Fri, 8 May 2026 17:06:42 +0200 Subject: [PATCH 42/57] refactor(policy): switch transfer validation to RuleEngine IRule, align CMTAT import namespace/remappings, and mark mock rules as non-production --- .gitmodules | 5 +- .../ComplianceTokenCMTATLiteStandalone.sol | 6 +-- .../ComplianceTokenCMTATStandalone.sol | 6 +-- .../custom/TransferValidationPolicy.sol | 2 +- .../chainlink-ace/mocks/TransferRuleMocks.sol | 51 ++++++++++++++++++- contracts/modules/demo/DemoImports.sol | 4 +- .../modules/lite/CCTCMTATBaseERC1404.sol | 4 +- .../lite/CCTCMTATBaseERC20CrossChain.sol | 10 ++-- .../modules/lite/CCTCMTATBasePolicyEngine.sol | 16 +++--- .../lite/PolicyValidationModuleERC1404.sol | 4 +- .../lite/ValidationModulePolicyEngine.sol | 2 +- contracts/modules/standard/CCTCommon.sol | 24 ++++----- foundry.toml | 1 + remappings.txt | 1 + submodules/RuleEngine | 1 + 15 files changed, 96 insertions(+), 41 deletions(-) create mode 160000 submodules/RuleEngine diff --git a/.gitmodules b/.gitmodules index bac966d..a0db00b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,7 @@ [submodule "submodules/CMTAT"] path = submodules/CMTAT url = https://github.com/CMTA/CMTAT - branch = master \ No newline at end of file + branch = master +[submodule "submodules/RuleEngine"] + path = submodules/RuleEngine + url = https://github.com/CMTA/RuleEngine diff --git a/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol index c891883..8ceb545 100644 --- a/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol +++ b/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.20; import {CCTCMTATBaseERC20CrossChain} from "../../modules/lite/CCTCMTATBaseERC20CrossChain.sol"; -import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; -import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; +import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol"; +import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol"; +import {IERC1643} from "CMTAT/interfaces/tokenization/draft-IERC1643.sol"; /** * @title ComplianceTokenCMTATLite diff --git a/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol index 96af348..02953d6 100644 --- a/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol +++ b/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.20; import {CCTCommon} from "../../modules/standard/CCTCommon.sol"; -import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; -import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/engine/IDocumentEngine.sol"; +import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol"; +import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol"; +import {IERC1643} from "CMTAT/interfaces/engine/IDocumentEngine.sol"; /** * @title ComplianceTokenCMTATStandalone diff --git a/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol index d2fca0a..656d460 100644 --- a/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol +++ b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; import {Policy} from "@chainlink/policy-management/core/Policy.sol"; import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; -import {IRule} from "../../../../submodules/CMTAT/contracts/mocks/RuleEngine/interfaces/IRule.sol"; +import {IRule} from "../../../../submodules/RuleEngine/src/interfaces/IRule.sol"; /** * @title TransferValidationPolicy diff --git a/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol b/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol index 1ac4409..859a4df 100644 --- a/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol +++ b/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol @@ -2,7 +2,12 @@ pragma solidity ^0.8.20; -import {IRule} from "../../../../submodules/CMTAT/contracts/mocks/RuleEngine/interfaces/IRule.sol"; +import {IRule} from "../../../../submodules/RuleEngine/src/interfaces/IRule.sol"; + +/** + * @dev WARNING: Mock rule contracts for tests/examples only. + * Not designed, reviewed, or hardened for production deployments. + */ /** * @title MaxAmountRule @@ -37,6 +42,28 @@ contract MaxAmountRule is IRule { return detectTransferRestriction(from, to, amount) == 0; } + function canTransferFrom( + address /* spender */, + address from, + address to, + uint256 amount + ) external view override returns (bool) { + return canTransfer(from, to, amount); + } + + function transferred(address /* from */, address /* to */, uint256 /* value */) external pure override {} + + function transferred( + address /* spender */, + address /* from */, + address /* to */, + uint256 /* value */ + ) external pure override {} + + function supportsInterface(bytes4 interfaceId) external pure override returns (bool) { + return interfaceId == type(IRule).interfaceId; + } + function canReturnTransferRestrictionCode(uint8 code) public pure override returns (bool) { return code == AMOUNT_TOO_HIGH; } @@ -96,6 +123,28 @@ contract RestrictedAddressRule is IRule { return detectTransferRestriction(from, to, amount) == 0; } + function canTransferFrom( + address /* spender */, + address from, + address to, + uint256 amount + ) external view override returns (bool) { + return canTransfer(from, to, amount); + } + + function transferred(address /* from */, address /* to */, uint256 /* value */) external pure override {} + + function transferred( + address /* spender */, + address /* from */, + address /* to */, + uint256 /* value */ + ) external pure override {} + + function supportsInterface(bytes4 interfaceId) external pure override returns (bool) { + return interfaceId == type(IRule).interfaceId; + } + function canReturnTransferRestrictionCode(uint8 code) public pure override returns (bool) { return code == FROM_RESTRICTED || code == TO_RESTRICTED; } diff --git a/contracts/modules/demo/DemoImports.sol b/contracts/modules/demo/DemoImports.sol index 8e2dac8..33aa32d 100644 --- a/contracts/modules/demo/DemoImports.sol +++ b/contracts/modules/demo/DemoImports.sol @@ -11,5 +11,5 @@ import {PausePolicy} from "@chainlink/policy-management/policies/PausePolicy.sol import {RoleBasedAccessControlPolicy} from "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol"; import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMintPolicy.sol"; import {ERC20TransferExtractor} from "@chainlink/policy-management/extractors/ERC20TransferExtractor.sol"; -import {SnapshotEngineMock} from "../../../submodules/CMTAT/contracts/mocks/SnapshotEngineMock.sol"; -import {DocumentEngineMock} from "../../../submodules/CMTAT/contracts/mocks/DocumentEngineMock.sol"; +import {SnapshotEngineMock} from "CMTAT/mocks/SnapshotEngineMock.sol"; +import {DocumentEngineMock} from "CMTAT/mocks/DocumentEngineMock.sol"; diff --git a/contracts/modules/lite/CCTCMTATBaseERC1404.sol b/contracts/modules/lite/CCTCMTATBaseERC1404.sol index bbd4d08..a0268ce 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC1404.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC1404.sol @@ -5,12 +5,12 @@ pragma solidity ^0.8.20; import {CCTCMTATBasePolicyEngine} from "./CCTCMTATBasePolicyEngine.sol"; import {PolicyValidationModuleERC1404, IERC1404, IERC1404Extend} from "./PolicyValidationModuleERC1404.sol"; import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; -import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; +import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import { ERC20EnforcementModule, ERC20EnforcementModuleInternal -} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; +} from "CMTAT/modules/wrapper/extensions/ERC20EnforcementModule.sol"; abstract contract CCTCMTATBaseERC1404 is CCTCMTATBasePolicyEngine, PolicyValidationModuleERC1404 { /** diff --git a/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol index 3004227..14ac329 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol @@ -2,18 +2,18 @@ pragma solidity ^0.8.20; -import {ERC20CrossChainModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol"; -import {CCIPModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol"; +import {ERC20CrossChainModule} from "CMTAT/modules/wrapper/options/ERC20CrossChainModule.sol"; +import {CCIPModule} from "CMTAT/modules/wrapper/options/CCIPModule.sol"; import {CCTCMTATBaseERC1404} from "./CCTCMTATBaseERC1404.sol"; -import {CMTATBaseCommon} from "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol"; +import {CMTATBaseCommon} from "CMTAT/modules/0_CMTATBaseCommon.sol"; import { ERC20MintModule, ERC20MintModuleInternal -} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol"; +} from "CMTAT/modules/wrapper/core/ERC20MintModule.sol"; import { ERC20BurnModule, ERC20BurnModuleInternal -} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol"; +} from "CMTAT/modules/wrapper/core/ERC20BurnModule.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index c5e84e7..a80d5cb 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -5,20 +5,20 @@ pragma solidity ^0.8.20; import { CMTATBaseCommon, CMTATBaseAccessControl -} from "../../../submodules/CMTAT/contracts/modules/1_CMTATBaseAccessControl.sol"; +} from "CMTAT/modules/1_CMTATBaseAccessControl.sol"; import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; -import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; -import {IERC1643} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1643.sol"; +import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol"; +import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol"; +import {IERC1643} from "CMTAT/interfaces/tokenization/draft-IERC1643.sol"; import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; -import {PauseModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/PauseModule.sol"; -import {EnforcementModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol"; -import {IERC7943FungibleTransferError} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC7943.sol"; +import {PauseModule} from "CMTAT/modules/wrapper/core/PauseModule.sol"; +import {EnforcementModule} from "CMTAT/modules/wrapper/core/EnforcementModule.sol"; +import {IERC7943FungibleTransferError} from "CMTAT/interfaces/tokenization/draft-IERC7943.sol"; // Extensions import { ERC20EnforcementModule, ERC20EnforcementModuleInternal -} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; +} from "CMTAT/modules/wrapper/extensions/ERC20EnforcementModule.sol"; abstract contract CCTCMTATBasePolicyEngine is CMTATBaseAccessControl, diff --git a/contracts/modules/lite/PolicyValidationModuleERC1404.sol b/contracts/modules/lite/PolicyValidationModuleERC1404.sol index 6ea41e2..d2d30e0 100644 --- a/contracts/modules/lite/PolicyValidationModuleERC1404.sol +++ b/contracts/modules/lite/PolicyValidationModuleERC1404.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.20; /* ==== Tokenization === */ -import {IERC1404, IERC1404Extend} from "../../../submodules/CMTAT/contracts/interfaces/tokenization/draft-IERC1404.sol"; -import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; +import {IERC1404, IERC1404Extend} from "CMTAT/interfaces/tokenization/draft-IERC1404.sol"; +import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol"; /** * @dev Validation module (ERC-1404) diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index e2f35fa..e585233 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.20; -import {ValidationModuleCore} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ValidationModuleCore.sol"; +import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol"; import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index 8a59bc4..43bb81f 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -8,34 +8,34 @@ import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /* ==== CMTAT === */ -import {CMTATBaseCommon} from "../../../submodules/CMTAT/contracts/modules/0_CMTATBaseCommon.sol"; +import {CMTATBaseCommon} from "CMTAT/modules/0_CMTATBaseCommon.sol"; /* = Base = */ /* = Core = */ import { ERC20BurnModule, ERC20BurnModuleInternal -} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol"; +} from "CMTAT/modules/wrapper/core/ERC20BurnModule.sol"; import { ERC20MintModule, ERC20MintModuleInternal -} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol"; -import {ERC20BaseModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol"; +} from "CMTAT/modules/wrapper/core/ERC20MintModule.sol"; +import {ERC20BaseModule} from "CMTAT/modules/wrapper/core/ERC20BaseModule.sol"; /* = Option & Extension = */ -import {ERC20CrossChainModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/ERC20CrossChainModule.sol"; -import {CCIPModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/options/CCIPModule.sol"; -import {ExtraInformationModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ExtraInformationModule.sol"; +import {ERC20CrossChainModule} from "CMTAT/modules/wrapper/options/ERC20CrossChainModule.sol"; +import {CCIPModule} from "CMTAT/modules/wrapper/options/CCIPModule.sol"; +import {ExtraInformationModule} from "CMTAT/modules/wrapper/extensions/ExtraInformationModule.sol"; import { ERC20EnforcementModule, ERC20EnforcementModuleInternal -} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/ERC20EnforcementModule.sol"; +} from "CMTAT/modules/wrapper/extensions/ERC20EnforcementModule.sol"; import { DocumentEngineModule, IERC1643 -} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/DocumentEngineModule.sol"; -import {SnapshotEngineModule} from "../../../submodules/CMTAT/contracts/modules/wrapper/extensions/SnapshotEngineModule.sol"; +} from "CMTAT/modules/wrapper/extensions/DocumentEngineModule.sol"; +import {SnapshotEngineModule} from "CMTAT/modules/wrapper/extensions/SnapshotEngineModule.sol"; /* = Interface = */ -import {ICMTATConstructor} from "../../../submodules/CMTAT/contracts/interfaces/technical/ICMTATConstructor.sol"; -import {ISnapshotEngine} from "../../../submodules/CMTAT/contracts/interfaces/engine/ISnapshotEngine.sol"; +import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol"; +import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol"; /* ==== Chainlink ACE === */ import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; diff --git a/foundry.toml b/foundry.toml index ae7a501..c59b4e5 100644 --- a/foundry.toml +++ b/foundry.toml @@ -4,4 +4,5 @@ remappings = [ "@chainlink/policy-management/=node_modules/@chainlink/ace/packages/policy-management/src/", "@chainlink/cross-chain-identity/=node_modules/@chainlink/ace/packages/cross-chain-identity/src/", "@chainlink/contracts/=node_modules/@chainlink/contracts/", + "CMTAT/=submodules/CMTAT/contracts/", ] diff --git a/remappings.txt b/remappings.txt index 68280d9..12288b4 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,3 +1,4 @@ @chainlink/policy-management/=node_modules/@chainlink/ace/packages/policy-management/src/ @chainlink/cross-chain-identity/=node_modules/@chainlink/ace/packages/cross-chain-identity/src/ @chainlink/contracts/=node_modules/@chainlink/contracts/ +CMTAT/=submodules/CMTAT/contracts/ diff --git a/submodules/RuleEngine b/submodules/RuleEngine new file mode 160000 index 0000000..5827604 --- /dev/null +++ b/submodules/RuleEngine @@ -0,0 +1 @@ +Subproject commit 5827604be4e38f65c055a929c7b62462a20f4bbd From ec7dba92036d584acf76ffbf2584f85bfed6dadd Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Fri, 8 May 2026 18:11:50 +0200 Subject: [PATCH 43/57] feat(contract,test,docs): emit RulesUpdated in TransferValidationPolicy, add/update policy rule-change tests, and enforce AGENTS/CLAUDE sync with matching files --- AGENTS.md | 30 +++++++++++++++++++ CLAUDE.md | 30 +++++++++++++++++++ .../custom/TransferValidationPolicy.sol | 3 ++ test/custom/transferValidationPolicy.test.js | 22 +++++++++++++- 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 AGENTS.md create mode 100644 CLAUDE.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..cfe1872 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,30 @@ +# AGENTS Guidelines + +## Sync Policy (Mandatory) + +- `AGENTS.md` and `CLAUDE.md` must always contain exactly the same content. +- Any edit to one file must be mirrored in the other file in the same change. + +## Testing Policy (Mandatory) + +- Always add or update automated tests for every new feature, behavior change, bug fix, or security hardening change. +- A code change is not complete unless tests validating the change are included in the same PR/commit series. +- At minimum, include: + - positive-path test(s), + - negative-path/revert test(s) when applicable, + - event assertion(s) when state changes emit events. +- Run relevant tests locally before finalizing changes. If a full suite cannot be run, clearly state what was run and what was skipped. + +## Codebase Summary + +- This repository integrates **CMTA CMTAT** token modules with **Chainlink ACE PolicyEngine**. +- There are two deployment variants: + - **Standard**: policy-authoritative access/compliance via ACE (`runPolicy`) with `OwnableUpgradeable`. + - **Lite**: keeps CMTAT role-based module access control and uses ACE mainly for transfer validation. +- Core custom contracts are under: + - `contracts/modules/standard/` + - `contracts/modules/lite/` + - `contracts/modules/chainlink-ace/custom/` + - `contracts/modules/chainlink-ace/modified/` +- Tests are primarily under `test/`, with transfer-policy coverage in `test/custom/transferValidationPolicy.test.js`. +- External dependencies are vendored as git submodules in `submodules/` (notably `CMTAT`, `chainlink-ace`, and `RuleEngine`). diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..cfe1872 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,30 @@ +# AGENTS Guidelines + +## Sync Policy (Mandatory) + +- `AGENTS.md` and `CLAUDE.md` must always contain exactly the same content. +- Any edit to one file must be mirrored in the other file in the same change. + +## Testing Policy (Mandatory) + +- Always add or update automated tests for every new feature, behavior change, bug fix, or security hardening change. +- A code change is not complete unless tests validating the change are included in the same PR/commit series. +- At minimum, include: + - positive-path test(s), + - negative-path/revert test(s) when applicable, + - event assertion(s) when state changes emit events. +- Run relevant tests locally before finalizing changes. If a full suite cannot be run, clearly state what was run and what was skipped. + +## Codebase Summary + +- This repository integrates **CMTA CMTAT** token modules with **Chainlink ACE PolicyEngine**. +- There are two deployment variants: + - **Standard**: policy-authoritative access/compliance via ACE (`runPolicy`) with `OwnableUpgradeable`. + - **Lite**: keeps CMTAT role-based module access control and uses ACE mainly for transfer validation. +- Core custom contracts are under: + - `contracts/modules/standard/` + - `contracts/modules/lite/` + - `contracts/modules/chainlink-ace/custom/` + - `contracts/modules/chainlink-ace/modified/` +- Tests are primarily under `test/`, with transfer-policy coverage in `test/custom/transferValidationPolicy.test.js`. +- External dependencies are vendored as git submodules in `submodules/` (notably `CMTAT`, `chainlink-ace`, and `RuleEngine`). diff --git a/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol index 656d460..e892fd2 100644 --- a/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol +++ b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol @@ -24,6 +24,7 @@ import {IRule} from "../../../../submodules/RuleEngine/src/interfaces/IRule.sol" */ contract TransferValidationPolicy is Policy { string public constant override typeAndVersion = "TransferValidationPolicy 1.0.0"; + event RulesUpdated(uint256 previousCount, uint256 newCount); /// @custom:storage-location erc7201:cmta.TransferValidationPolicy struct TransferValidationStorage { @@ -61,11 +62,13 @@ contract TransferValidationPolicy is Policy { */ function setRules(IRule[] calldata rules_) external onlyOwner { TransferValidationStorage storage $ = _getStorage(); + uint256 previousCount = $.rules.length; delete $.rules; for (uint256 i = 0; i < rules_.length; ++i) { require(address(rules_[i]) != address(0), "Rule address cannot be zero"); $.rules.push(rules_[i]); } + emit RulesUpdated(previousCount, rules_.length); } /** diff --git a/test/custom/transferValidationPolicy.test.js b/test/custom/transferValidationPolicy.test.js index 240ef7d..d0c4183 100644 --- a/test/custom/transferValidationPolicy.test.js +++ b/test/custom/transferValidationPolicy.test.js @@ -378,7 +378,11 @@ describe('TransferValidationPolicy', function () { // Now add a MaxAmountRule via setRules const maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]); - await this.transferPolicy.connect(this.admin).setRules([await maxAmountRule.getAddress()]); + await expect( + this.transferPolicy.connect(this.admin).setRules([await maxAmountRule.getAddress()]), + ) + .to.emit(this.transferPolicy, 'RulesUpdated') + .withArgs(0n, 1n); // Transfer above max should now fail await expect(this.cmtat.connect(this.admin).transfer(this.address2.address, 101n)).to.be @@ -402,6 +406,22 @@ describe('TransferValidationPolicy', function () { ).to.be.reverted; }); + it('should emit RulesUpdated with previous and new count when replacing rules', async function () { + const rule1 = await ethers.deployContract('MaxAmountRule', [100n]); + const rule2 = await ethers.deployContract('RestrictedAddressRule', [[]]); + const rule3 = await ethers.deployContract('MaxAmountRule', [500n]); + + this.transferPolicy = await deployTransferValidationPolicy( + this.policyEngineAddress, + this.admin.address, + [await rule1.getAddress(), await rule2.getAddress()], + ); + + await expect(this.transferPolicy.connect(this.admin).setRules([await rule3.getAddress()])) + .to.emit(this.transferPolicy, 'RulesUpdated') + .withArgs(2n, 1n); + }); + it('should report correct rules and rulesCount', async function () { const rule1 = await ethers.deployContract('MaxAmountRule', [100n]); const rule2 = await ethers.deployContract('RestrictedAddressRule', [[]]); From 121ca335175e741022a4ed1fddbfd428eab0475f Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Mon, 11 May 2026 15:50:14 +0200 Subject: [PATCH 44/57] Improve README and add slither/aderyn report --- .gitignore | 5 +- README.md | 279 ++++++- doc/audits/tools/aderyn-report-feedback.md | 85 +++ doc/audits/tools/aderyn-report.md | 773 ++++++++++++++++++++ doc/audits/tools/slither-report-feedback.md | 54 ++ doc/audits/tools/slither-report.md | 362 +++++++++ 6 files changed, 1536 insertions(+), 22 deletions(-) create mode 100644 doc/audits/tools/aderyn-report-feedback.md create mode 100644 doc/audits/tools/aderyn-report.md create mode 100644 doc/audits/tools/slither-report-feedback.md create mode 100644 doc/audits/tools/slither-report.md diff --git a/.gitignore b/.gitignore index ebe3be2..f332f58 100644 --- a/.gitignore +++ b/.gitignore @@ -164,4 +164,7 @@ node_modules ignition/deployments/chain-31337 # Foudry files -/cache_hardhat \ No newline at end of file +/cache_hardhat + +# custom local directory +history diff --git a/README.md b/README.md index 402c515..d5145e0 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,38 @@ # CMTAT ACE integration project +## Introduction + +This repository combines two components: + +- **CMTAT (CMTA Token)**: an open security-token standard from the [Capital Markets and Technology Association (CMTA)](https://www.cmta.ch/), with compliance-oriented modules such as conditional transfer controls, account freeze/enforcement, token pause, document and snapshot engines, and token lifecycle controls. +- **Chainlink ACE (Automated Compliance Engine)**: a policy engine that evaluates configurable compliance and authorization policies at runtime for protected contract functions. + +In this integration, CMTAT provides the token feature set and module structure, while ACE provides dynamic policy enforcement. +The goal is to let issuers update compliance behavior through policy configuration without changing core token business logic. + +## Table of Contents + +- [Deployment versions](#deployment-versions) +- [Changes from CMTAT](#changes-from-cmtat) +- [TransferValidationPolicy](#transfervalidationpolicy) +- [ERC-165 Interface Support](#erc-165-interface-support) +- [Library](#library) +- [Initialize submodules](#initialize-submodules) +- [Install dependencies](#install-dependencies) +- [Compile contracts](#compile-contracts) +- [Testing](#testing) +- [Linting & Formatting](#linting--formatting) +- [Scripts](#scripts) +- [Audit Reports Summary](#audit-reports-summary) +- [Policy-Protected Functions (Current Integration)](#policy-protected-functions-current-integration) +- [FAQ for Issuers Using CMTAT with ACE Policies](#faq-for-issuers-using-cmtat-with-ace-policies) + ## Deployment versions -Two versions are available; _lite_ version which substitutes RuleEngine with Chainlink ACE PolicyEngine, and _standard_ version, which uses PolicyEngine to protect state-changing operations instead of OpenZeppelin role-based AccessControl. +Two versions are available: + +- **Lite**: substitutes RuleEngine with Chainlink ACE PolicyEngine for transfer validation, while keeping CMTAT role-based module authorization. +- **Standard**: uses Chainlink ACE PolicyEngine as the authorization/compliance gate for state-changing operations, replacing local role-based authorization with policy checks. ### Standard @@ -233,6 +263,16 @@ contract MyCustomRule is IRule { } ``` +## ERC-165 Interface Support + +This integration includes ERC-165 interface discovery for both the protected token side and policy side: + +- **Protected-token interface support**: `PolicyProtectedUpgradeable` exposes `IPolicyProtected` via `supportsInterface`, and the Standard/Lite token bases propagate that support through their own `supportsInterface` overrides. +- **Policy interface support**: `TransferValidationPolicy` extends Chainlink ACE `Policy`, and `Policy` exposes `IPolicy` via ERC-165. +- **Rule interface support in mocks**: the included `TransferRuleMocks` expose `IRule` via `supportsInterface` for compatibility testing. + +This allows integrators and tooling to programmatically verify interface compatibility before wiring policies, engines, and rule contracts together. + ## Library - CMTAT [v3.2.0](https://github.com/CMTA/CMTAT/releases/tag/v3.2.0) @@ -241,7 +281,7 @@ contract MyCustomRule is IRule { ## Initialize submodules ```shell -git submodule update. --init +git submodule update --init --recursive ``` ## Install dependencies @@ -352,50 +392,247 @@ Run the demo on a local Hardhat network: npx hardhat run scripts/demo.js ``` -# Static Analysis (Slither) +## Audit Reports Summary + +This section summarizes the static-analysis reports available in this repository. -[Slither](https://github.com/crytic/slither) is a Solidity static analysis framework used to find vulnerabilities and code quality issues. +### Slither -## Setup +Here is the list of report performed with [Slither](https://github.com/crytic/slither) -Create and activate a Python virtual environment called `cct`: +Setup: ```shell python3 -m venv cct chmod +x cct/bin/activate source cct/bin/activate -``` - -Install Slither inside the virtual environment: - -```shell pip install slither-analyzer -``` - -Verify the installation: - -```shell slither --version ``` -## Running - -Slither uses Foundry for compilation. Make sure `forge` is installed and the virtual environment is active: +Run: ```shell source cct/bin/activate npm run slither ``` -This generates timestamped reports in the `reports/` directory: +```bash +slither . --checklist --filter-paths "openzeppelin-contracts|test|forge-std|mocks" > doc/audits/tools/slither-report.md +``` + +`npm run slither` generates timestamped reports in the `reports/` directory: - **JSON** — `reports/slither-report-.json` - **Markdown** — `reports/slither-report-.md` -## Deactivating the virtual environment +The direct `slither ... --checklist` command above writes a checklist-style report to `doc/audits/tools/slither-report.md`. When done, deactivate the virtual environment: ```shell deactivate ``` + +| Version | Report | Assessment | +| --- | --- | --- | +| current | `doc/audits/tools/slither-report.md` | `doc/audits/tools/slither-report-feedback.md` | + +Report scope: repo-focused filtered checklist run. + +0 High · 9 Medium · 10 Low · 27 Informational + +| ID | Finding | Instances | Assessment | +| --- | --- | --- | --- | +| M-1 | `reentrancy-no-eth` | 3 | Contextual; expected external policy-engine calls and hook flow. Manual review required. | +| M-2 | `uninitialized-local` | 6 | Likely analyzer limitation in extractor decode paths; treated as likely false positive. | +| L-1 | `calls-loop` | 8 | Accepted by design where policy/rule chains iterate; monitor gas/complexity. | +| L-2 | `reentrancy-events` | 2 | Informational reentrancy/event-order signal; no confirmed exploitable issue from checklist alone. | +| I-1 | `assembly` | 2 | Expected in storage-slot patterns; informational. | +| I-2 | `dead-code` | 2 | Cleanup candidate; not a direct security issue. | +| I-3 | `naming-convention` | 23 | Style-only informational findings. | + +### Aderyn + +Here is the list of report performed with [Aderyn](https://github.com/Cyfrin/aderyn) + +```bash +aderyn -x mocks --output doc/audits/tools/aderyn-report.md +``` + +| Version | Report | Assessment | +| --- | --- | --- | +| current | `doc/audits/tools/aderyn-report.md` | `doc/audits/tools/aderyn-report-feedback.md` | + +Report scope: 17 Solidity files, 959 nSLOC. + +2 High · 10 Low + +| ID | Finding | Instances | Assessment | +| --- | --- | --- | --- | +| H-1 | Arbitrary `from` passed to `transferFrom` | 1 | Accepted in context — policy-gated flow; not treated as exploitable in this integration design. | +| H-2 | Contract locks Ether without withdraw | 2 | Accepted false positive — token deployments are not intended as ETH custody contracts. | +| L-1 | Centralization Risk | 11 | Accepted by design — privileged governance/control is intentional. | +| L-2 | Unsafe ERC20 Operation | 7 | Accepted false positive — primarily selector/module-flow usage, not unsafe token transfer wrappers. | +| L-3 | Unspecific Solidity Pragma | 17 | Accepted by design — version ranges are intentionally used in this codebase. | +| L-4 | Literal Instead of Constant | 2 | Informational — optional quality improvement. | +| L-5 | PUSH0 Opcode | 17 | Environment-dependent informational finding in this setup. | +| L-6 | Empty Block | 22 | Accepted by design — authorization hook pattern. | +| L-7 | Loop Contains `require`/`revert` | 4 | Accepted by design — atomic validation and explicit failure signaling. | +| L-8 | Unused State Variable | 1 | False positive — `STORAGE_LOCATION` is used via inline assembly in `_getStorage()`. | +| L-9 | Costly operations inside loop | 2 | Accepted — expected tradeoff in policy/rule iteration paths. | +| L-10 | Unused Import | 9 | Partially fixed; remaining cases are intentional (artifact/NatSpec/doc reasons). | + +## Policy-Protected Functions (Current Integration) + +This project now documents the policy-protected function selectors explicitly. +The list below reflects the selectors wired in deployment/test flows (`scripts/demo.js`, `test/deploymentUtils.js`). + +### Core transfer selectors (Standard + Lite) + +| Function signature | Selector | +| --- | --- | +| `transfer(address,uint256)` | `0xa9059cbb` | +| `transferFrom(address,address,uint256)` | `0x23b872dd` | + +### Admin/lifecycle selectors (Standard policy-authoritative flow) + +| Function signature | Selector | +| --- | --- | +| `mint(address,uint256)` | `0x40c10f19` | +| `burn(address,uint256)` | `0x9dc29fac` | +| `burn(uint256)` | `0x42966c68` | +| `burnFrom(address,uint256)` | `0x79cc6790` | +| `forcedTransfer(address,address,uint256)` | `0x9fc1d0e7` | +| `freezePartialTokens(address,uint256)` | `0x125c4a33` | +| `unfreezePartialTokens(address,uint256)` | `0x1fe56f7d` | +| `setName(string)` | `0xc47f0027` | +| `setSymbol(string)` | `0xb84c8246` | +| `setTokenId(string)` | `0xdcfd616f` | +| `setDocumentEngine(address)` | `0x33611079` | +| `setSnapshotEngine(address)` | `0xe236aabf` | +| `setCCIPAdmin(address)` | `0xa8fa343c` | +| `crosschainMint(address,uint256)` | `0x18bf5077` | +| `crosschainBurn(address,uint256)` | `0x2b8c49e3` | + +Note: exact policy chains per selector (PausePolicy, RBAC, TransferValidationPolicy, etc.) can vary by deployment configuration. + +## FAQ for Issuers Using CMTAT with ACE Policies + +> Warning: This FAQ is best-effort guidance for this repository integration. It may be incomplete and is not a substitute for official ACE documentation, legal advice, or a professional security review. + +### 1. What does ACE add to CMTAT? + +ACE moves compliance checks into separate policy contracts. This lets you update compliance rules without redeploying the token. + +### 2. Do I still need CMTAT roles if ACE controls authorization? + +Yes. + +- Keep CMTAT roles where possible as a second safety layer, so a policy misconfiguration alone is less likely to enable sensitive actions. +- Treat ACE policy configuration as high-privilege admin control: changing policies, ordering, extractors, or `defaultAllow` can effectively allow or block critical token operations. + +### 3. Which CMTAT version should I choose: lite or standard? + +Use `lite` if you mainly need policy checks on transfers. Use `standard` if you also want policy checks on admin and lifecycle actions. + +### 4. Who should own and manage the PolicyEngine? + +Use a highly trusted governance setup, such as a multisig, DAO, or timelock. Whoever controls PolicyEngine settings effectively controls token compliance behavior. + +### 5. What is the minimum policy set for a production issuer? + +For token issuers, a common baseline is: + +- Pause policy. +- Role-based access policy. +- Transfer restriction policy (for example KYC/sanctions/rule checks). +- A clearly defined default result (`defaultAllow=true` or `defaultAllow=false`). + +### 6. Should default policy outcome be allow or reject? + +Choose based on your operating model: + +- `defaultAllow=true`: allow by default, and block only when a policy rejects. +- `defaultAllow=false`: reject by default, and allow only when policies explicitly allow. + +In ACE, `true` is the usual default behavior; confirm and document your choice before launch. + +### 7. How do I avoid policy ordering mistakes? + +Start with restrictive checks, then business-limit checks, and place permissive/bypass behavior only where intentionally needed. A policy that returns `Allow` stops evaluation of later policies. + +### 8. What happens if extractor or parameter mapping is wrong? + +Policies may read the wrong values or fail unexpectedly. Treat extractor and parameter mapping as security-critical configuration, and test them like contract code. + +### 9. Can I enforce different policies for transfer and transferFrom? + +Yes. `transfer` and `transferFrom` use different selectors, so configure and test both paths separately. Include spender-specific checks for `transferFrom`. + +### 10. How should I use context safely? + +Use one of the two ACE patterns: + +- Preferred for custom functions: pass `context` directly with `runPolicyWithContext(context)`. +- For fixed interfaces (like ERC-20 functions): call `setContext(...)` and consume it in the same atomic transaction. + +Do not leave context pending across transactions. + +### 11. What governance process should I use for policy changes? + +Use a staged process: + +1. Propose the change and simulate it in staging. +2. Review policy order, extractor mapping, and default outcome. +3. Execute through timelock/multisig. +4. Monitor events and transfer behavior after deployment. + +### 12. What should I monitor in production? + +Monitor: + +- Policy add/remove actions. +- Extractor and mapping changes. +- `defaultAllow` changes (this flips the fallback behavior when all policies return `Continue`: `true` = allow, `false` = reject). +- Policy execution failures. +- Sudden increases in rejected or bypassed actions. + +### 13. How do I prepare for regulator or auditor questions? + +Maintain an audit-ready change log with policy versions, activation times, approval records, and test evidence for each policy update. + +### 14. What are common integration mistakes? + +- Wrong policy order (accidental early bypass). +- Missing extractor for a protected selector. +- Incorrect parameter names or mapping. +- No tests for revert/context behavior. +- Weak governance around PolicyEngine admin changes. + +### 15. What should my pre-mainnet checklist include? + +- Role/admin key setup completed. +- Policy chain and order reviewed. +- Extractor and parameter mapping tested for each selector. +- Default outcome verified for each contract. +- Pause and incident runbook tested. +- Upgrade and rollback plan approved. + +### 16. How do I handle an incident (bad policy push or false rejects)? + +Use an incident runbook with clear authority to pause sensitive actions, revert bad policy settings, communicate with counterparties, and re-enable flows in controlled phases. + +### 17. Do I need separate testing for upgrades? + +Yes. Run compliance regression tests for every upgrade, including policy-chain behavior, extractor decoding, and role/authorization invariants. + +### 18. What documentation should I publish to integrators? + +Publish a short integration guide that includes: + +- Which functions are policy-protected (function names/selectors). +- What each policy does in normal operation. +- Common failure cases and the revert reasons integrators may see. +- How admin/policy changes are approved and announced. +- Who to contact for support and incident escalation. diff --git a/doc/audits/tools/aderyn-report-feedback.md b/doc/audits/tools/aderyn-report-feedback.md new file mode 100644 index 0000000..c650533 --- /dev/null +++ b/doc/audits/tools/aderyn-report-feedback.md @@ -0,0 +1,85 @@ +# Aderyn Report Feedback + +Here is the list of report performed with [Aderyn](https://github.com/Cyfrin/aderyn) + +```bash +aderyn -x mocks --output doc/audits/tools/aderyn-report.md +``` + +| Version | Report | Assessment | +| --- | --- | --- | +| current | `doc/audits/tools/aderyn-report.md` | `doc/audits/tools/aderyn-report-feedback.md` | + +Report scope: 17 Solidity files, 959 nSLOC. + +2 High · 10 Low + +| ID | Finding | Instances | Assessment | +| --- | --- | --- | --- | +| H-1 | Arbitrary `from` passed to `transferFrom` | 1 | Accepted in context — policy-gated flow; not treated as exploitable in this integration design. | +| H-2 | Contract locks Ether without withdraw | 2 | Accepted false positive — token deployments are not intended as ETH custody contracts. | +| L-1 | Centralization risk | 11 | Accepted by design — privileged governance/control is intentional. | +| L-2 | Unsafe ERC20 operation | 7 | Accepted false positive — primarily selector/module-flow usage, not unsafe token transfer wrappers. | +| L-3 | Unspecific Solidity pragma | 17 | Accepted by design — version ranges are intentionally used in this codebase. | +| L-4 | Literal instead of constant | 2 | Informational — optional quality improvement. | +| L-5 | PUSH0 opcode | 17 | Environment-dependent informational; not a direct vulnerability finding in this deployment context. | +| L-6 | Empty block | 22 | Accepted by design — authorization hook pattern. | +| L-7 | Loop contains `require`/`revert` | 4 | Accepted by design — atomic validation and explicit failure signaling. | +| L-8 | Unused state variable | 1 | False positive — `STORAGE_LOCATION` is used via inline assembly in `_getStorage()`. | +| L-9 | Costly operations inside loop | 2 | Accepted — expected tradeoff in policy/rule iteration paths. | +| L-10 | Unused import | 9 | Partially fixed; remaining cases are intentional (artifact/NatSpec/doc reasons). | + +## Executive triage + +- Total findings reported: **12** (2 High, 10 Low) +- Immediate action items in this repo: **none classified as confirmed exploitable vulnerabilities** +- Main status: **mostly false positives, design choices, or dependency-level noise** + +## High findings + +### H-1: Arbitrary `from` passed to `transferFrom` + +- Location: `contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol` +- Status: **Accepted / not a vulnerability in this context** +- Rationale: this call path is policy-gated through ACE + CMTAT authorization flow; this is expected ERC20/CMTAT behavior and not an unguarded arbitrary transfer primitive. + +### H-2: Contract locks Ether without withdraw + +- Location: UUPS deployment contracts +- Status: **Accepted false positive** +- Rationale: these token deployments are not designed to custody native ETH; no payable business flow requires ETH withdrawal. + +## Low findings (grouped) + +### L-1 (centralization), L-3 (pragma), L-4/L-5/L-6/L-7/L-9 + +- Status: **Informational / accepted** +- Rationale: these are style/governance/design heuristics and do not by themselves indicate exploitable defects in this integration. + +### L-2: Unsafe ERC20 operation + +- Status: **Accepted false positive** +- Rationale: flagged sites are interface selectors/existing token-module flows, not unsafe raw token transfer integrations requiring `SafeERC20` wrappers. + +### L-8: Unused state variable + +- Status: **False positive** +- Rationale: flagged constant `STORAGE_LOCATION` is consumed in inline assembly (`_getStorage()`), which static analyzers may miss. + +### L-10: Unused import + +- Status: **Partially fixed + partially intentional** + +Fixed in this repo: +- `contracts/modules/lite/CCTCMTATBasePolicyEngine.sol` +- `contracts/modules/standard/CCTCommon.sol` + +Intentionally kept: +- `contracts/modules/demo/DemoImports.sol` (artifact-compilation anchor for demo/deploy flows) +- `contracts/modules/lite/CCTCMTATBaseERC1404.sol` (`@inheritdoc` doc-resolution dependency) + +## Recommended follow-up + +1. Keep `L-10` intentional cases documented as exceptions. +2. Document `L-8` as an inline-assembly false positive in audit triage notes. +3. Continue prioritizing repo-owned paths over dependency findings in audit triage. diff --git a/doc/audits/tools/aderyn-report.md b/doc/audits/tools/aderyn-report.md new file mode 100644 index 0000000..440603e --- /dev/null +++ b/doc/audits/tools/aderyn-report.md @@ -0,0 +1,773 @@ +# Aderyn Analysis Report + +This report was generated by [Aderyn](https://github.com/Cyfrin/aderyn), a static analysis tool built by [Cyfrin](https://cyfrin.io), a blockchain security company. This report is not a substitute for manual audit or security review. It should not be relied upon for any purpose other than to assist in the identification of potential security vulnerabilities. +# Table of Contents + +- [Summary](#summary) + - [Files Summary](#files-summary) + - [Files Details](#files-details) + - [Issue Summary](#issue-summary) +- [High Issues](#high-issues) + - [H-1: Arbitrary `from` Passed to `transferFrom`](#h-1-arbitrary-from-passed-to-transferfrom) + - [H-2: Contract locks Ether without a withdraw function](#h-2-contract-locks-ether-without-a-withdraw-function) +- [Low Issues](#low-issues) + - [L-1: Centralization Risk](#l-1-centralization-risk) + - [L-2: Unsafe ERC20 Operation](#l-2-unsafe-erc20-operation) + - [L-3: Unspecific Solidity Pragma](#l-3-unspecific-solidity-pragma) + - [L-4: Literal Instead of Constant](#l-4-literal-instead-of-constant) + - [L-5: PUSH0 Opcode](#l-5-push0-opcode) + - [L-6: Empty Block](#l-6-empty-block) + - [L-7: Loop Contains `require`/`revert`](#l-7-loop-contains-requirerevert) + - [L-8: Unused State Variable](#l-8-unused-state-variable) + - [L-9: Costly operations inside loop](#l-9-costly-operations-inside-loop) + - [L-10: Unused Import](#l-10-unused-import) + + +# Summary + +## Files Summary + +| Key | Value | +| --- | --- | +| .sol Files | 17 | +| Total nSLOC | 959 | + + +## Files Details + +| Filepath | nSLOC | +| --- | --- | +| contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol | 24 | +| contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol | 12 | +| contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol | 7 | +| contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol | 24 | +| contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol | 9 | +| contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol | 7 | +| contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol | 35 | +| contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol | 78 | +| contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol | 29 | +| contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol | 82 | +| contracts/modules/demo/DemoImports.sol | 9 | +| contracts/modules/lite/CCTCMTATBaseERC1404.sol | 60 | +| contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol | 99 | +| contracts/modules/lite/CCTCMTATBasePolicyEngine.sol | 133 | +| contracts/modules/lite/PolicyValidationModuleERC1404.sol | 77 | +| contracts/modules/lite/ValidationModulePolicyEngine.sol | 92 | +| contracts/modules/standard/CCTCommon.sol | 182 | +| **Total** | **959** | + + +## Issue Summary + +| Category | No. of Issues | +| --- | --- | +| High | 2 | +| Low | 10 | + + +# High Issues + +## H-1: Arbitrary `from` Passed to `transferFrom` + +Passing an arbitrary `from` address to `transferFrom` (or `safeTransferFrom`) can lead to loss of funds, because anyone can transfer tokens from the `from` address if an approval is made. + +
1 Found Instances + + +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 45](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L45) + + ```solidity + return CMTATBaseCommon.transferFrom(from, to, value); + ``` + +
+ + + +## H-2: Contract locks Ether without a withdraw function + +It appears that the contract includes a payable function to accept Ether but lacks a corresponding function to withdraw it, which leads to the Ether being locked in the contract. To resolve this issue, please implement a public or external function that allows for the withdrawal of Ether from the contract. + +
2 Found Instances + + +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 13](contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L13) + + ```solidity + contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC20CrossChain, UUPSUpgradeable { + ``` + +- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 13](contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L13) + + ```solidity + contract ComplianceTokenCMTATUUPSUpgradeable is CCTCommon, UUPSUpgradeable { + ``` + +
+ + + +# Low Issues + +## L-1: Centralization Risk + +Contracts have owners with privileged rights to perform admin tasks and need to be trusted to not perform malicious updates or drain funds. + +
11 Found Instances + + +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 27](contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L27) + + ```solidity + ) internal virtual override(UUPSUpgradeable) onlyRole(PROXY_UPGRADE_ROLE) {} + ``` + +- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 23](contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L23) + + ```solidity + function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyOwner {} + ``` + +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 63](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L63) + + ```solidity + function setRules(IRule[] calldata rules_) external onlyOwner { + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 120](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L120) + + ```solidity + function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 144](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L144) + + ```solidity + onlyRole(BURNER_FROM_ROLE) + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 157](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L157) + + ```solidity + onlyRole(BURNER_SELF_ROLE) + ``` + +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 171](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L171) + + ```solidity + function _authorizeAttachPolicyEngine(address) internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 177](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L177) + + ```solidity + function _authorizePause() internal virtual override(PauseModule) onlyRole(PAUSER_ROLE) {} + ``` + +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 178](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L178) + + ```solidity + function _authorizeDeactivate() internal virtual override(PauseModule) onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 180](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L180) + + ```solidity + function _authorizeFreeze() internal virtual override(EnforcementModule) onlyRole(ENFORCER_ROLE) {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 176](contracts/modules/standard/CCTCommon.sol#L176) + + ```solidity + function _authorizeAttachPolicyEngine(address) internal virtual override onlyOwner {} + ``` + +
+ + + +## L-2: Unsafe ERC20 Operation + +ERC20 functions may not behave as expected. For example: return values are not always meaningful. It is recommended to use OpenZeppelin's SafeERC20 library. + +
7 Found Instances + + +- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 36](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L36) + + ```solidity + if (payload.selector == IERC20.transfer.selector) { + ``` + +- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 40](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L40) + + ```solidity + } else if (payload.selector == IERC20.transferFrom.selector) { + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 29](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L29) + + ```solidity + return ERC20Upgradeable.approve(spender, value); + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 35](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L35) + + ```solidity + return CMTATBaseCommon.transfer(to, value); + ``` + +- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 72](contracts/modules/lite/ValidationModulePolicyEngine.sol#L72) + + ```solidity + return _tryCheckPolicies(IERC20.transferFrom.selector, spender, abi.encode(from, to, value)); + ``` + +- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 80](contracts/modules/lite/ValidationModulePolicyEngine.sol#L80) + + ```solidity + return _tryCheckPolicies(IERC20.transfer.selector, from, abi.encode(to, value)); + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 163](contracts/modules/standard/CCTCommon.sol#L163) + + ```solidity + return CMTATBaseCommon.transfer(to, value); + ``` + +
+ + + +## L-3: Unspecific Solidity Pragma + +Consider using a specific version of Solidity in your contracts instead of a wide version. For example, instead of `pragma solidity ^0.8.0;`, use `pragma solidity 0.8.0;` + +
17 Found Instances + + +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 2](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 3](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol [Line: 2](contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol [Line: 2](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/demo/DemoImports.sol [Line: 3](contracts/modules/demo/DemoImports.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC1404.sol [Line: 3](contracts/modules/lite/CCTCMTATBaseERC1404.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 3](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 3](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/lite/PolicyValidationModuleERC1404.sol [Line: 3](contracts/modules/lite/PolicyValidationModuleERC1404.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 3](contracts/modules/lite/ValidationModulePolicyEngine.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 3](contracts/modules/standard/CCTCommon.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +
+ + + +## L-4: Literal Instead of Constant + +Define and use `constant` variables instead of using literals. If the same constant literal value is used multiple times, create a constant state variable and reference it throughout the contract. + +
2 Found Instances + + +- Found in contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol [Line: 57](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L57) + + ```solidity + IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + ``` + +- Found in contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol [Line: 74](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L74) + + ```solidity + IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + ``` + +
+ + + +## L-5: PUSH0 Opcode + +Solc compiler version 0.8.20 switches the default target EVM version to Shanghai, which means that the generated bytecode will include PUSH0 opcodes. Be sure to select the appropriate EVM version in case you intend to deploy on a chain other than mainnet like L2 chains that may not support PUSH0, otherwise deployment of your contracts will fail. + +
17 Found Instances + + +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 2](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 3](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol [Line: 2](contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol [Line: 2](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/demo/DemoImports.sol [Line: 3](contracts/modules/demo/DemoImports.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC1404.sol [Line: 3](contracts/modules/lite/CCTCMTATBaseERC1404.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 3](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 3](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/lite/PolicyValidationModuleERC1404.sol [Line: 3](contracts/modules/lite/PolicyValidationModuleERC1404.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 3](contracts/modules/lite/ValidationModulePolicyEngine.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 3](contracts/modules/standard/CCTCommon.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +
+ + + +## L-6: Empty Block + +Consider removing empty blocks. + +
22 Found Instances + + +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 25](contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L25) + + ```solidity + function _authorizeUpgrade( + ``` + +- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 23](contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L23) + + ```solidity + function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyOwner {} + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 120](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L120) + + ```solidity + function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 140](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L140) + + ```solidity + function _authorizeBurnFrom() + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 153](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L153) + + ```solidity + function _authorizeSelfBurn() + ``` + +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 171](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L171) + + ```solidity + function _authorizeAttachPolicyEngine(address) internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 177](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L177) + + ```solidity + function _authorizePause() internal virtual override(PauseModule) onlyRole(PAUSER_ROLE) {} + ``` + +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 178](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L178) + + ```solidity + function _authorizeDeactivate() internal virtual override(PauseModule) onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 180](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L180) + + ```solidity + function _authorizeFreeze() internal virtual override(EnforcementModule) onlyRole(ENFORCER_ROLE) {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 176](contracts/modules/standard/CCTCommon.sol#L176) + + ```solidity + function _authorizeAttachPolicyEngine(address) internal virtual override onlyOwner {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 247](contracts/modules/standard/CCTCommon.sol#L247) + + ```solidity + function _authorizeERC20AttributeManagement() internal virtual override(ERC20BaseModule) runPolicy {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 253](contracts/modules/standard/CCTCommon.sol#L253) + + ```solidity + function _authorizeMint() internal virtual override(ERC20MintModule) runPolicy {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 259](contracts/modules/standard/CCTCommon.sol#L259) + + ```solidity + function _authorizeBurn() internal virtual override(ERC20BurnModule) runPolicy {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 265](contracts/modules/standard/CCTCommon.sol#L265) + + ```solidity + function _authorizeDocumentManagement() internal virtual override(DocumentEngineModule) runPolicy {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 271](contracts/modules/standard/CCTCommon.sol#L271) + + ```solidity + function _authorizeExtraInfoManagement() internal virtual override(ExtraInformationModule) runPolicy {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 277](contracts/modules/standard/CCTCommon.sol#L277) + + ```solidity + function _authorizeERC20Enforcer() internal virtual override(ERC20EnforcementModule) runPolicy {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 283](contracts/modules/standard/CCTCommon.sol#L283) + + ```solidity + function _authorizeForcedTransfer() internal virtual override(ERC20EnforcementModule) runPolicy {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 289](contracts/modules/standard/CCTCommon.sol#L289) + + ```solidity + function _authorizeSnapshots() internal virtual override(SnapshotEngineModule) runPolicy {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 295](contracts/modules/standard/CCTCommon.sol#L295) + + ```solidity + function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) runPolicy {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 306](contracts/modules/standard/CCTCommon.sol#L306) + + ```solidity + function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) runPolicy {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 313](contracts/modules/standard/CCTCommon.sol#L313) + + ```solidity + function _authorizeBurnFrom() internal virtual override(ERC20CrossChainModule) runPolicy {} + ``` + +- Found in contracts/modules/standard/CCTCommon.sol [Line: 320](contracts/modules/standard/CCTCommon.sol#L320) + + ```solidity + function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) runPolicy {} + ``` + +
+ + + +## L-7: Loop Contains `require`/`revert` + +Avoid `require` / `revert` statements in a loop because a single bad item can cause the whole transaction to fail. It's better to forgive on fail and return failed elements post processing of the loop + +
4 Found Instances + + +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 52](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L52) + + ```solidity + for (uint256 i = 0; i < ruleAddrs.length; ++i) { + ``` + +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 67](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L67) + + ```solidity + for (uint256 i = 0; i < rules_.length; ++i) { + ``` + +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 111](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L111) + + ```solidity + for (uint256 i = 0; i < len; ++i) { + ``` + +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 124](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L124) + + ```solidity + for (uint256 i = 0; i < len; ++i) { + ``` + +
+ + + +## L-8: Unused State Variable + +State variable appears to be unused. No analysis has been performed to see if any inline assembly references it. Consider removing this unused variable. + +
1 Found Instances + + +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 35](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L35) + + ```solidity + bytes32 private constant STORAGE_LOCATION = 0xd90ded5881f9295c61e86b2e3b551acbb5fe06f9f79d0cec87ddc5bb60d48e00; + ``` + +
+ + + +## L-9: Costly operations inside loop + +Invoking `SSTORE` operations in loops may waste gas. Use a local variable to hold the loop computation result. + +
2 Found Instances + + +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 52](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L52) + + ```solidity + for (uint256 i = 0; i < ruleAddrs.length; ++i) { + ``` + +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 67](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L67) + + ```solidity + for (uint256 i = 0; i < rules_.length; ++i) { + ``` + +
+ + + +## L-10: Unused Import + +Redundant import statement. Consider removing it. + +
9 Found Instances + + +- Found in contracts/modules/demo/DemoImports.sol [Line: 8](contracts/modules/demo/DemoImports.sol#L8) + + ```solidity + import {MockV3Aggregator} from "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol"; + ``` + +- Found in contracts/modules/demo/DemoImports.sol [Line: 9](contracts/modules/demo/DemoImports.sol#L9) + + ```solidity + import {PolicyEngine} from "@chainlink/policy-management/core/PolicyEngine.sol"; + ``` + +- Found in contracts/modules/demo/DemoImports.sol [Line: 10](contracts/modules/demo/DemoImports.sol#L10) + + ```solidity + import {PausePolicy} from "@chainlink/policy-management/policies/PausePolicy.sol"; + ``` + +- Found in contracts/modules/demo/DemoImports.sol [Line: 11](contracts/modules/demo/DemoImports.sol#L11) + + ```solidity + import {RoleBasedAccessControlPolicy} from "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol"; + ``` + +- Found in contracts/modules/demo/DemoImports.sol [Line: 12](contracts/modules/demo/DemoImports.sol#L12) + + ```solidity + import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMintPolicy.sol"; + ``` + +- Found in contracts/modules/demo/DemoImports.sol [Line: 13](contracts/modules/demo/DemoImports.sol#L13) + + ```solidity + import {ERC20TransferExtractor} from "@chainlink/policy-management/extractors/ERC20TransferExtractor.sol"; + ``` + +- Found in contracts/modules/demo/DemoImports.sol [Line: 14](contracts/modules/demo/DemoImports.sol#L14) + + ```solidity + import {SnapshotEngineMock} from "CMTAT/mocks/SnapshotEngineMock.sol"; + ``` + +- Found in contracts/modules/demo/DemoImports.sol [Line: 15](contracts/modules/demo/DemoImports.sol#L15) + + ```solidity + import {DocumentEngineMock} from "CMTAT/mocks/DocumentEngineMock.sol"; + ``` + +- Found in contracts/modules/lite/CCTCMTATBaseERC1404.sol [Line: 7](contracts/modules/lite/CCTCMTATBaseERC1404.sol#L7) + + ```solidity + import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; + ``` + +
+ + + diff --git a/doc/audits/tools/slither-report-feedback.md b/doc/audits/tools/slither-report-feedback.md new file mode 100644 index 0000000..6179409 --- /dev/null +++ b/doc/audits/tools/slither-report-feedback.md @@ -0,0 +1,54 @@ +# Slither Report Feedback + +Here is the list of report performed with [Slither](https://github.com/crytic/slither) + +```bash +slither . --checklist --filter-paths "openzeppelin-contracts|test|forge-std|mocks" > doc/audits/tools/slither-report.md +``` + +| Version | Report | Assessment | +| --- | --- | --- | +| current | `doc/audits/tools/slither-report.md` | `doc/audits/tools/slither-report-feedback.md` | + +Report scope: repo-focused filtered checklist run. + +0 High · 9 Medium · 10 Low · 27 Informational + +| ID | Finding | Instances | Assessment | +| --- | --- | --- | --- | +| M-1 | `reentrancy-no-eth` | 3 | Contextual; expected external policy-engine calls and hook flow. Manual review required. | +| M-2 | `uninitialized-local` | 6 | Likely analyzer limitation in extractor decode paths; treated as likely false positive. | +| L-1 | `calls-loop` | 8 | Accepted by design where policy/rule chains iterate; monitor gas/complexity. | +| L-2 | `reentrancy-events` | 2 | Informational reentrancy/event-order signal; no confirmed exploitable issue from checklist alone. | +| I-1 | `assembly` | 2 | Expected in storage-slot patterns; informational. | +| I-2 | `dead-code` | 2 | Cleanup candidate; not a direct security issue. | +| I-3 | `naming-convention` | 23 | Style-only informational findings. | + +## Executive triage + +- Updated report is now focused on repo-owned contracts after removing non-target components from scan scope. +- Current findings are mainly pattern-based warnings (`reentrancy-*`, `calls-loop`, `uninitialized-local`) requiring contextual validation. +- No confirmed exploitable vulnerability is established from checklist output alone. + +## Key observations + +### `reentrancy-*` (Medium/Low) + +- Many findings involve expected external hooks/policy engine calls and inherited module structure. +- Status: **Requires manual contextual review**, but no immediate confirmed exploitable issue from this checklist output alone. + +### `uninitialized-local` in `ERC20TransferFromExtractor` + +- Status: **Likely analyzer limitation / false positive** +- Rationale: variables are populated by branch decode paths before use in valid selector flows. + +### Informational categories + +- `assembly`, `dead-code`, `naming-convention`. +- Status: **Non-blocking quality signals**. + +## Recommended follow-up + +1. Re-run Slither with strict filtering to focus on repo-owned contracts only. +2. Keep `reentrancy-*` findings in a dedicated manual-review list tied to ACE policy-engine trust boundaries. +3. Track only manually validated findings as actionable. diff --git a/doc/audits/tools/slither-report.md b/doc/audits/tools/slither-report.md new file mode 100644 index 0000000..277f880 --- /dev/null +++ b/doc/audits/tools/slither-report.md @@ -0,0 +1,362 @@ +**THIS CHECKLIST IS NOT COMPLETE**. Use `--show-ignored-findings` to show all the results. +Summary + - [reentrancy-no-eth](#reentrancy-no-eth) (3 results) (Medium) + - [uninitialized-local](#uninitialized-local) (6 results) (Medium) + - [calls-loop](#calls-loop) (8 results) (Low) + - [reentrancy-events](#reentrancy-events) (2 results) (Low) + - [assembly](#assembly) (2 results) (Informational) + - [dead-code](#dead-code) (2 results) (Informational) + - [naming-convention](#naming-convention) (23 results) (Informational) +## reentrancy-no-eth +Impact: Medium +Confidence: Medium + - [ ] ID-0 +Reentrancy in [PolicyProtectedUpgradeable.runPolicy()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L51-L63): + External calls: + - [_policyProtectedStorage().policyEngine.run(IPolicyEngine.Payload({selector:msg.sig,sender:msg.sender,data:msg.data,context:context}))](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L56-L58) + State variables written after the call(s): + - [clearContext()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L61) + - [$ = policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L33) + [PolicyProtectedUpgradeable.policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28) can be used in cross function reentrancies: + - [PolicyProtectedUpgradeable._policyProtectedStorage()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35) + +contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L51-L63 + + + - [ ] ID-1 +Reentrancy in [ValidationModulePolicyEngine._transferred(address,address,address,uint256)](contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120): + External calls: + - [policyEngine_.run(IPolicyEngine.Payload({selector:msg.sig,sender:_msgSender(),data:msg.data,context:context}))](contracts/modules/lite/ValidationModulePolicyEngine.sol#L112-L114) + State variables written after the call(s): + - [clearContext()](contracts/modules/lite/ValidationModulePolicyEngine.sol#L116) + - [$ = policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L33) + [PolicyProtectedUpgradeable.policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28) can be used in cross function reentrancies: + - [PolicyProtectedUpgradeable._policyProtectedStorage()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35) + +contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120 + + + - [ ] ID-2 +Reentrancy in [PolicyProtectedUpgradeable._attachPolicyEngine(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99): + External calls: + - [_policyProtectedStorage().policyEngine.detach()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L90-L94) + State variables written after the call(s): + - [PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine),reason)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L93) + - [$ = policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L33) + [PolicyProtectedUpgradeable.policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28) can be used in cross function reentrancies: + - [PolicyProtectedUpgradeable._policyProtectedStorage()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35) + - [_policyProtectedStorage().policyEngine = IPolicyEngine(policyEngine)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L96) + - [$ = policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L33) + [PolicyProtectedUpgradeable.policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28) can be used in cross function reentrancies: + - [PolicyProtectedUpgradeable._policyProtectedStorage()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35) + +contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99 + + +## uninitialized-local +Impact: Medium +Confidence: Medium + - [ ] ID-3 +[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).from](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L32) is a local variable never initialized + +contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L32 + + + - [ ] ID-4 +[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).to](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L33) is a local variable never initialized + +contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L33 + + + - [ ] ID-5 +[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).amount](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L34) is a local variable never initialized + +contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L34 + + + - [ ] ID-6 +[MintBurnExtractor.extract(IPolicyEngine.Payload).account](contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L34) is a local variable never initialized + +contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L34 + + + - [ ] ID-7 +[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).spender](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L31) is a local variable never initialized + +contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L31 + + + - [ ] ID-8 +[MintBurnExtractor.extract(IPolicyEngine.Payload).amount](contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L35) is a local variable never initialized + +contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L35 + + +## calls-loop +Impact: Low +Confidence: Medium + - [ ] ID-9 +[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134) has external calls inside a loop: [message = $.rules[i].messageForTransferRestriction(code)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L114) + +contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134 + + + - [ ] ID-10 +[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134) has external calls inside a loop: [code = $.rules[i].detectTransferRestrictionFrom(spender,from,to,amount)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L112) + +contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134 + + + - [ ] ID-11 +[ValidationModulePolicyEngine._transferred(address,address,address,uint256)](contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120) has external calls inside a loop: [policyEngine_.run(IPolicyEngine.Payload({selector:msg.sig,sender:_msgSender(),data:msg.data,context:context}))](contracts/modules/lite/ValidationModulePolicyEngine.sol#L112-L114) + Calls stack containing the loop: + ERC20BurnModule.batchBurn(address[],uint256[]) + ERC20BurnModuleInternal._batchBurn(address[],uint256[]) + CCTCMTATBaseERC20CrossChain._burnOverride(address,uint256) + CCTCMTATBasePolicyEngine._checkTransferred(address,address,address,uint256) + +contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120 + + + - [ ] ID-12 +[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134) has external calls inside a loop: [message_scope_5 = $.rules[i_scope_3].messageForTransferRestriction(code_scope_4)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L127) + +contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134 + + + - [ ] ID-13 +[ValidationModulePolicyEngine._transferred(address,address,address,uint256)](contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120) has external calls inside a loop: [policyEngine_.run(IPolicyEngine.Payload({selector:msg.sig,sender:_msgSender(),data:msg.data,context:context}))](contracts/modules/lite/ValidationModulePolicyEngine.sol#L112-L114) + Calls stack containing the loop: + ERC20MintModule.batchMint(address[],uint256[]) + ERC20MintModuleInternal._batchMint(address[],uint256[]) + CCTCMTATBaseERC20CrossChain._mintOverride(address,uint256) + CCTCMTATBasePolicyEngine._checkTransferred(address,address,address,uint256) + +contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120 + + + - [ ] ID-14 +[ValidationModulePolicyEngine._transferred(address,address,address,uint256)](contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120) has external calls inside a loop: [policyEngine_.run(IPolicyEngine.Payload({selector:msg.sig,sender:_msgSender(),data:msg.data,context:context}))](contracts/modules/lite/ValidationModulePolicyEngine.sol#L112-L114) + Calls stack containing the loop: + ERC20MintModule.batchTransfer(address[],uint256[]) + ERC20MintModuleInternal._batchTransfer(address[],uint256[]) + CCTCMTATBaseERC20CrossChain._minterTransferOverride(address,address,uint256) + CCTCMTATBasePolicyEngine._checkTransferred(address,address,address,uint256) + +contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120 + + + - [ ] ID-15 +[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134) has external calls inside a loop: [code_scope_4 = $.rules[i_scope_3].detectTransferRestriction(from_scope_0,to_scope_1,amount_scope_2)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L125) + +contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134 + + + - [ ] ID-16 +[ValidationModulePolicyEngine._transferred(address,address,address,uint256)](contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120) has external calls inside a loop: [policyEngine_.run(IPolicyEngine.Payload({selector:msg.sig,sender:_msgSender(),data:msg.data,context:context}))](contracts/modules/lite/ValidationModulePolicyEngine.sol#L112-L114) + Calls stack containing the loop: + ERC20BurnModule.batchBurn(address[],uint256[],bytes) + ERC20BurnModuleInternal._batchBurn(address[],uint256[]) + CCTCMTATBaseERC20CrossChain._burnOverride(address,uint256) + CCTCMTATBasePolicyEngine._checkTransferred(address,address,address,uint256) + +contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120 + + +## reentrancy-events +Impact: Low +Confidence: Medium + - [ ] ID-17 +Reentrancy in [PolicyProtectedUpgradeable._attachPolicyEngine(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99): + External calls: + - [_policyProtectedStorage().policyEngine.detach()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L90-L94) + Event emitted after the call(s): + - [PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine),reason)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L93) + +contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99 + + + - [ ] ID-18 +Reentrancy in [PolicyProtectedUpgradeable._attachPolicyEngine(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99): + External calls: + - [_policyProtectedStorage().policyEngine.detach()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L90-L94) + - [IPolicyEngine(policyEngine).attach()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L97) + Event emitted after the call(s): + - [PolicyEngineAttached(policyEngine)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L98) + +contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99 + + +## assembly +Impact: Informational +Confidence: High + - [ ] ID-19 +[PolicyProtectedUpgradeable._policyProtectedStorage()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35) uses assembly + - [INLINE ASM](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L32-L34) + +contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35 + + + - [ ] ID-20 +[TransferValidationPolicy._getStorage()](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L37-L41) uses assembly + - [INLINE ASM](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L38-L40) + +contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L37-L41 + + +## dead-code +Impact: Informational +Confidence: Medium + - [ ] ID-21 +[CCTCMTATBasePolicyEngine.__CMTAT_modules_init_unchained(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes)](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L127-L133) is never used and should be removed + +contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L127-L133 + + + - [ ] ID-22 +[PolicyProtectedUpgradeable.__PolicyProtected_init(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L37-L40) is never used and should be removed + +contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L37-L40 + + +## naming-convention +Impact: Informational +Confidence: High + - [ ] ID-23 +Parameter [CCTCMTATBaseERC20CrossChain.supportsInterface(bytes4)._interfaceId](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L104) is not in mixedCase + +contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L104 + + + - [ ] ID-24 +Parameter [CCTCommon.__CMTAT_init(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643).ExtraInformationAttributes_](contracts/modules/standard/CCTCommon.sol#L91) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L91 + + + - [ ] ID-25 +Parameter [CCTCommon.__CMTAT_commonModules_init_unchained(ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes).ERC20Attributes_](contracts/modules/standard/CCTCommon.sol#L138) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L138 + + + - [ ] ID-26 +Function [CCTCMTATBasePolicyEngine.__CMTAT_init(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643)](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L85-L112) is not in mixedCase + +contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L85-L112 + + + - [ ] ID-27 +Function [PolicyProtectedUpgradeable.__PolicyProtected_init(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L37-L40) is not in mixedCase + +contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L37-L40 + + + - [ ] ID-28 +Parameter [CCTCommon.supportsInterface(bytes4)._interfaceId](contracts/modules/standard/CCTCommon.sol#L202) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L202 + + + - [ ] ID-29 +Function [CCTCMTATBasePolicyEngine.__CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes)](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L117-L122) is not in mixedCase + +contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L117-L122 + + + - [ ] ID-30 +Function [CCTCommon.__CMTAT_commonModules_init_unchained(ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes)](contracts/modules/standard/CCTCommon.sol#L137-L153) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L137-L153 + + + - [ ] ID-31 +Function [CCTCMTATBasePolicyEngine.__CMTAT_modules_init_unchained(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes)](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L127-L133) is not in mixedCase + +contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L127-L133 + + + - [ ] ID-32 +Parameter [CCTCMTATBasePolicyEngine.__CMTAT_modules_init_unchained(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes).ERC20Attributes_](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L129) is not in mixedCase + +contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L129 + + + - [ ] ID-33 +Parameter [CCTCMTATBasePolicyEngine.initialize(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643).ERC20Attributes_](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L45) is not in mixedCase + +contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L45 + + + - [ ] ID-34 +Parameter [CCTCommon.__CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes).ERC20Attributes_](contracts/modules/standard/CCTCommon.sol#L121) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L121 + + + - [ ] ID-35 +Parameter [CCTCommon.__CMTAT_commonModules_init_unchained(ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes).ExtraInformationModuleAttributes_](contracts/modules/standard/CCTCommon.sol#L139) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L139 + + + - [ ] ID-36 +Function [CCTCommon.__CMTAT_init(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643)](contracts/modules/standard/CCTCommon.sol#L88-L115) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L88-L115 + + + - [ ] ID-37 +Parameter [CCTCommon.__CMTAT_modules_init_unchained(ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes).ERC20Attributes_](contracts/modules/standard/CCTCommon.sol#L131) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L131 + + + - [ ] ID-38 +Constant [PolicyProtectedUpgradeable.policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28) is not in UPPER_CASE_WITH_UNDERSCORES + +contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28 + + + - [ ] ID-39 +Function [CCTCommon.__CMTAT_modules_init_unchained(ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes)](contracts/modules/standard/CCTCommon.sol#L130-L135) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L130-L135 + + + - [ ] ID-40 +Function [CCTCommon.__CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes)](contracts/modules/standard/CCTCommon.sol#L120-L125) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L120-L125 + + + - [ ] ID-41 +Parameter [CCTCMTATBasePolicyEngine.__CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes).ERC20Attributes_](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L118) is not in mixedCase + +contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L118 + + + - [ ] ID-42 +Parameter [CCTCommon.initialize(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643).ERC20Attributes_](contracts/modules/standard/CCTCommon.sol#L51) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L51 + + + - [ ] ID-43 +Function [PolicyProtectedUpgradeable.__PolicyProtected_init_unchained(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L42-L44) is not in mixedCase + +contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L42-L44 + + + - [ ] ID-44 +Parameter [CCTCommon.__CMTAT_init(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643).ERC20Attributes_](contracts/modules/standard/CCTCommon.sol#L90) is not in mixedCase + +contracts/modules/standard/CCTCommon.sol#L90 + + + - [ ] ID-45 +Parameter [CCTCMTATBasePolicyEngine.__CMTAT_init(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643).ERC20Attributes_](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L87) is not in mixedCase + +contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L87 + + From 6f4a00aec2915d2e74f52ed736fc45c31ff39798 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Mon, 11 May 2026 15:52:44 +0200 Subject: [PATCH 45/57] Update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d5145e0..f644eb8 100644 --- a/README.md +++ b/README.md @@ -436,7 +436,7 @@ deactivate | Version | Report | Assessment | | --- | --- | --- | -| current | `doc/audits/tools/slither-report.md` | `doc/audits/tools/slither-report-feedback.md` | +| current | [slither-report.md](./doc/audits/tools/slither-report.md) | [slither-report-feedback.md](./doc/audits/tools/slither-report-feedback.md) | Report scope: repo-focused filtered checklist run. @@ -462,7 +462,7 @@ aderyn -x mocks --output doc/audits/tools/aderyn-report.md | Version | Report | Assessment | | --- | --- | --- | -| current | `doc/audits/tools/aderyn-report.md` | `doc/audits/tools/aderyn-report-feedback.md` | +| current | [aderyn-report.md](./doc/audits/tools/aderyn-report.md) | [aderyn-report-feedback.md](./doc/audits/tools/aderyn-report-feedback.md) | Report scope: 17 Solidity files, 959 nSLOC. From e96ce4ca6f30614f08b14591ddf441f3c593798d Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Tue, 12 May 2026 10:54:51 +0200 Subject: [PATCH 46/57] Align deployment test suites across standard/lite variants and expand shared CMTAT snapshot module coverage --- .gitignore | 1 + doc/script/convert_links_for_pdf.sh | 47 + doc/script/script_surya_graph.sh | 18 + doc/script/script_surya_inheritance.sh | 17 + doc/script/script_surya_report.sh | 17 + package-lock.json | 3327 ++++++++++------- package.json | 3 +- test/common/cmtat/CMTATModuleCommon.js | 7 +- test/common/cmtat/SnapshotModuleCommon.js | 10 +- .../liteStandaloneDeployment.test.js | 70 +- .../liteUUPSUpgradeableDeployment.test.js | 186 +- .../liteUpgradeableDeployment.test.js | 111 +- test/deployment/standaloneDeployment.test.js | 35 +- test/deployment/upgradeableDeployment.test.js | 74 +- .../uupsUpgradeableDeployment.test.js | 145 +- test/deploymentUtils.js | 37 + 16 files changed, 2400 insertions(+), 1705 deletions(-) create mode 100755 doc/script/convert_links_for_pdf.sh create mode 100755 doc/script/script_surya_graph.sh create mode 100755 doc/script/script_surya_inheritance.sh create mode 100755 doc/script/script_surya_report.sh diff --git a/.gitignore b/.gitignore index f332f58..f4b7137 100644 --- a/.gitignore +++ b/.gitignore @@ -168,3 +168,4 @@ ignition/deployments/chain-31337 # custom local directory history +.codex diff --git a/doc/script/convert_links_for_pdf.sh b/doc/script/convert_links_for_pdf.sh new file mode 100755 index 0000000..2f4d392 --- /dev/null +++ b/doc/script/convert_links_for_pdf.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +# Script to replace relative markdown links with GitHub links for PDF generation +# Preserves image links (they render in PDF) and external links + +set -e + +if [ -z "$1" ]; then + echo "Usage: $0 [input-file] [output-file]" + echo "" + echo "Example:" + echo " $0 https://github.com/CMTA/CMTAT/blob/v3.0.0" + echo " $0 https://github.com/CMTA/CMTAT/blob/v3.0.0 README.md README_UPDATE.md" + exit 1 +fi + +GITHUB_LINK="${1%/}" # Remove trailing slash if present +INPUT_FILE="${2:-../../README.md}" +OUTPUT_FILE="${3:-README_UPDATE.md}" + +if [ ! -f "$INPUT_FILE" ]; then + echo "Error: Input file '$INPUT_FILE' not found" + exit 1 +fi + +# Create a temporary file +TMP_FILE=$(mktemp) +cp "$INPUT_FILE" "$TMP_FILE" + +# Use a placeholder to avoid sed escaping issues +PLACEHOLDER="__GITHUB_LINK__" + +# Step 1: Convert ALL relative links [text](./...) to placeholder +sed -i -E "s|\[([^]]+)\]\(\./([^)]+)\)|[\1]($PLACEHOLDER/\2)|g" "$TMP_FILE" + +# Step 2: Restore image links back to relative (images render inline in PDF) +for ext in png jpg jpeg gif svg ico webp bmp tiff; do + sed -i -E "s|\[([^]]+)\]\($PLACEHOLDER/([^)]+\.$ext)\)|[\1](./\2)|gi" "$TMP_FILE" +done + +# Step 3: Replace placeholder with actual GitHub link +sed -i "s|$PLACEHOLDER|$GITHUB_LINK|g" "$TMP_FILE" + +mv "$TMP_FILE" "$OUTPUT_FILE" + +echo "Created '$OUTPUT_FILE' with GitHub links pointing to:" +echo " $GITHUB_LINK" diff --git a/doc/script/script_surya_graph.sh b/doc/script/script_surya_graph.sh new file mode 100755 index 0000000..31a1cef --- /dev/null +++ b/doc/script/script_surya_graph.sh @@ -0,0 +1,18 @@ +#/bin/bash +cd '../../' +DIR=$(pwd) +DIR_OUT=${DIR}/docOut/surya_graph +if ! [ -d "$DIR_OUT" ]; then + mkdir -p ./docOut/surya_graph +fi +cd './src' +DIR=$(pwd) +for i in $(find $DIR -type f); +do + #echo $i + filename=${i##*/} + ext=${i##*.} + if [[ $ext == 'sol' ]]; then + npx surya graph $i | dot -Tpng > ../docOut/surya_graph/surya_graph_$filename.png; + fi +done; \ No newline at end of file diff --git a/doc/script/script_surya_inheritance.sh b/doc/script/script_surya_inheritance.sh new file mode 100755 index 0000000..e4b8ca7 --- /dev/null +++ b/doc/script/script_surya_inheritance.sh @@ -0,0 +1,17 @@ +#/bin/bash +cd '../../' +DIR=$(pwd) +DIR_OUT=${DIR}/docOut/inheritance +if ! [ -d "$DIR_OUT" ]; then + mkdir -p ./docOut/surya_inheritance +fi +cd './src' +DIR=$(pwd) +for i in $(find $dir -type f); +do + filename=${i##*/} + ext=${i##*.} + if [[ $ext == 'sol' ]]; then + npx surya inheritance $i | dot -Tpng > ../docOut/surya_inheritance/surya_inheritance_$filename.png; + fi +done; \ No newline at end of file diff --git a/doc/script/script_surya_report.sh b/doc/script/script_surya_report.sh new file mode 100755 index 0000000..84769c9 --- /dev/null +++ b/doc/script/script_surya_report.sh @@ -0,0 +1,17 @@ +#/bin/bash +cd '../../' +DIR=$(pwd) +DIR_OUT=${DIR}/docOut/surya_report +if ! [ -d "$DIR_OUT" ]; then + mkdir ./docOut/surya_report +fi +cd './src' +DIR=$(pwd) +for i in $(find $dir -type f); +do + filename=${i##*/} + ext=${i##*.} + if [[ $ext == 'sol' ]]; then + npx surya mdreport ../docOut/surya_report/surya_report_$filename.md $i; + fi +done; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index eb6f7dd..e148a4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,8 @@ "hardhat": "^2.28.0", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.9", - "prettier-plugin-solidity": "^2.3.1" + "prettier-plugin-solidity": "^2.3.1", + "surya": "^0.4.13" } }, "node_modules/@adraffy/ens-normalize": { @@ -89,6 +90,7 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -103,6 +105,7 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -118,6 +121,7 @@ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -130,6 +134,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -143,6 +148,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -156,6 +162,7 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -170,6 +177,7 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" } @@ -179,6 +187,7 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -190,6 +199,7 @@ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -202,6 +212,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -215,6 +226,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -224,504 +236,538 @@ } }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.955.0.tgz", - "integrity": "sha512-pqA6Eo+JAJMze9/mr8BOSE6pognA6RyOc6htVrTCricZm8x6ak+babyOsg3ZULqqpBjLWNCHa3wNybCGQkMesQ==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.954.0", - "@aws-sdk/credential-provider-node": "3.955.0", - "@aws-sdk/middleware-host-header": "3.953.0", - "@aws-sdk/middleware-logger": "3.953.0", - "@aws-sdk/middleware-recursion-detection": "3.953.0", - "@aws-sdk/middleware-user-agent": "3.954.0", - "@aws-sdk/region-config-resolver": "3.953.0", - "@aws-sdk/types": "3.953.0", - "@aws-sdk/util-endpoints": "3.953.0", - "@aws-sdk/util-user-agent-browser": "3.953.0", - "@aws-sdk/util-user-agent-node": "3.954.0", - "@smithy/config-resolver": "^4.4.4", - "@smithy/core": "^3.19.0", - "@smithy/eventstream-serde-browser": "^4.2.6", - "@smithy/eventstream-serde-config-resolver": "^4.3.6", - "@smithy/eventstream-serde-node": "^4.2.6", - "@smithy/fetch-http-handler": "^5.3.7", - "@smithy/hash-node": "^4.2.6", - "@smithy/invalid-dependency": "^4.2.6", - "@smithy/middleware-content-length": "^4.2.6", - "@smithy/middleware-endpoint": "^4.4.0", - "@smithy/middleware-retry": "^4.4.16", - "@smithy/middleware-serde": "^4.2.7", - "@smithy/middleware-stack": "^4.2.6", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/node-http-handler": "^4.4.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", - "@smithy/url-parser": "^4.2.6", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.15", - "@smithy/util-defaults-mode-node": "^4.2.18", - "@smithy/util-endpoints": "^3.2.6", - "@smithy/util-middleware": "^4.2.6", - "@smithy/util-retry": "^4.2.6", - "@smithy/util-stream": "^4.5.7", - "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.6", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.955.0.tgz", - "integrity": "sha512-+nym5boDFt2ksba0fElocMKxCFJbJcd31PI3502hoI1N5VK7HyxkQeBtQJ64JYomvw8eARjWWC13hkB0LtZILw==", + "version": "3.1045.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.1045.0.tgz", + "integrity": "sha512-9EDPinh03XanJQssTBdTY+9E7PkyQ0NLLJiaOAM71/g4DI+0OZboGqhX7KKizwUGqKkj0paKEAwgWaMLgEkQFQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.954.0", - "@aws-sdk/middleware-host-header": "3.953.0", - "@aws-sdk/middleware-logger": "3.953.0", - "@aws-sdk/middleware-recursion-detection": "3.953.0", - "@aws-sdk/middleware-user-agent": "3.954.0", - "@aws-sdk/region-config-resolver": "3.953.0", - "@aws-sdk/types": "3.953.0", - "@aws-sdk/util-endpoints": "3.953.0", - "@aws-sdk/util-user-agent-browser": "3.953.0", - "@aws-sdk/util-user-agent-node": "3.954.0", - "@smithy/config-resolver": "^4.4.4", - "@smithy/core": "^3.19.0", - "@smithy/fetch-http-handler": "^5.3.7", - "@smithy/hash-node": "^4.2.6", - "@smithy/invalid-dependency": "^4.2.6", - "@smithy/middleware-content-length": "^4.2.6", - "@smithy/middleware-endpoint": "^4.4.0", - "@smithy/middleware-retry": "^4.4.16", - "@smithy/middleware-serde": "^4.2.7", - "@smithy/middleware-stack": "^4.2.6", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/node-http-handler": "^4.4.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", - "@smithy/url-parser": "^4.2.6", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.15", - "@smithy/util-defaults-mode-node": "^4.2.18", - "@smithy/util-endpoints": "^3.2.6", - "@smithy/util-middleware": "^4.2.6", - "@smithy/util-retry": "^4.2.6", - "@smithy/util-utf8": "^4.2.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/credential-provider-node": "^3.972.39", + "@aws-sdk/middleware-host-header": "^3.972.10", + "@aws-sdk/middleware-logger": "^3.972.10", + "@aws-sdk/middleware-recursion-detection": "^3.972.11", + "@aws-sdk/middleware-user-agent": "^3.972.38", + "@aws-sdk/region-config-resolver": "^3.972.13", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-endpoints": "^3.996.8", + "@aws-sdk/util-user-agent-browser": "^3.972.10", + "@aws-sdk/util-user-agent-node": "^3.973.24", + "@smithy/config-resolver": "^4.4.17", + "@smithy/core": "^3.23.17", + "@smithy/eventstream-serde-browser": "^4.2.14", + "@smithy/eventstream-serde-config-resolver": "^4.3.14", + "@smithy/eventstream-serde-node": "^4.2.14", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/hash-node": "^4.2.14", + "@smithy/invalid-dependency": "^4.2.14", + "@smithy/middleware-content-length": "^4.2.14", + "@smithy/middleware-endpoint": "^4.4.32", + "@smithy/middleware-retry": "^4.5.7", + "@smithy/middleware-serde": "^4.2.20", + "@smithy/middleware-stack": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/protocol-http": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-body-length-node": "^4.2.3", + "@smithy/util-defaults-mode-browser": "^4.3.49", + "@smithy/util-defaults-mode-node": "^4.2.54", + "@smithy/util-endpoints": "^3.4.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/util-stream": "^4.5.25", + "@smithy/util-utf8": "^4.2.2", + "@smithy/util-waiter": "^4.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/core": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.954.0.tgz", - "integrity": "sha512-5oYO5RP+mvCNXNj8XnF9jZo0EP0LTseYOJVNQYcii1D9DJqzHL3HJWurYh7cXxz7G7eDyvVYA01O9Xpt34TdoA==", + "version": "3.974.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.8.tgz", + "integrity": "sha512-njR2qoG6ZuB0kvAS2FyICsFZJ6gmCcf2X/7JcD14sUvGDm26wiZ5BrA6LOiUxKFEF+IVe7kdroxyE00YlkiYsw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.953.0", - "@aws-sdk/xml-builder": "3.953.0", - "@smithy/core": "^3.19.0", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/property-provider": "^4.2.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/signature-v4": "^5.3.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.6", - "@smithy/util-utf8": "^4.2.0", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/xml-builder": "^3.972.22", + "@smithy/core": "^3.23.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/signature-v4": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.954.0.tgz", - "integrity": "sha512-2HNkqBjfsvyoRuPAiFh86JBFMFyaCNhL4VyH6XqwTGKZffjG7hdBmzXPy7AT7G3oFh1k/1Zc27v0qxaKoK7mBA==", + "version": "3.972.34", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.34.tgz", + "integrity": "sha512-XT0jtf8Fw9JE6ppsQeoNnZRiG+jqRixMT1v1ZR17G60UvVdsQmTG8nbEyHuEPfMxDXEhfdARaM/XiEhca4lGHQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.954.0.tgz", - "integrity": "sha512-CrWD5300+NE1OYRnSVDxoG7G0b5cLIZb7yp+rNQ5Jq/kqnTmyJXpVAsivq+bQIDaGzPXhadzpAMIoo7K/aHaag==", + "version": "3.972.36", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.36.tgz", + "integrity": "sha512-DPoGWfy7J7RKxvbf5kOKIGQkD2ek3dbKgzKIGrnLuvZBz5myU+Im/H6pmc14QcnFbqHMqxvtWSgRDSJW3qXLQg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/types": "3.953.0", - "@smithy/fetch-http-handler": "^5.3.7", - "@smithy/node-http-handler": "^4.4.6", - "@smithy/property-provider": "^4.2.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", - "@smithy/util-stream": "^4.5.7", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/property-provider": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-stream": "^4.5.25", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.955.0.tgz", - "integrity": "sha512-90isLovxsPzaaSx3IIUZuxym6VXrsRetnQ3AuHr2kiTFk2pIzyIwmi+gDcUaLXQ5nNBoSj1Z/4+i1vhxa1n2DQ==", + "version": "3.972.38", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.38.tgz", + "integrity": "sha512-oDzUBu2MGJFgoar05sPMCwSrhw44ASyccrHzj66vO69OZqi7I6hZZxXfuPLC8OCzW7C+sU+bI73XHij41yekgQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/credential-provider-env": "3.954.0", - "@aws-sdk/credential-provider-http": "3.954.0", - "@aws-sdk/credential-provider-login": "3.955.0", - "@aws-sdk/credential-provider-process": "3.954.0", - "@aws-sdk/credential-provider-sso": "3.955.0", - "@aws-sdk/credential-provider-web-identity": "3.955.0", - "@aws-sdk/nested-clients": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/credential-provider-imds": "^4.2.6", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/credential-provider-env": "^3.972.34", + "@aws-sdk/credential-provider-http": "^3.972.36", + "@aws-sdk/credential-provider-login": "^3.972.38", + "@aws-sdk/credential-provider-process": "^3.972.34", + "@aws-sdk/credential-provider-sso": "^3.972.38", + "@aws-sdk/credential-provider-web-identity": "^3.972.38", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/credential-provider-imds": "^4.2.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.955.0.tgz", - "integrity": "sha512-xlkmSvg8oDN5LIxLAq3N1QWK8F8gUAsBWZlp1IX8Lr5XhcKI3GVarIIUcZrvCy1NjzCd/LDXYdNL6MRlNP4bAw==", + "version": "3.972.38", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.38.tgz", + "integrity": "sha512-g1NosS8qe4OF++G2UFCM5ovSkgipC7YYor5KCWatG0UoMSO5YFj9C8muePlyVmOBV/WTI16Jo3/s1NUo/o1Bww==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/nested-clients": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.955.0.tgz", - "integrity": "sha512-XIL4QB+dPOJA6DRTmYZL52wFcLTslb7V1ydS4FCNT2DVLhkO4ExkPP+pe5YmIpzt/Our1ugS+XxAs3e6BtyFjA==", + "version": "3.972.39", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.39.tgz", + "integrity": "sha512-HEswDQyxUtadoZ/bJsPPENHg7R0Lzym5LuMksJeHvqhCOpP+rtkDLKI4/ZChH4w3cf5kG8n6bZuI8PzajoiqMg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.954.0", - "@aws-sdk/credential-provider-http": "3.954.0", - "@aws-sdk/credential-provider-ini": "3.955.0", - "@aws-sdk/credential-provider-process": "3.954.0", - "@aws-sdk/credential-provider-sso": "3.955.0", - "@aws-sdk/credential-provider-web-identity": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/credential-provider-imds": "^4.2.6", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "@aws-sdk/credential-provider-env": "^3.972.34", + "@aws-sdk/credential-provider-http": "^3.972.36", + "@aws-sdk/credential-provider-ini": "^3.972.38", + "@aws-sdk/credential-provider-process": "^3.972.34", + "@aws-sdk/credential-provider-sso": "^3.972.38", + "@aws-sdk/credential-provider-web-identity": "^3.972.38", + "@aws-sdk/types": "^3.973.8", + "@smithy/credential-provider-imds": "^4.2.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.954.0.tgz", - "integrity": "sha512-Y1/0O2LgbKM8iIgcVj/GNEQW6p90LVTCOzF2CI1pouoKqxmZ/1F7F66WHoa6XUOfKaCRj/R6nuMR3om9ThaM5A==", + "version": "3.972.34", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.34.tgz", + "integrity": "sha512-T3IFs4EVmVi1dVN5RciFnklCANSzvrQd/VuHY9ThHSQmYkTogjcGkoJEr+oNUPQZnso52183088NqysMPji1/Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.955.0.tgz", - "integrity": "sha512-Y99KI73Fn8JnB4RY5Ls6j7rd5jmFFwnY9WLHIWeJdc+vfwL6Bb1uWKW3+m/B9+RC4Xoz2nQgtefBcdWq5Xx8iw==", + "version": "3.972.38", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.38.tgz", + "integrity": "sha512-5ZxG+t0+3Q3QPh8KEjX6syskhgNf7I0MN7oGioTf6Lm1NTjfP7sIcYGNsthXC2qR8vcD3edNZwCr2ovfSSWuRA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.955.0", - "@aws-sdk/core": "3.954.0", - "@aws-sdk/token-providers": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/token-providers": "3.1041.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.955.0.tgz", - "integrity": "sha512-+lFxkZ2Vz3qp/T68ZONKzWVTQvomTu7E6tts1dfAbEcDt62Y/nPCByq/C2hQj+TiN05HrUx+yTJaGHBklhkbqA==", + "version": "3.972.38", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.38.tgz", + "integrity": "sha512-lYHFF30DGI20jZcYX8cm6Ns0V7f1dDN6g/MBDLTyD/5iw+bXs3yBr2iAiHDkx4RFU5JgsnZvCHYKiRVPRdmOgw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/nested-clients": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.953.0.tgz", - "integrity": "sha512-jTGhfkONav+r4E6HLOrl5SzBqDmPByUYCkyB/c/3TVb8jX3wAZx8/q9bphKpCh+G5ARi3IdbSisgkZrJYqQ19Q==", + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.10.tgz", + "integrity": "sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.953.0", - "@smithy/protocol-http": "^5.3.6", - "@smithy/types": "^4.10.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.953.0.tgz", - "integrity": "sha512-PlWdVYgcuptkIC0ZKqVUhWNtSHXJSx7U9V8J7dJjRmsXC40X7zpEycvrkzDMJjeTDGcCceYbyYAg/4X1lkcIMw==", + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.10.tgz", + "integrity": "sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.953.0", - "@smithy/types": "^4.10.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.953.0.tgz", - "integrity": "sha512-cmIJx0gWeesUKK4YwgE+VQL3mpACr3/J24fbwnc1Z5tntC86b+HQFzU5vsBDw6lLwyD46dBgWdsXFh1jL+ZaFw==", + "version": "3.972.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.11.tgz", + "integrity": "sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.953.0", + "@aws-sdk/types": "^3.973.8", "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.6", - "@smithy/types": "^4.10.0", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.972.37", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.37.tgz", + "integrity": "sha512-Km7M+i8DrLArVzrid1gfxeGhYHBd3uxvE77g0s5a52zPSVosxzQBnJ0gwWb6NIp/DOk8gsBMhi7V+cpJG0ndTA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-arn-parser": "^3.972.3", + "@smithy/core": "^3.23.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/signature-v4": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-config-provider": "^4.2.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-stream": "^4.5.25", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.954.0.tgz", - "integrity": "sha512-5PX8JDe3dB2+MqXeGIhmgFnm2rbVsSxhz+Xyuu1oxLtbOn+a9UDA+sNBufEBjt3UxWy5qwEEY1fxdbXXayjlGg==", + "version": "3.972.38", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.38.tgz", + "integrity": "sha512-iz+B29TXcAZsJpwB+AwG/TTGA5l/VnmMZ2UxtiySOZjI6gCdmviXPwdgzcmuazMy16rXoPY4mYCGe7zdNKfx5A==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/types": "3.953.0", - "@aws-sdk/util-endpoints": "3.953.0", - "@smithy/core": "^3.19.0", - "@smithy/protocol-http": "^5.3.6", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-endpoints": "^3.996.8", + "@smithy/core": "^3.23.17", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-retry": "^4.3.6", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.955.0.tgz", - "integrity": "sha512-RBi6CQHbPF09kqXAoiEOOPkVnSoU5YppKoOt/cgsWfoMHwC+7itIrEv+yRD62h14jIjF3KngVIQIrBRbX3o3/Q==", + "version": "3.997.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.6.tgz", + "integrity": "sha512-WBDnqatJl+kGObpfmfSxqnXeYTu3Me8wx8WCtvoxX3pfWrrTv8I4WTMSSs7PZqcRcVh8WeUKMgGFjMG+52SR1w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.954.0", - "@aws-sdk/middleware-host-header": "3.953.0", - "@aws-sdk/middleware-logger": "3.953.0", - "@aws-sdk/middleware-recursion-detection": "3.953.0", - "@aws-sdk/middleware-user-agent": "3.954.0", - "@aws-sdk/region-config-resolver": "3.953.0", - "@aws-sdk/types": "3.953.0", - "@aws-sdk/util-endpoints": "3.953.0", - "@aws-sdk/util-user-agent-browser": "3.953.0", - "@aws-sdk/util-user-agent-node": "3.954.0", - "@smithy/config-resolver": "^4.4.4", - "@smithy/core": "^3.19.0", - "@smithy/fetch-http-handler": "^5.3.7", - "@smithy/hash-node": "^4.2.6", - "@smithy/invalid-dependency": "^4.2.6", - "@smithy/middleware-content-length": "^4.2.6", - "@smithy/middleware-endpoint": "^4.4.0", - "@smithy/middleware-retry": "^4.4.16", - "@smithy/middleware-serde": "^4.2.7", - "@smithy/middleware-stack": "^4.2.6", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/node-http-handler": "^4.4.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", - "@smithy/url-parser": "^4.2.6", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.15", - "@smithy/util-defaults-mode-node": "^4.2.18", - "@smithy/util-endpoints": "^3.2.6", - "@smithy/util-middleware": "^4.2.6", - "@smithy/util-retry": "^4.2.6", - "@smithy/util-utf8": "^4.2.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/middleware-host-header": "^3.972.10", + "@aws-sdk/middleware-logger": "^3.972.10", + "@aws-sdk/middleware-recursion-detection": "^3.972.11", + "@aws-sdk/middleware-user-agent": "^3.972.38", + "@aws-sdk/region-config-resolver": "^3.972.13", + "@aws-sdk/signature-v4-multi-region": "^3.996.25", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-endpoints": "^3.996.8", + "@aws-sdk/util-user-agent-browser": "^3.972.10", + "@aws-sdk/util-user-agent-node": "^3.973.24", + "@smithy/config-resolver": "^4.4.17", + "@smithy/core": "^3.23.17", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/hash-node": "^4.2.14", + "@smithy/invalid-dependency": "^4.2.14", + "@smithy/middleware-content-length": "^4.2.14", + "@smithy/middleware-endpoint": "^4.4.32", + "@smithy/middleware-retry": "^4.5.7", + "@smithy/middleware-serde": "^4.2.20", + "@smithy/middleware-stack": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/protocol-http": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-body-length-node": "^4.2.3", + "@smithy/util-defaults-mode-browser": "^4.3.49", + "@smithy/util-defaults-mode-node": "^4.2.54", + "@smithy/util-endpoints": "^3.4.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.953.0.tgz", - "integrity": "sha512-5MJgnsc+HLO+le0EK1cy92yrC7kyhGZSpaq8PcQvKs9qtXCXT5Tb6tMdkr5Y07JxYsYOV1omWBynvL6PWh08tQ==", + "version": "3.972.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.13.tgz", + "integrity": "sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.953.0", - "@smithy/config-resolver": "^4.4.4", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/types": "^4.10.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/config-resolver": "^4.4.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.996.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.25.tgz", + "integrity": "sha512-+CMIt3e1VzlklAECmG+DtP1sV8iKq25FuA0OKpnJ4KA0kxUtd7CgClY7/RU6VzJBQwbN4EJ9Ue6plvqx1qGadw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "^3.972.37", + "@aws-sdk/types": "^3.973.8", + "@smithy/protocol-http": "^5.3.14", + "@smithy/signature-v4": "^5.3.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.955.0.tgz", - "integrity": "sha512-LVpWkxXvMPgZofP2Gc8XBfQhsyecBMVARDHWMvks6vPbCLSTM7dw6H1HI9qbGNCurYcyc2xBRAkEDhChQlbPPg==", + "version": "3.1041.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1041.0.tgz", + "integrity": "sha512-Th7kPI6YPtvJUcdznooXJMy+9rQWjmEF81LxaJssngBzuysK4a/x+l8kjm1zb7nYsUPbndnBdUnwng/3PLvtGw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/nested-clients": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.953.0.tgz", - "integrity": "sha512-M9Iwg9kTyqTErI0vOTVVpcnTHWzS3VplQppy8MuL02EE+mJ0BIwpWfsaAPQW+/XnVpdNpWZTsHcNE29f1+hR8g==", + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.8.tgz", + "integrity": "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.3.tgz", + "integrity": "sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.953.0.tgz", - "integrity": "sha512-rjaS6jrFksopXvNg6YeN+D1lYwhcByORNlFuYesFvaQNtPOufbE5tJL4GJ3TMXyaY0uFR28N5BHHITPyWWfH/g==", + "version": "3.996.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.8.tgz", + "integrity": "sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.953.0", - "@smithy/types": "^4.10.0", - "@smithy/url-parser": "^4.2.6", - "@smithy/util-endpoints": "^3.2.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-endpoints": "^3.4.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.953.0.tgz", - "integrity": "sha512-mPxK+I1LcrgC/RSa3G5AMAn8eN2Ay0VOgw8lSRmV1jCtO+iYvNeCqOdxoJUjOW6I5BA4niIRWqVORuRP07776Q==", + "version": "3.965.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz", + "integrity": "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.953.0.tgz", - "integrity": "sha512-UF5NeqYesWuFao+u7LJvpV1SJCaLml5BtFZKUdTnNNMeN6jvV+dW/eQoFGpXF94RCqguX0XESmRuRRPQp+/rzQ==", + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.10.tgz", + "integrity": "sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.953.0", - "@smithy/types": "^4.10.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/types": "^4.14.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.954.0.tgz", - "integrity": "sha512-fB5S5VOu7OFkeNzcblQlez4AjO5hgDFaa7phYt7716YWisY3RjAaQPlxgv+G3GltHHDJIfzEC5aRxdf62B9zMg==", + "version": "3.973.24", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.24.tgz", + "integrity": "sha512-ZWwlkjcIp7cEL8ZfTpTAPNkwx25p7xol0xlKoWVVf22+nsjwmLcHYtTPjIV1cSpmB/b6DaK4cb1fSkvCXHgRdw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.954.0", - "@aws-sdk/types": "3.953.0", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/types": "^4.10.0", + "@aws-sdk/middleware-user-agent": "^3.972.38", + "@aws-sdk/types": "^3.973.8", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -742,24 +788,27 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.953.0.tgz", - "integrity": "sha512-Zmrj21jQ2OeOJGr9spPiN00aQvXa/WUqRXcTVENhrMt+OFoSOfDFpYhUj9NQ09QmQ8KMWFoWuWW6iKurNqLvAA==", + "version": "3.972.22", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.22.tgz", + "integrity": "sha512-PMYKKtJd70IsSG0yHrdAbxBr+ZWBKLvzFZfD3/urxgf6hXVMzuU5M+3MJ5G67RpOmLBu1fAUN65SbWuKUCOlAA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.10.0", - "fast-xml-parser": "5.2.5", + "@nodable/entities": "2.1.0", + "@smithy/types": "^4.14.1", + "fast-xml-parser": "5.7.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@aws/lambda-invoke-store": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", - "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz", + "integrity": "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=18.0.0" } @@ -2241,6 +2290,19 @@ } ] }, + "node_modules/@nodable/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/nodable" + } + ], + "license": "MIT" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2277,91 +2339,100 @@ } }, "node_modules/@nomicfoundation/edr": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.17.tgz", - "integrity": "sha512-Y8Kwqd5JpBmI/Kst6NJ/bZ81FeJea9J6WEwoSRTZnEvwfqW9dk9PI8zJs2UJpOACL1fXEPvN+doETbxT9EhwXA==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.23.tgz", + "integrity": "sha512-F2/6HZh8Q9RsgkOIkRrckldbhPjIZY7d4mT9LYuW68miwGQ5l7CkAgcz9fRRiurA0+YJhtsbx/EyrD9DmX9BOw==", "dev": true, + "license": "MIT", "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.17", - "@nomicfoundation/edr-darwin-x64": "0.12.0-next.17", - "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.17", - "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.17", - "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.17", - "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.17", - "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.17" + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.23", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.23" }, "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.17.tgz", - "integrity": "sha512-gI9/9ysLeAid0+VSTBeutxOJ0/Rrh00niGkGL9+4lR577igDY+v55XGN0oBMST49ILS0f12J6ZY90LG8sxPXmQ==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.23.tgz", + "integrity": "sha512-Amh7mRoDzZyJJ4efqoePqdoZOzharmSOttZuJDlVE5yy07BoE8hL6ZRpa5fNYn0LCqn/KoWs8OHANWxhKDGhvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.17.tgz", - "integrity": "sha512-zSZtwf584RkIyb8awELDt7ctskogH0p4pmqOC4vhykc8ODOv2XLuG1IgeE4WgYhWGZOufbCtgLfpJQrWqN6mmw==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.23.tgz", + "integrity": "sha512-9wn489FIQm7m0UCD+HhktjWx6vskZzeZD9oDc2k9ZvbBzdXwPp5tiDqUBJ+eQpByAzCDfteAJwRn2lQCE0U+Iw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.17.tgz", - "integrity": "sha512-WjdfgV6B7gT5Q0NXtSIWyeK8gzaJX5HK6/jclYVHarWuEtS1LFgePYgMjK8rmm7IRTkM9RsE/PCuQEP1nrSsuA==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-nlk5EejSzEUfEngv0Jkhqq3/wINIfF2ED9wAofc22w/V1DV99ASh9l3/e/MIHOQFecIZ9MDqt0Em9/oDyB1Uew==", "dev": true, + "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.17.tgz", - "integrity": "sha512-26rObKhhCDb9JkZbToyr7JVZo4tSVAFvzoJSJVmvpOl0LOHrfFsgVQu2n/8cNkwMAqulPubKL2E0jdnmEoZjWA==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-SJuPBp3Rc6vM92UtVTUxZQ/QlLhLfwTftt2XUiYohmGKB3RjGzpgduEFMCA0LEnucUckU6UHrJNFHiDm77C4PQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.17.tgz", - "integrity": "sha512-dPkHScIf/CU6h6k3k4HNUnQyQcVSLKanviHCAcs5HkviiJPxvVtOMMvtNBxoIvKZRxGFxf2eutcqQW4ZV1wRQQ==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-NU+Qs3u7Qt6t3bJFdmmjd5CsvgI2bPPzO31KifM2Ez96/jsXYho5debtTQnimlb5NAqiHTSlxjh/F8ROcptmeQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.17.tgz", - "integrity": "sha512-5Ixe/bpyWZxC3AjIb8EomAOK44ajemBVx/lZRHZiWSBlwQpbSWriYAtKjKcReQQPwuYVjnFpAD2AtuCvseIjHw==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-F78fZA2h6/ssiCSZOovlgIu0dUeI7ItKPsDDF3UUlIibef052GCXmliMinC90jVPbrjUADMd1BUwjfI0Z8OllQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.17.tgz", - "integrity": "sha512-29YlvdgofSdXG1mUzIuH4kMXu1lmVc1hvYWUGWEH59L+LaakdhfJ/Wu5izeclKkrTh729Amtk/Hk1m29kFOO8A==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.23.tgz", + "integrity": "sha512-IfJZQJn7d/YyqhmguBIGoCKjE9dKjbu6V6iNEPApfwf5JyyjHYyyfkLU4rf7hygj57bfH4sl1jtQ6r8HnT62lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.0.tgz", - "integrity": "sha512-GPhBNafh1fCnVD9Y7BYvoLnblnvfcq3j8YDbO1gGe/1nOFWzGmV7gFu5DkwFXF+IpYsS+t96o9qc/mPu3V3Vfw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.2.tgz", + "integrity": "sha512-NlUlde/ycXw2bLzA2gWjjbxQaD9xIRbAF30nsoEprAWzH8dXEI1ILZUKZMyux9n9iygEXTzN0SDVjE6zWDZi9g==", "dev": true, + "license": "MIT", "dependencies": { "@types/chai-as-promised": "^7.1.3", "chai-as-promised": "^7.1.1", @@ -2869,30 +2940,18 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/@smithy/abort-controller": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.7.tgz", - "integrity": "sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==", - "dev": true, - "dependencies": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@smithy/config-resolver": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.5.tgz", - "integrity": "sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==", + "version": "4.4.17", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.17.tgz", + "integrity": "sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.7", - "@smithy/util-middleware": "^4.2.7", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-config-provider": "^4.2.2", + "@smithy/util-endpoints": "^3.4.2", + "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" }, "engines": { @@ -2900,20 +2959,21 @@ } }, "node_modules/@smithy/core": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.20.0.tgz", - "integrity": "sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==", + "version": "3.23.17", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.17.tgz", + "integrity": "sha512-x7BlLbUFL8NWCGjMF9C+1N5cVCxcPa7g6Tv9B4A2luWx3be3oU8hQ96wIwxe/s7OhIzvoJH73HAUSg5JXVlEtQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.2.8", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-stream": "^4.5.8", - "@smithy/util-utf8": "^4.2.0", - "@smithy/uuid": "^1.1.0", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-stream": "^4.5.25", + "@smithy/util-utf8": "^4.2.2", + "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" }, "engines": { @@ -2921,15 +2981,16 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.7.tgz", - "integrity": "sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.14.tgz", + "integrity": "sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", "tslib": "^2.6.2" }, "engines": { @@ -2937,14 +2998,15 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.7.tgz", - "integrity": "sha512-DrpkEoM3j9cBBWhufqBwnbbn+3nf1N9FP6xuVJ+e220jbactKuQgaZwjwP5CP1t+O94brm2JgVMD2atMGX3xIQ==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.14.tgz", + "integrity": "sha512-erZq0nOIpzfeZdCyzZjdJb4nVSKLUmSkaQUVkRGQTXs30gyUGeKnrYEg+Xe1W5gE3aReS7IgsvANwVPxSzY6Pw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.11.0", - "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/types": "^4.14.1", + "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" }, "engines": { @@ -2952,13 +3014,14 @@ } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.7.tgz", - "integrity": "sha512-ujzPk8seYoDBmABDE5YqlhQZAXLOrtxtJLrbhHMKjBoG5b4dK4i6/mEU+6/7yXIAkqOO8sJ6YxZl+h0QQ1IJ7g==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.14.tgz", + "integrity": "sha512-8IelTCtTctWRbb+0Dcy+C0aICh1qa0qWXqgjcXDmMuCvPJRnv26hiDZoAau2ILOniki65mCPKqOQs/BaWvO4CQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/eventstream-serde-universal": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -2966,12 +3029,13 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.7.tgz", - "integrity": "sha512-x7BtAiIPSaNaWuzm24Q/mtSkv+BrISO/fmheiJ39PKRNH3RmH2Hph/bUKSOBOBC9unqfIYDhKTHwpyZycLGPVQ==", + "version": "4.3.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.14.tgz", + "integrity": "sha512-sqHiHpYRYo3FJlaIxD1J8PhbcmJAm7IuM16mVnwSkCToD7g00IBZzKuiLNMGmftULmEUX6/UAz8/NN5uMP8bVA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -2979,13 +3043,14 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.7.tgz", - "integrity": "sha512-roySCtHC5+pQq5lK4be1fZ/WR6s/AxnPaLfCODIPArtN2du8s5Ot4mKVK3pPtijL/L654ws592JHJ1PbZFF6+A==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.14.tgz", + "integrity": "sha512-Ht/8BuGlKfFTy0H3+8eEu0vdpwGztCnaLLXtpXNdQqiR7Hj4vFScU3T436vRAjATglOIPjJXronY+1WxxNLSiw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/eventstream-serde-universal": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -2993,13 +3058,14 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.7.tgz", - "integrity": "sha512-QVD+g3+icFkThoy4r8wVFZMsIP08taHVKjE6Jpmz8h5CgX/kk6pTODq5cht0OMtcapUx+xrPzUTQdA+TmO0m1g==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.14.tgz", + "integrity": "sha512-lWyt4T2XQZUZgK3tQ3Wn0w3XBvZsK/vjTuJl6bXbnGZBHH0ZUSONTYiK9TgjTTzU54xQr3DRFwpjmhp0oLm3gg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/eventstream-codec": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3007,15 +3073,16 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.8.tgz", - "integrity": "sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==", + "version": "5.3.17", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.17.tgz", + "integrity": "sha512-bXOvQzaSm6MnmLaWA1elgfQcAtN4UP3vXqV97bHuoOrHQOJiLT3ds6o9eo5bqd0TJfRFpzdGnDQdW3FACiAVdw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.7", - "@smithy/querystring-builder": "^4.2.7", - "@smithy/types": "^4.11.0", - "@smithy/util-base64": "^4.3.0", + "@smithy/protocol-http": "^5.3.14", + "@smithy/querystring-builder": "^4.2.14", + "@smithy/types": "^4.14.1", + "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" }, "engines": { @@ -3023,14 +3090,15 @@ } }, "node_modules/@smithy/hash-node": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.7.tgz", - "integrity": "sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.14.tgz", + "integrity": "sha512-8ZBDY2DD4wr+GGjTpPtiglEsqr0lUP+KHqgZcWczFf6qeZ/YRjMIOoQWVQlmwu7EtxKTd8YXD8lblmYcpBIA1g==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", + "@smithy/types": "^4.14.1", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, "engines": { @@ -3038,12 +3106,13 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.7.tgz", - "integrity": "sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.14.tgz", + "integrity": "sha512-c21qJiTSb25xvvOp+H2TNZzPCngrvl5vIPqPB8zQ/DmJF4QWXO19x1dWfMJZ6wZuuWUPPm0gV8C0cU3+ifcWuw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3051,10 +3120,11 @@ } }, "node_modules/@smithy/is-array-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", - "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz", + "integrity": "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3063,13 +3133,14 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.7.tgz", - "integrity": "sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.14.tgz", + "integrity": "sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3077,18 +3148,19 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.1.tgz", - "integrity": "sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==", + "version": "4.4.32", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.32.tgz", + "integrity": "sha512-ZZkgyjnJppiZbIm6Qbx92pbXYi1uzenIvGhBSCDlc7NwuAkiqSgS75j1czAD25ZLs2FjMjYy1q7gyRVWG6JA0Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.20.0", - "@smithy/middleware-serde": "^4.2.8", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", - "@smithy/util-middleware": "^4.2.7", + "@smithy/core": "^3.23.17", + "@smithy/middleware-serde": "^4.2.20", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" }, "engines": { @@ -3096,19 +3168,21 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.17", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.17.tgz", - "integrity": "sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==", + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.5.7.tgz", + "integrity": "sha512-bRt6ZImqVSeTk39Nm81K20ObIiAZ3WefY7G6+iz/0tZjs4dgRRjvRX2sgsH+zi6iDCRR/aQvQofLKxxz4rPBZg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/service-error-classification": "^4.2.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-retry": "^4.2.7", - "@smithy/uuid": "^1.1.0", + "@smithy/core": "^3.23.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/service-error-classification": "^4.3.1", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" }, "engines": { @@ -3116,13 +3190,15 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.8.tgz", - "integrity": "sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==", + "version": "4.2.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.20.tgz", + "integrity": "sha512-Lx9JMO9vArPtiChE3wbEZ5akMIDQpWQtlu90lhACQmNOXcGXRbaDywMHDzuDZ2OkZzP+9wQfZi3YJT9F67zTQQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", + "@smithy/core": "^3.23.17", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3130,12 +3206,13 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.7.tgz", - "integrity": "sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.14.tgz", + "integrity": "sha512-2dvkUKLuFdKsCRmOE4Mn63co0Djtsm+JMh0bYZQupN1pJwMeE8FmQmRLLzzEMN0dnNi7CDCYYH8F0EVwWiPBeA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3143,14 +3220,15 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.7.tgz", - "integrity": "sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==", + "version": "4.3.14", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.14.tgz", + "integrity": "sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3158,15 +3236,15 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.7.tgz", - "integrity": "sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.6.1.tgz", + "integrity": "sha512-iB+orM4x3xrr57X3YaXazfKnntl0LHlZB1kcXSGzMV1Tt0+YwEjGlbjk/44qEGtBzXAz6yFDzkYTKSV6Pj2HUg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/querystring-builder": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/protocol-http": "^5.3.14", + "@smithy/querystring-builder": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3174,12 +3252,13 @@ } }, "node_modules/@smithy/property-provider": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.7.tgz", - "integrity": "sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.14.tgz", + "integrity": "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3187,12 +3266,13 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.7.tgz", - "integrity": "sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.14.tgz", + "integrity": "sha512-dN5F8kHx8RNU0r+pCwNmFZyz6ChjMkzShy/zup6MtkRmmix4vZzJdW+di7x//b1LiynIev88FM18ie+wwPcQtQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3200,13 +3280,14 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.7.tgz", - "integrity": "sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.14.tgz", + "integrity": "sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", - "@smithy/util-uri-escape": "^4.2.0", + "@smithy/types": "^4.14.1", + "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" }, "engines": { @@ -3214,12 +3295,13 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.7.tgz", - "integrity": "sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.14.tgz", + "integrity": "sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3227,24 +3309,26 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.7.tgz", - "integrity": "sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.3.1.tgz", + "integrity": "sha512-aUQuDGh760ts/8MU+APjIZhlLPKhIIfqyzZaJikLEIMrdxFvxuLYD0WxWzaYWpmLbQlXDe9p7EWM3HsBe0K6Gw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0" + "@smithy/types": "^4.14.1" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.2.tgz", - "integrity": "sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==", + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.9.tgz", + "integrity": "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3252,18 +3336,19 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.7.tgz", - "integrity": "sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.14.tgz", + "integrity": "sha512-1D9Y/nmlVjCeSivCbhZ7hgEpmHyY1h0GvpSZt3l0xcD9JjmjVC1CHOozS6+Gh+/ldMH8JuJ6cujObQqfayAVFA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-uri-escape": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", + "@smithy/is-array-buffer": "^4.2.2", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-hex-encoding": "^4.2.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-uri-escape": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, "engines": { @@ -3271,17 +3356,18 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.2.tgz", - "integrity": "sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==", + "version": "4.12.13", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.13.tgz", + "integrity": "sha512-y/Pcj1V9+qG98gyu1gvftHB7rDpdh+7kIBIggs55yGm3JdtBV8GT8IFF3a1qxZ79QnaJHX9GXzvBG6tAd+czJA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.20.0", - "@smithy/middleware-endpoint": "^4.4.1", - "@smithy/middleware-stack": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-stream": "^4.5.8", + "@smithy/core": "^3.23.17", + "@smithy/middleware-endpoint": "^4.4.32", + "@smithy/middleware-stack": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-stream": "^4.5.25", "tslib": "^2.6.2" }, "engines": { @@ -3289,10 +3375,11 @@ } }, "node_modules/@smithy/types": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.11.0.tgz", - "integrity": "sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.1.tgz", + "integrity": "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3301,13 +3388,14 @@ } }, "node_modules/@smithy/url-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.7.tgz", - "integrity": "sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.14.tgz", + "integrity": "sha512-p06BiBigJ8bTA3MgnOfCtDUWnAMY0YfedO/GRpmc7p+wg3KW8vbXy1xwSu5ASy0wV7rRYtlfZOIKH4XqfhjSQQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/querystring-parser": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3315,13 +3403,14 @@ } }, "node_modules/@smithy/util-base64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", - "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", + "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, "engines": { @@ -3329,10 +3418,11 @@ } }, "node_modules/@smithy/util-body-length-browser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", - "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz", + "integrity": "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3341,10 +3431,11 @@ } }, "node_modules/@smithy/util-body-length-node": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", - "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz", + "integrity": "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3353,12 +3444,13 @@ } }, "node_modules/@smithy/util-buffer-from": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", - "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz", + "integrity": "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", + "@smithy/is-array-buffer": "^4.2.2", "tslib": "^2.6.2" }, "engines": { @@ -3366,10 +3458,11 @@ } }, "node_modules/@smithy/util-config-provider": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", - "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz", + "integrity": "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3378,14 +3471,15 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.16", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.16.tgz", - "integrity": "sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==", + "version": "4.3.49", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.49.tgz", + "integrity": "sha512-a5bNrdiONYB/qE2BuKegvUMd/+ZDwdg4vsNuuSzYE8qs2EYAdK9CynL+Rzn29PbPiUqoz/cbpRbcLzD5lEevHw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", + "@smithy/property-provider": "^4.2.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3393,17 +3487,18 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.19", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.19.tgz", - "integrity": "sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==", + "version": "4.2.54", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.54.tgz", + "integrity": "sha512-g1cvrJvOnzeJgEdf7AE4luI7gp6L8weE0y9a9wQUSGtjb8QRHDbCJYuE4Sy0SD9N8RrnNPFsPltAz/OSoBR9Zw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.4.5", - "@smithy/credential-provider-imds": "^4.2.7", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", + "@smithy/config-resolver": "^4.4.17", + "@smithy/credential-provider-imds": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3411,13 +3506,14 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.7.tgz", - "integrity": "sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.4.2.tgz", + "integrity": "sha512-a55Tr+3OKld4TTtnT+RhKOQHyPxm3j/xL4OR83WBUhLJaKDS9dnJ7arRMOp3t31dcLhApwG9bgvrRXBHlLdIkg==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/types": "^4.11.0", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3425,10 +3521,11 @@ } }, "node_modules/@smithy/util-hex-encoding": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", - "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz", + "integrity": "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3437,12 +3534,13 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.7.tgz", - "integrity": "sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.14.tgz", + "integrity": "sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3450,13 +3548,14 @@ } }, "node_modules/@smithy/util-retry": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.7.tgz", - "integrity": "sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.3.8.tgz", + "integrity": "sha512-LUIxbTBi+OpvXpg91poGA6BdyoleMDLnfXjVDqyi2RvZmTveY5loE/FgYUBCR5LU2BThW2SoZRh8dTIIy38IPw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/service-error-classification": "^4.3.1", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3464,18 +3563,19 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.8.tgz", - "integrity": "sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==", + "version": "4.5.25", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.25.tgz", + "integrity": "sha512-/PFpG4k8Ze8Ei+mMKj3oiPICYekthuzePZMgZbCqMiXIHHf4n2aZ4Ps0aSRShycFTGuj/J6XldmC0x0DwednIA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.3.8", - "@smithy/node-http-handler": "^4.4.7", - "@smithy/types": "^4.11.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/types": "^4.14.1", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-hex-encoding": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, "engines": { @@ -3483,10 +3583,11 @@ } }, "node_modules/@smithy/util-uri-escape": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", - "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz", + "integrity": "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3495,12 +3596,13 @@ } }, "node_modules/@smithy/util-utf8": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", - "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", + "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" }, "engines": { @@ -3508,13 +3610,13 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.7.tgz", - "integrity": "sha512-vHJFXi9b7kUEpHWUCY3Twl+9NPOZvQ0SAi+Ewtn48mbiJk4JY9MZmKQjGB4SCvVb9WPiSphZJYY6RIbs+grrzw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.3.0.tgz", + "integrity": "sha512-JyjYmLAfS+pdxF92o4yLgEoy0zhayKTw73FU1aofLWwLcJw7iSqIY2exGmMTrl/lmZugP5p/zxdFSippJDfKWA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" }, "engines": { @@ -3522,10 +3624,11 @@ } }, "node_modules/@smithy/uuid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", - "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.2.tgz", + "integrity": "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3932,14 +4035,15 @@ } }, "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz", + "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==", "dev": true, + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" } }, "node_modules/balanced-match": { @@ -4023,16 +4127,18 @@ "dev": true }, "node_modules/bn.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", - "dev": true + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", + "dev": true, + "license": "MIT" }, "node_modules/bowser": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", - "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", - "dev": true + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", + "dev": true, + "license": "MIT" }, "node_modules/boxen": { "version": "5.1.2", @@ -4069,10 +4175,11 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -4176,6 +4283,13 @@ "node": ">= 0.8" } }, + "node_modules/c3-linearization": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/c3-linearization/-/c3-linearization-0.3.0.tgz", + "integrity": "sha512-eQNsZQhFSJAhrNrITy2FpKh7EHS98q/pniDtQhndWqqsvayiPeqZ9T6I9V9PsHcm0nc+ZYJHKUvI/hh37I33HQ==", + "dev": true, + "license": "MIT" + }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -4722,10 +4836,11 @@ } }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -4794,10 +4909,11 @@ } }, "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "dev": true + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true, + "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -5599,10 +5715,27 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-xml-builder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", + "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "path-expression-matcher": "^1.5.0", + "xml-naming": "^0.1.0" + } + }, "node_modules/fast-xml-parser": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", - "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz", + "integrity": "sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==", "dev": true, "funding": [ { @@ -5610,8 +5743,12 @@ "url": "https://github.com/sponsors/NaturalIntelligence" } ], + "license": "MIT", "dependencies": { - "strnum": "^2.1.0" + "@nodable/entities": "^2.1.0", + "fast-xml-builder": "^1.1.5", + "path-expression-matcher": "^1.5.0", + "strnum": "^2.2.3" }, "bin": { "fxparser": "src/cli/cli.js" @@ -5768,9 +5905,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -5778,6 +5915,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -5970,10 +6108,11 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6055,15 +6194,29 @@ "dev": true, "license": "MIT" }, + "node_modules/graphviz": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz", + "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "temp": "~0.4.0" + }, + "engines": { + "node": ">=0.6.8" + } + }, "node_modules/hardhat": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.0.tgz", - "integrity": "sha512-A3yBISI18EcnY2IR7Ny2xZF33Q3qH01yrWapeWbyGOiJm/386SasWjbHRHYgUlZ3YWJETIMh7wYfMUaXrofTDQ==", + "version": "2.28.6", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.6.tgz", + "integrity": "sha512-zQze7qe+8ltwHvhX5NQ8sN1N37WWZGw8L63y+2XcPxGwAjc/SMF829z3NS6o1krX0sryhAsVBK/xrwUqlsot4Q==", "dev": true, + "license": "MIT", "dependencies": { "@ethereumjs/util": "^9.1.0", "@ethersproject/abi": "^5.1.2", - "@nomicfoundation/edr": "0.12.0-next.17", + "@nomicfoundation/edr": "0.12.0-next.23", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "adm-zip": "^0.4.16", @@ -6429,6 +6582,33 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -6572,10 +6752,11 @@ } }, "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz", + "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==", + "dev": true, + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.1", @@ -6764,6 +6945,19 @@ "node": ">=8" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-subdir": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", @@ -6970,10 +7164,11 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.isequal": { "version": "4.5.0", @@ -7168,12 +7363,13 @@ "dev": true }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -7291,10 +7487,11 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7725,6 +7922,22 @@ "node": ">=8" } }, + "node_modules/path-expression-matcher": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", + "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -7791,10 +8004,11 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -7925,10 +8139,14 @@ } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/punycode": { "version": "2.3.1", @@ -7941,10 +8159,11 @@ } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" }, @@ -8175,10 +8394,11 @@ } }, "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8206,10 +8426,11 @@ } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8298,20 +8519,28 @@ "dev": true }, "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "dev": true, + "license": "MIT" + }, "node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -8396,6 +8625,19 @@ "node": "*" } }, + "node_modules/sha1-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sha1-file/-/sha1-file-2.0.1.tgz", + "integrity": "sha512-L4Kum9Lp8cWqcGKycZcXxR6spUoG4idDIUzAKjPiELnIZWxiFlZ5HFVzFxVxuWuGPsrraeL0JoGk0nFZ7AGFEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasha": "^5.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -8733,16 +8975,17 @@ } }, "node_modules/strnum": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", - "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz", + "integrity": "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" } - ] + ], + "license": "MIT" }, "node_modules/supports-color": { "version": "7.2.0", @@ -8756,6 +8999,79 @@ "node": ">=8" } }, + "node_modules/surya": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/surya/-/surya-0.4.13.tgz", + "integrity": "sha512-ff2YmkYu9+u9A1tUv6cEuQDhLw1N+++iI+ZenXyhYR7YmaiQ19h32p2VchBn6zy3JPcfpvBZjf/aEmLbSMW1WA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@solidity-parser/parser": "^0.16.1", + "c3-linearization": "^0.3.0", + "colors": "^1.4.0", + "graphviz": "0.0.9", + "sha1-file": "^2.0.0", + "treeify": "^1.1.0", + "yargs": "^17.0.0" + }, + "bin": { + "surya": "bin/surya" + } + }, + "node_modules/surya/node_modules/@solidity-parser/parser": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.2.tgz", + "integrity": "sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/surya/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/surya/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/surya/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/sync-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", @@ -8779,6 +9095,15 @@ "get-port": "^3.1.0" } }, + "node_modules/temp": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", + "integrity": "sha512-IsFisGgDKk7qzK9erMIkQe/XwiSUdac7z3wYOsjcLkhPBy3k1SlvLoIh2dAHIlEpgA971CgguMrx9z8fFg7tSA==", + "dev": true, + "engines": [ + "node >=0.4.0" + ] + }, "node_modules/term-size": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", @@ -8877,10 +9202,11 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8947,6 +9273,16 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, + "node_modules/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -9014,10 +9350,11 @@ "dev": true }, "node_modules/undici": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", - "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.25.0.tgz", + "integrity": "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.17" } @@ -9200,6 +9537,22 @@ } } }, + "node_modules/xml-naming": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", + "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -9210,10 +9563,11 @@ } }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "dev": true, + "license": "ISC", "engines": { "node": ">= 6" } @@ -9454,437 +9808,440 @@ } }, "@aws-sdk/client-lambda": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.955.0.tgz", - "integrity": "sha512-pqA6Eo+JAJMze9/mr8BOSE6pognA6RyOc6htVrTCricZm8x6ak+babyOsg3ZULqqpBjLWNCHa3wNybCGQkMesQ==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.954.0", - "@aws-sdk/credential-provider-node": "3.955.0", - "@aws-sdk/middleware-host-header": "3.953.0", - "@aws-sdk/middleware-logger": "3.953.0", - "@aws-sdk/middleware-recursion-detection": "3.953.0", - "@aws-sdk/middleware-user-agent": "3.954.0", - "@aws-sdk/region-config-resolver": "3.953.0", - "@aws-sdk/types": "3.953.0", - "@aws-sdk/util-endpoints": "3.953.0", - "@aws-sdk/util-user-agent-browser": "3.953.0", - "@aws-sdk/util-user-agent-node": "3.954.0", - "@smithy/config-resolver": "^4.4.4", - "@smithy/core": "^3.19.0", - "@smithy/eventstream-serde-browser": "^4.2.6", - "@smithy/eventstream-serde-config-resolver": "^4.3.6", - "@smithy/eventstream-serde-node": "^4.2.6", - "@smithy/fetch-http-handler": "^5.3.7", - "@smithy/hash-node": "^4.2.6", - "@smithy/invalid-dependency": "^4.2.6", - "@smithy/middleware-content-length": "^4.2.6", - "@smithy/middleware-endpoint": "^4.4.0", - "@smithy/middleware-retry": "^4.4.16", - "@smithy/middleware-serde": "^4.2.7", - "@smithy/middleware-stack": "^4.2.6", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/node-http-handler": "^4.4.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", - "@smithy/url-parser": "^4.2.6", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.15", - "@smithy/util-defaults-mode-node": "^4.2.18", - "@smithy/util-endpoints": "^3.2.6", - "@smithy/util-middleware": "^4.2.6", - "@smithy/util-retry": "^4.2.6", - "@smithy/util-stream": "^4.5.7", - "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.6", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/client-sso": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.955.0.tgz", - "integrity": "sha512-+nym5boDFt2ksba0fElocMKxCFJbJcd31PI3502hoI1N5VK7HyxkQeBtQJ64JYomvw8eARjWWC13hkB0LtZILw==", + "version": "3.1045.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.1045.0.tgz", + "integrity": "sha512-9EDPinh03XanJQssTBdTY+9E7PkyQ0NLLJiaOAM71/g4DI+0OZboGqhX7KKizwUGqKkj0paKEAwgWaMLgEkQFQ==", "dev": true, "requires": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.954.0", - "@aws-sdk/middleware-host-header": "3.953.0", - "@aws-sdk/middleware-logger": "3.953.0", - "@aws-sdk/middleware-recursion-detection": "3.953.0", - "@aws-sdk/middleware-user-agent": "3.954.0", - "@aws-sdk/region-config-resolver": "3.953.0", - "@aws-sdk/types": "3.953.0", - "@aws-sdk/util-endpoints": "3.953.0", - "@aws-sdk/util-user-agent-browser": "3.953.0", - "@aws-sdk/util-user-agent-node": "3.954.0", - "@smithy/config-resolver": "^4.4.4", - "@smithy/core": "^3.19.0", - "@smithy/fetch-http-handler": "^5.3.7", - "@smithy/hash-node": "^4.2.6", - "@smithy/invalid-dependency": "^4.2.6", - "@smithy/middleware-content-length": "^4.2.6", - "@smithy/middleware-endpoint": "^4.4.0", - "@smithy/middleware-retry": "^4.4.16", - "@smithy/middleware-serde": "^4.2.7", - "@smithy/middleware-stack": "^4.2.6", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/node-http-handler": "^4.4.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", - "@smithy/url-parser": "^4.2.6", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.15", - "@smithy/util-defaults-mode-node": "^4.2.18", - "@smithy/util-endpoints": "^3.2.6", - "@smithy/util-middleware": "^4.2.6", - "@smithy/util-retry": "^4.2.6", - "@smithy/util-utf8": "^4.2.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/credential-provider-node": "^3.972.39", + "@aws-sdk/middleware-host-header": "^3.972.10", + "@aws-sdk/middleware-logger": "^3.972.10", + "@aws-sdk/middleware-recursion-detection": "^3.972.11", + "@aws-sdk/middleware-user-agent": "^3.972.38", + "@aws-sdk/region-config-resolver": "^3.972.13", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-endpoints": "^3.996.8", + "@aws-sdk/util-user-agent-browser": "^3.972.10", + "@aws-sdk/util-user-agent-node": "^3.973.24", + "@smithy/config-resolver": "^4.4.17", + "@smithy/core": "^3.23.17", + "@smithy/eventstream-serde-browser": "^4.2.14", + "@smithy/eventstream-serde-config-resolver": "^4.3.14", + "@smithy/eventstream-serde-node": "^4.2.14", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/hash-node": "^4.2.14", + "@smithy/invalid-dependency": "^4.2.14", + "@smithy/middleware-content-length": "^4.2.14", + "@smithy/middleware-endpoint": "^4.4.32", + "@smithy/middleware-retry": "^4.5.7", + "@smithy/middleware-serde": "^4.2.20", + "@smithy/middleware-stack": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/protocol-http": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-body-length-node": "^4.2.3", + "@smithy/util-defaults-mode-browser": "^4.3.49", + "@smithy/util-defaults-mode-node": "^4.2.54", + "@smithy/util-endpoints": "^3.4.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/util-stream": "^4.5.25", + "@smithy/util-utf8": "^4.2.2", + "@smithy/util-waiter": "^4.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/core": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.954.0.tgz", - "integrity": "sha512-5oYO5RP+mvCNXNj8XnF9jZo0EP0LTseYOJVNQYcii1D9DJqzHL3HJWurYh7cXxz7G7eDyvVYA01O9Xpt34TdoA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.953.0", - "@aws-sdk/xml-builder": "3.953.0", - "@smithy/core": "^3.19.0", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/property-provider": "^4.2.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/signature-v4": "^5.3.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.6", - "@smithy/util-utf8": "^4.2.0", + "version": "3.974.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.8.tgz", + "integrity": "sha512-njR2qoG6ZuB0kvAS2FyICsFZJ6gmCcf2X/7JcD14sUvGDm26wiZ5BrA6LOiUxKFEF+IVe7kdroxyE00YlkiYsw==", + "dev": true, + "requires": { + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/xml-builder": "^3.972.22", + "@smithy/core": "^3.23.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/signature-v4": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-env": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.954.0.tgz", - "integrity": "sha512-2HNkqBjfsvyoRuPAiFh86JBFMFyaCNhL4VyH6XqwTGKZffjG7hdBmzXPy7AT7G3oFh1k/1Zc27v0qxaKoK7mBA==", + "version": "3.972.34", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.34.tgz", + "integrity": "sha512-XT0jtf8Fw9JE6ppsQeoNnZRiG+jqRixMT1v1ZR17G60UvVdsQmTG8nbEyHuEPfMxDXEhfdARaM/XiEhca4lGHQ==", "dev": true, "requires": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-http": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.954.0.tgz", - "integrity": "sha512-CrWD5300+NE1OYRnSVDxoG7G0b5cLIZb7yp+rNQ5Jq/kqnTmyJXpVAsivq+bQIDaGzPXhadzpAMIoo7K/aHaag==", - "dev": true, - "requires": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/types": "3.953.0", - "@smithy/fetch-http-handler": "^5.3.7", - "@smithy/node-http-handler": "^4.4.6", - "@smithy/property-provider": "^4.2.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", - "@smithy/util-stream": "^4.5.7", + "version": "3.972.36", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.36.tgz", + "integrity": "sha512-DPoGWfy7J7RKxvbf5kOKIGQkD2ek3dbKgzKIGrnLuvZBz5myU+Im/H6pmc14QcnFbqHMqxvtWSgRDSJW3qXLQg==", + "dev": true, + "requires": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/property-provider": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-stream": "^4.5.25", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-ini": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.955.0.tgz", - "integrity": "sha512-90isLovxsPzaaSx3IIUZuxym6VXrsRetnQ3AuHr2kiTFk2pIzyIwmi+gDcUaLXQ5nNBoSj1Z/4+i1vhxa1n2DQ==", - "dev": true, - "requires": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/credential-provider-env": "3.954.0", - "@aws-sdk/credential-provider-http": "3.954.0", - "@aws-sdk/credential-provider-login": "3.955.0", - "@aws-sdk/credential-provider-process": "3.954.0", - "@aws-sdk/credential-provider-sso": "3.955.0", - "@aws-sdk/credential-provider-web-identity": "3.955.0", - "@aws-sdk/nested-clients": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/credential-provider-imds": "^4.2.6", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "version": "3.972.38", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.38.tgz", + "integrity": "sha512-oDzUBu2MGJFgoar05sPMCwSrhw44ASyccrHzj66vO69OZqi7I6hZZxXfuPLC8OCzW7C+sU+bI73XHij41yekgQ==", + "dev": true, + "requires": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/credential-provider-env": "^3.972.34", + "@aws-sdk/credential-provider-http": "^3.972.36", + "@aws-sdk/credential-provider-login": "^3.972.38", + "@aws-sdk/credential-provider-process": "^3.972.34", + "@aws-sdk/credential-provider-sso": "^3.972.38", + "@aws-sdk/credential-provider-web-identity": "^3.972.38", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/credential-provider-imds": "^4.2.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-login": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.955.0.tgz", - "integrity": "sha512-xlkmSvg8oDN5LIxLAq3N1QWK8F8gUAsBWZlp1IX8Lr5XhcKI3GVarIIUcZrvCy1NjzCd/LDXYdNL6MRlNP4bAw==", - "dev": true, - "requires": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/nested-clients": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "version": "3.972.38", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.38.tgz", + "integrity": "sha512-g1NosS8qe4OF++G2UFCM5ovSkgipC7YYor5KCWatG0UoMSO5YFj9C8muePlyVmOBV/WTI16Jo3/s1NUo/o1Bww==", + "dev": true, + "requires": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-node": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.955.0.tgz", - "integrity": "sha512-XIL4QB+dPOJA6DRTmYZL52wFcLTslb7V1ydS4FCNT2DVLhkO4ExkPP+pe5YmIpzt/Our1ugS+XxAs3e6BtyFjA==", - "dev": true, - "requires": { - "@aws-sdk/credential-provider-env": "3.954.0", - "@aws-sdk/credential-provider-http": "3.954.0", - "@aws-sdk/credential-provider-ini": "3.955.0", - "@aws-sdk/credential-provider-process": "3.954.0", - "@aws-sdk/credential-provider-sso": "3.955.0", - "@aws-sdk/credential-provider-web-identity": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/credential-provider-imds": "^4.2.6", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "version": "3.972.39", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.39.tgz", + "integrity": "sha512-HEswDQyxUtadoZ/bJsPPENHg7R0Lzym5LuMksJeHvqhCOpP+rtkDLKI4/ZChH4w3cf5kG8n6bZuI8PzajoiqMg==", + "dev": true, + "requires": { + "@aws-sdk/credential-provider-env": "^3.972.34", + "@aws-sdk/credential-provider-http": "^3.972.36", + "@aws-sdk/credential-provider-ini": "^3.972.38", + "@aws-sdk/credential-provider-process": "^3.972.34", + "@aws-sdk/credential-provider-sso": "^3.972.38", + "@aws-sdk/credential-provider-web-identity": "^3.972.38", + "@aws-sdk/types": "^3.973.8", + "@smithy/credential-provider-imds": "^4.2.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-process": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.954.0.tgz", - "integrity": "sha512-Y1/0O2LgbKM8iIgcVj/GNEQW6p90LVTCOzF2CI1pouoKqxmZ/1F7F66WHoa6XUOfKaCRj/R6nuMR3om9ThaM5A==", + "version": "3.972.34", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.34.tgz", + "integrity": "sha512-T3IFs4EVmVi1dVN5RciFnklCANSzvrQd/VuHY9ThHSQmYkTogjcGkoJEr+oNUPQZnso52183088NqysMPji1/Q==", "dev": true, "requires": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-sso": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.955.0.tgz", - "integrity": "sha512-Y99KI73Fn8JnB4RY5Ls6j7rd5jmFFwnY9WLHIWeJdc+vfwL6Bb1uWKW3+m/B9+RC4Xoz2nQgtefBcdWq5Xx8iw==", - "dev": true, - "requires": { - "@aws-sdk/client-sso": "3.955.0", - "@aws-sdk/core": "3.954.0", - "@aws-sdk/token-providers": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "version": "3.972.38", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.38.tgz", + "integrity": "sha512-5ZxG+t0+3Q3QPh8KEjX6syskhgNf7I0MN7oGioTf6Lm1NTjfP7sIcYGNsthXC2qR8vcD3edNZwCr2ovfSSWuRA==", + "dev": true, + "requires": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/token-providers": "3.1041.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.955.0.tgz", - "integrity": "sha512-+lFxkZ2Vz3qp/T68ZONKzWVTQvomTu7E6tts1dfAbEcDt62Y/nPCByq/C2hQj+TiN05HrUx+yTJaGHBklhkbqA==", + "version": "3.972.38", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.38.tgz", + "integrity": "sha512-lYHFF30DGI20jZcYX8cm6Ns0V7f1dDN6g/MBDLTyD/5iw+bXs3yBr2iAiHDkx4RFU5JgsnZvCHYKiRVPRdmOgw==", "dev": true, "requires": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/nested-clients": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-host-header": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.953.0.tgz", - "integrity": "sha512-jTGhfkONav+r4E6HLOrl5SzBqDmPByUYCkyB/c/3TVb8jX3wAZx8/q9bphKpCh+G5ARi3IdbSisgkZrJYqQ19Q==", + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.10.tgz", + "integrity": "sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg==", "dev": true, "requires": { - "@aws-sdk/types": "3.953.0", - "@smithy/protocol-http": "^5.3.6", - "@smithy/types": "^4.10.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-logger": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.953.0.tgz", - "integrity": "sha512-PlWdVYgcuptkIC0ZKqVUhWNtSHXJSx7U9V8J7dJjRmsXC40X7zpEycvrkzDMJjeTDGcCceYbyYAg/4X1lkcIMw==", + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.10.tgz", + "integrity": "sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==", "dev": true, "requires": { - "@aws-sdk/types": "3.953.0", - "@smithy/types": "^4.10.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.953.0.tgz", - "integrity": "sha512-cmIJx0gWeesUKK4YwgE+VQL3mpACr3/J24fbwnc1Z5tntC86b+HQFzU5vsBDw6lLwyD46dBgWdsXFh1jL+ZaFw==", + "version": "3.972.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.11.tgz", + "integrity": "sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ==", "dev": true, "requires": { - "@aws-sdk/types": "3.953.0", + "@aws-sdk/types": "^3.973.8", "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.6", - "@smithy/types": "^4.10.0", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-sdk-s3": { + "version": "3.972.37", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.37.tgz", + "integrity": "sha512-Km7M+i8DrLArVzrid1gfxeGhYHBd3uxvE77g0s5a52zPSVosxzQBnJ0gwWb6NIp/DOk8gsBMhi7V+cpJG0ndTA==", + "dev": true, + "requires": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-arn-parser": "^3.972.3", + "@smithy/core": "^3.23.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/signature-v4": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-config-provider": "^4.2.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-stream": "^4.5.25", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-user-agent": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.954.0.tgz", - "integrity": "sha512-5PX8JDe3dB2+MqXeGIhmgFnm2rbVsSxhz+Xyuu1oxLtbOn+a9UDA+sNBufEBjt3UxWy5qwEEY1fxdbXXayjlGg==", - "dev": true, - "requires": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/types": "3.953.0", - "@aws-sdk/util-endpoints": "3.953.0", - "@smithy/core": "^3.19.0", - "@smithy/protocol-http": "^5.3.6", - "@smithy/types": "^4.10.0", + "version": "3.972.38", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.38.tgz", + "integrity": "sha512-iz+B29TXcAZsJpwB+AwG/TTGA5l/VnmMZ2UxtiySOZjI6gCdmviXPwdgzcmuazMy16rXoPY4mYCGe7zdNKfx5A==", + "dev": true, + "requires": { + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-endpoints": "^3.996.8", + "@smithy/core": "^3.23.17", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-retry": "^4.3.6", "tslib": "^2.6.2" } }, "@aws-sdk/nested-clients": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.955.0.tgz", - "integrity": "sha512-RBi6CQHbPF09kqXAoiEOOPkVnSoU5YppKoOt/cgsWfoMHwC+7itIrEv+yRD62h14jIjF3KngVIQIrBRbX3o3/Q==", + "version": "3.997.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.6.tgz", + "integrity": "sha512-WBDnqatJl+kGObpfmfSxqnXeYTu3Me8wx8WCtvoxX3pfWrrTv8I4WTMSSs7PZqcRcVh8WeUKMgGFjMG+52SR1w==", "dev": true, "requires": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.954.0", - "@aws-sdk/middleware-host-header": "3.953.0", - "@aws-sdk/middleware-logger": "3.953.0", - "@aws-sdk/middleware-recursion-detection": "3.953.0", - "@aws-sdk/middleware-user-agent": "3.954.0", - "@aws-sdk/region-config-resolver": "3.953.0", - "@aws-sdk/types": "3.953.0", - "@aws-sdk/util-endpoints": "3.953.0", - "@aws-sdk/util-user-agent-browser": "3.953.0", - "@aws-sdk/util-user-agent-node": "3.954.0", - "@smithy/config-resolver": "^4.4.4", - "@smithy/core": "^3.19.0", - "@smithy/fetch-http-handler": "^5.3.7", - "@smithy/hash-node": "^4.2.6", - "@smithy/invalid-dependency": "^4.2.6", - "@smithy/middleware-content-length": "^4.2.6", - "@smithy/middleware-endpoint": "^4.4.0", - "@smithy/middleware-retry": "^4.4.16", - "@smithy/middleware-serde": "^4.2.7", - "@smithy/middleware-stack": "^4.2.6", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/node-http-handler": "^4.4.6", - "@smithy/protocol-http": "^5.3.6", - "@smithy/smithy-client": "^4.10.1", - "@smithy/types": "^4.10.0", - "@smithy/url-parser": "^4.2.6", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.15", - "@smithy/util-defaults-mode-node": "^4.2.18", - "@smithy/util-endpoints": "^3.2.6", - "@smithy/util-middleware": "^4.2.6", - "@smithy/util-retry": "^4.2.6", - "@smithy/util-utf8": "^4.2.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/middleware-host-header": "^3.972.10", + "@aws-sdk/middleware-logger": "^3.972.10", + "@aws-sdk/middleware-recursion-detection": "^3.972.11", + "@aws-sdk/middleware-user-agent": "^3.972.38", + "@aws-sdk/region-config-resolver": "^3.972.13", + "@aws-sdk/signature-v4-multi-region": "^3.996.25", + "@aws-sdk/types": "^3.973.8", + "@aws-sdk/util-endpoints": "^3.996.8", + "@aws-sdk/util-user-agent-browser": "^3.972.10", + "@aws-sdk/util-user-agent-node": "^3.973.24", + "@smithy/config-resolver": "^4.4.17", + "@smithy/core": "^3.23.17", + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/hash-node": "^4.2.14", + "@smithy/invalid-dependency": "^4.2.14", + "@smithy/middleware-content-length": "^4.2.14", + "@smithy/middleware-endpoint": "^4.4.32", + "@smithy/middleware-retry": "^4.5.7", + "@smithy/middleware-serde": "^4.2.20", + "@smithy/middleware-stack": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/protocol-http": "^5.3.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-body-length-node": "^4.2.3", + "@smithy/util-defaults-mode-browser": "^4.3.49", + "@smithy/util-defaults-mode-node": "^4.2.54", + "@smithy/util-endpoints": "^3.4.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@aws-sdk/region-config-resolver": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.953.0.tgz", - "integrity": "sha512-5MJgnsc+HLO+le0EK1cy92yrC7kyhGZSpaq8PcQvKs9qtXCXT5Tb6tMdkr5Y07JxYsYOV1omWBynvL6PWh08tQ==", + "version": "3.972.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.13.tgz", + "integrity": "sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A==", + "dev": true, + "requires": { + "@aws-sdk/types": "^3.973.8", + "@smithy/config-resolver": "^4.4.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/signature-v4-multi-region": { + "version": "3.996.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.25.tgz", + "integrity": "sha512-+CMIt3e1VzlklAECmG+DtP1sV8iKq25FuA0OKpnJ4KA0kxUtd7CgClY7/RU6VzJBQwbN4EJ9Ue6plvqx1qGadw==", "dev": true, "requires": { - "@aws-sdk/types": "3.953.0", - "@smithy/config-resolver": "^4.4.4", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/types": "^4.10.0", + "@aws-sdk/middleware-sdk-s3": "^3.972.37", + "@aws-sdk/types": "^3.973.8", + "@smithy/protocol-http": "^5.3.14", + "@smithy/signature-v4": "^5.3.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@aws-sdk/token-providers": { - "version": "3.955.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.955.0.tgz", - "integrity": "sha512-LVpWkxXvMPgZofP2Gc8XBfQhsyecBMVARDHWMvks6vPbCLSTM7dw6H1HI9qbGNCurYcyc2xBRAkEDhChQlbPPg==", + "version": "3.1041.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1041.0.tgz", + "integrity": "sha512-Th7kPI6YPtvJUcdznooXJMy+9rQWjmEF81LxaJssngBzuysK4a/x+l8kjm1zb7nYsUPbndnBdUnwng/3PLvtGw==", "dev": true, "requires": { - "@aws-sdk/core": "3.954.0", - "@aws-sdk/nested-clients": "3.955.0", - "@aws-sdk/types": "3.953.0", - "@smithy/property-provider": "^4.2.6", - "@smithy/shared-ini-file-loader": "^4.4.1", - "@smithy/types": "^4.10.0", + "@aws-sdk/core": "^3.974.8", + "@aws-sdk/nested-clients": "^3.997.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@aws-sdk/types": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.953.0.tgz", - "integrity": "sha512-M9Iwg9kTyqTErI0vOTVVpcnTHWzS3VplQppy8MuL02EE+mJ0BIwpWfsaAPQW+/XnVpdNpWZTsHcNE29f1+hR8g==", + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.8.tgz", + "integrity": "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==", + "dev": true, + "requires": { + "@smithy/types": "^4.14.1", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-arn-parser": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.3.tgz", + "integrity": "sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==", "dev": true, "requires": { - "@smithy/types": "^4.10.0", "tslib": "^2.6.2" } }, "@aws-sdk/util-endpoints": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.953.0.tgz", - "integrity": "sha512-rjaS6jrFksopXvNg6YeN+D1lYwhcByORNlFuYesFvaQNtPOufbE5tJL4GJ3TMXyaY0uFR28N5BHHITPyWWfH/g==", + "version": "3.996.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.8.tgz", + "integrity": "sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g==", "dev": true, "requires": { - "@aws-sdk/types": "3.953.0", - "@smithy/types": "^4.10.0", - "@smithy/url-parser": "^4.2.6", - "@smithy/util-endpoints": "^3.2.6", + "@aws-sdk/types": "^3.973.8", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-endpoints": "^3.4.2", "tslib": "^2.6.2" } }, "@aws-sdk/util-locate-window": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.953.0.tgz", - "integrity": "sha512-mPxK+I1LcrgC/RSa3G5AMAn8eN2Ay0VOgw8lSRmV1jCtO+iYvNeCqOdxoJUjOW6I5BA4niIRWqVORuRP07776Q==", + "version": "3.965.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz", + "integrity": "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==", "dev": true, "requires": { "tslib": "^2.6.2" } }, "@aws-sdk/util-user-agent-browser": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.953.0.tgz", - "integrity": "sha512-UF5NeqYesWuFao+u7LJvpV1SJCaLml5BtFZKUdTnNNMeN6jvV+dW/eQoFGpXF94RCqguX0XESmRuRRPQp+/rzQ==", + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.10.tgz", + "integrity": "sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g==", "dev": true, "requires": { - "@aws-sdk/types": "3.953.0", - "@smithy/types": "^4.10.0", + "@aws-sdk/types": "^3.973.8", + "@smithy/types": "^4.14.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "@aws-sdk/util-user-agent-node": { - "version": "3.954.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.954.0.tgz", - "integrity": "sha512-fB5S5VOu7OFkeNzcblQlez4AjO5hgDFaa7phYt7716YWisY3RjAaQPlxgv+G3GltHHDJIfzEC5aRxdf62B9zMg==", + "version": "3.973.24", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.24.tgz", + "integrity": "sha512-ZWwlkjcIp7cEL8ZfTpTAPNkwx25p7xol0xlKoWVVf22+nsjwmLcHYtTPjIV1cSpmB/b6DaK4cb1fSkvCXHgRdw==", "dev": true, "requires": { - "@aws-sdk/middleware-user-agent": "3.954.0", - "@aws-sdk/types": "3.953.0", - "@smithy/node-config-provider": "^4.3.6", - "@smithy/types": "^4.10.0", + "@aws-sdk/middleware-user-agent": "^3.972.38", + "@aws-sdk/types": "^3.973.8", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" } }, @@ -9898,20 +10255,21 @@ } }, "@aws-sdk/xml-builder": { - "version": "3.953.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.953.0.tgz", - "integrity": "sha512-Zmrj21jQ2OeOJGr9spPiN00aQvXa/WUqRXcTVENhrMt+OFoSOfDFpYhUj9NQ09QmQ8KMWFoWuWW6iKurNqLvAA==", + "version": "3.972.22", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.22.tgz", + "integrity": "sha512-PMYKKtJd70IsSG0yHrdAbxBr+ZWBKLvzFZfD3/urxgf6hXVMzuU5M+3MJ5G67RpOmLBu1fAUN65SbWuKUCOlAA==", "dev": true, "requires": { - "@smithy/types": "^4.10.0", - "fast-xml-parser": "5.2.5", + "@nodable/entities": "2.1.0", + "@smithy/types": "^4.14.1", + "fast-xml-parser": "5.7.2", "tslib": "^2.6.2" } }, "@aws/lambda-invoke-store": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", - "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz", + "integrity": "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==", "dev": true }, "@babel/runtime": { @@ -10958,6 +11316,12 @@ "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", "dev": true }, + "@nodable/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==", + "dev": true + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -10985,66 +11349,66 @@ } }, "@nomicfoundation/edr": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.17.tgz", - "integrity": "sha512-Y8Kwqd5JpBmI/Kst6NJ/bZ81FeJea9J6WEwoSRTZnEvwfqW9dk9PI8zJs2UJpOACL1fXEPvN+doETbxT9EhwXA==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.23.tgz", + "integrity": "sha512-F2/6HZh8Q9RsgkOIkRrckldbhPjIZY7d4mT9LYuW68miwGQ5l7CkAgcz9fRRiurA0+YJhtsbx/EyrD9DmX9BOw==", "dev": true, "requires": { - "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.17", - "@nomicfoundation/edr-darwin-x64": "0.12.0-next.17", - "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.17", - "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.17", - "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.17", - "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.17", - "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.17" + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.23", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.23" } }, "@nomicfoundation/edr-darwin-arm64": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.17.tgz", - "integrity": "sha512-gI9/9ysLeAid0+VSTBeutxOJ0/Rrh00niGkGL9+4lR577igDY+v55XGN0oBMST49ILS0f12J6ZY90LG8sxPXmQ==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.23.tgz", + "integrity": "sha512-Amh7mRoDzZyJJ4efqoePqdoZOzharmSOttZuJDlVE5yy07BoE8hL6ZRpa5fNYn0LCqn/KoWs8OHANWxhKDGhvQ==", "dev": true }, "@nomicfoundation/edr-darwin-x64": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.17.tgz", - "integrity": "sha512-zSZtwf584RkIyb8awELDt7ctskogH0p4pmqOC4vhykc8ODOv2XLuG1IgeE4WgYhWGZOufbCtgLfpJQrWqN6mmw==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.23.tgz", + "integrity": "sha512-9wn489FIQm7m0UCD+HhktjWx6vskZzeZD9oDc2k9ZvbBzdXwPp5tiDqUBJ+eQpByAzCDfteAJwRn2lQCE0U+Iw==", "dev": true }, "@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.17.tgz", - "integrity": "sha512-WjdfgV6B7gT5Q0NXtSIWyeK8gzaJX5HK6/jclYVHarWuEtS1LFgePYgMjK8rmm7IRTkM9RsE/PCuQEP1nrSsuA==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-nlk5EejSzEUfEngv0Jkhqq3/wINIfF2ED9wAofc22w/V1DV99ASh9l3/e/MIHOQFecIZ9MDqt0Em9/oDyB1Uew==", "dev": true }, "@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.17.tgz", - "integrity": "sha512-26rObKhhCDb9JkZbToyr7JVZo4tSVAFvzoJSJVmvpOl0LOHrfFsgVQu2n/8cNkwMAqulPubKL2E0jdnmEoZjWA==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-SJuPBp3Rc6vM92UtVTUxZQ/QlLhLfwTftt2XUiYohmGKB3RjGzpgduEFMCA0LEnucUckU6UHrJNFHiDm77C4PQ==", "dev": true }, "@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.17.tgz", - "integrity": "sha512-dPkHScIf/CU6h6k3k4HNUnQyQcVSLKanviHCAcs5HkviiJPxvVtOMMvtNBxoIvKZRxGFxf2eutcqQW4ZV1wRQQ==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-NU+Qs3u7Qt6t3bJFdmmjd5CsvgI2bPPzO31KifM2Ez96/jsXYho5debtTQnimlb5NAqiHTSlxjh/F8ROcptmeQ==", "dev": true }, "@nomicfoundation/edr-linux-x64-musl": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.17.tgz", - "integrity": "sha512-5Ixe/bpyWZxC3AjIb8EomAOK44ajemBVx/lZRHZiWSBlwQpbSWriYAtKjKcReQQPwuYVjnFpAD2AtuCvseIjHw==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-F78fZA2h6/ssiCSZOovlgIu0dUeI7ItKPsDDF3UUlIibef052GCXmliMinC90jVPbrjUADMd1BUwjfI0Z8OllQ==", "dev": true }, "@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.12.0-next.17", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.17.tgz", - "integrity": "sha512-29YlvdgofSdXG1mUzIuH4kMXu1lmVc1hvYWUGWEH59L+LaakdhfJ/Wu5izeclKkrTh729Amtk/Hk1m29kFOO8A==", + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.23.tgz", + "integrity": "sha512-IfJZQJn7d/YyqhmguBIGoCKjE9dKjbu6V6iNEPApfwf5JyyjHYyyfkLU4rf7hygj57bfH4sl1jtQ6r8HnT62lw==", "dev": true }, "@nomicfoundation/hardhat-chai-matchers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.0.tgz", - "integrity": "sha512-GPhBNafh1fCnVD9Y7BYvoLnblnvfcq3j8YDbO1gGe/1nOFWzGmV7gFu5DkwFXF+IpYsS+t96o9qc/mPu3V3Vfw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.2.tgz", + "integrity": "sha512-NlUlde/ycXw2bLzA2gWjjbxQaD9xIRbAF30nsoEprAWzH8dXEI1ILZUKZMyux9n9iygEXTzN0SDVjE6zWDZi9g==", "dev": true, "requires": { "@types/chai-as-promised": "^7.1.3", @@ -11460,527 +11824,517 @@ } } }, - "@smithy/abort-controller": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.7.tgz", - "integrity": "sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==", - "dev": true, - "requires": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - } - }, "@smithy/config-resolver": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.5.tgz", - "integrity": "sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==", + "version": "4.4.17", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.17.tgz", + "integrity": "sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ==", "dev": true, "requires": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.7", - "@smithy/util-middleware": "^4.2.7", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-config-provider": "^4.2.2", + "@smithy/util-endpoints": "^3.4.2", + "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" } }, "@smithy/core": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.20.0.tgz", - "integrity": "sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==", - "dev": true, - "requires": { - "@smithy/middleware-serde": "^4.2.8", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-stream": "^4.5.8", - "@smithy/util-utf8": "^4.2.0", - "@smithy/uuid": "^1.1.0", + "version": "3.23.17", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.17.tgz", + "integrity": "sha512-x7BlLbUFL8NWCGjMF9C+1N5cVCxcPa7g6Tv9B4A2luWx3be3oU8hQ96wIwxe/s7OhIzvoJH73HAUSg5JXVlEtQ==", + "dev": true, + "requires": { + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-stream": "^4.5.25", + "@smithy/util-utf8": "^4.2.2", + "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "@smithy/credential-provider-imds": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.7.tgz", - "integrity": "sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.14.tgz", + "integrity": "sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg==", "dev": true, "requires": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", "tslib": "^2.6.2" } }, "@smithy/eventstream-codec": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.7.tgz", - "integrity": "sha512-DrpkEoM3j9cBBWhufqBwnbbn+3nf1N9FP6xuVJ+e220jbactKuQgaZwjwP5CP1t+O94brm2JgVMD2atMGX3xIQ==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.14.tgz", + "integrity": "sha512-erZq0nOIpzfeZdCyzZjdJb4nVSKLUmSkaQUVkRGQTXs30gyUGeKnrYEg+Xe1W5gE3aReS7IgsvANwVPxSzY6Pw==", "dev": true, "requires": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.11.0", - "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/types": "^4.14.1", + "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "@smithy/eventstream-serde-browser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.7.tgz", - "integrity": "sha512-ujzPk8seYoDBmABDE5YqlhQZAXLOrtxtJLrbhHMKjBoG5b4dK4i6/mEU+6/7yXIAkqOO8sJ6YxZl+h0QQ1IJ7g==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.14.tgz", + "integrity": "sha512-8IelTCtTctWRbb+0Dcy+C0aICh1qa0qWXqgjcXDmMuCvPJRnv26hiDZoAau2ILOniki65mCPKqOQs/BaWvO4CQ==", "dev": true, "requires": { - "@smithy/eventstream-serde-universal": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/eventstream-serde-universal": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/eventstream-serde-config-resolver": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.7.tgz", - "integrity": "sha512-x7BtAiIPSaNaWuzm24Q/mtSkv+BrISO/fmheiJ39PKRNH3RmH2Hph/bUKSOBOBC9unqfIYDhKTHwpyZycLGPVQ==", + "version": "4.3.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.14.tgz", + "integrity": "sha512-sqHiHpYRYo3FJlaIxD1J8PhbcmJAm7IuM16mVnwSkCToD7g00IBZzKuiLNMGmftULmEUX6/UAz8/NN5uMP8bVA==", "dev": true, "requires": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/eventstream-serde-node": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.7.tgz", - "integrity": "sha512-roySCtHC5+pQq5lK4be1fZ/WR6s/AxnPaLfCODIPArtN2du8s5Ot4mKVK3pPtijL/L654ws592JHJ1PbZFF6+A==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.14.tgz", + "integrity": "sha512-Ht/8BuGlKfFTy0H3+8eEu0vdpwGztCnaLLXtpXNdQqiR7Hj4vFScU3T436vRAjATglOIPjJXronY+1WxxNLSiw==", "dev": true, "requires": { - "@smithy/eventstream-serde-universal": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/eventstream-serde-universal": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/eventstream-serde-universal": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.7.tgz", - "integrity": "sha512-QVD+g3+icFkThoy4r8wVFZMsIP08taHVKjE6Jpmz8h5CgX/kk6pTODq5cht0OMtcapUx+xrPzUTQdA+TmO0m1g==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.14.tgz", + "integrity": "sha512-lWyt4T2XQZUZgK3tQ3Wn0w3XBvZsK/vjTuJl6bXbnGZBHH0ZUSONTYiK9TgjTTzU54xQr3DRFwpjmhp0oLm3gg==", "dev": true, "requires": { - "@smithy/eventstream-codec": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/eventstream-codec": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/fetch-http-handler": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.8.tgz", - "integrity": "sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==", + "version": "5.3.17", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.17.tgz", + "integrity": "sha512-bXOvQzaSm6MnmLaWA1elgfQcAtN4UP3vXqV97bHuoOrHQOJiLT3ds6o9eo5bqd0TJfRFpzdGnDQdW3FACiAVdw==", "dev": true, "requires": { - "@smithy/protocol-http": "^5.3.7", - "@smithy/querystring-builder": "^4.2.7", - "@smithy/types": "^4.11.0", - "@smithy/util-base64": "^4.3.0", + "@smithy/protocol-http": "^5.3.14", + "@smithy/querystring-builder": "^4.2.14", + "@smithy/types": "^4.14.1", + "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "@smithy/hash-node": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.7.tgz", - "integrity": "sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.14.tgz", + "integrity": "sha512-8ZBDY2DD4wr+GGjTpPtiglEsqr0lUP+KHqgZcWczFf6qeZ/YRjMIOoQWVQlmwu7EtxKTd8YXD8lblmYcpBIA1g==", "dev": true, "requires": { - "@smithy/types": "^4.11.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", + "@smithy/types": "^4.14.1", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@smithy/invalid-dependency": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.7.tgz", - "integrity": "sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.14.tgz", + "integrity": "sha512-c21qJiTSb25xvvOp+H2TNZzPCngrvl5vIPqPB8zQ/DmJF4QWXO19x1dWfMJZ6wZuuWUPPm0gV8C0cU3+ifcWuw==", "dev": true, "requires": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/is-array-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", - "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz", + "integrity": "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==", "dev": true, "requires": { "tslib": "^2.6.2" } }, "@smithy/middleware-content-length": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.7.tgz", - "integrity": "sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.14.tgz", + "integrity": "sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw==", "dev": true, "requires": { - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/middleware-endpoint": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.1.tgz", - "integrity": "sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==", - "dev": true, - "requires": { - "@smithy/core": "^3.20.0", - "@smithy/middleware-serde": "^4.2.8", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", - "@smithy/util-middleware": "^4.2.7", + "version": "4.4.32", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.32.tgz", + "integrity": "sha512-ZZkgyjnJppiZbIm6Qbx92pbXYi1uzenIvGhBSCDlc7NwuAkiqSgS75j1czAD25ZLs2FjMjYy1q7gyRVWG6JA0Q==", + "dev": true, + "requires": { + "@smithy/core": "^3.23.17", + "@smithy/middleware-serde": "^4.2.20", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", + "@smithy/url-parser": "^4.2.14", + "@smithy/util-middleware": "^4.2.14", "tslib": "^2.6.2" } }, "@smithy/middleware-retry": { - "version": "4.4.17", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.17.tgz", - "integrity": "sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==", - "dev": true, - "requires": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/service-error-classification": "^4.2.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-retry": "^4.2.7", - "@smithy/uuid": "^1.1.0", + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.5.7.tgz", + "integrity": "sha512-bRt6ZImqVSeTk39Nm81K20ObIiAZ3WefY7G6+iz/0tZjs4dgRRjvRX2sgsH+zi6iDCRR/aQvQofLKxxz4rPBZg==", + "dev": true, + "requires": { + "@smithy/core": "^3.23.17", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/service-error-classification": "^4.3.1", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-retry": "^4.3.6", + "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "@smithy/middleware-serde": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.8.tgz", - "integrity": "sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==", + "version": "4.2.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.20.tgz", + "integrity": "sha512-Lx9JMO9vArPtiChE3wbEZ5akMIDQpWQtlu90lhACQmNOXcGXRbaDywMHDzuDZ2OkZzP+9wQfZi3YJT9F67zTQQ==", "dev": true, "requires": { - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", + "@smithy/core": "^3.23.17", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/middleware-stack": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.7.tgz", - "integrity": "sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.14.tgz", + "integrity": "sha512-2dvkUKLuFdKsCRmOE4Mn63co0Djtsm+JMh0bYZQupN1pJwMeE8FmQmRLLzzEMN0dnNi7CDCYYH8F0EVwWiPBeA==", "dev": true, "requires": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/node-config-provider": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.7.tgz", - "integrity": "sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==", + "version": "4.3.14", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.14.tgz", + "integrity": "sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg==", "dev": true, "requires": { - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", + "@smithy/property-provider": "^4.2.14", + "@smithy/shared-ini-file-loader": "^4.4.9", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/node-http-handler": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.7.tgz", - "integrity": "sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.6.1.tgz", + "integrity": "sha512-iB+orM4x3xrr57X3YaXazfKnntl0LHlZB1kcXSGzMV1Tt0+YwEjGlbjk/44qEGtBzXAz6yFDzkYTKSV6Pj2HUg==", "dev": true, "requires": { - "@smithy/abort-controller": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/querystring-builder": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/protocol-http": "^5.3.14", + "@smithy/querystring-builder": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/property-provider": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.7.tgz", - "integrity": "sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.14.tgz", + "integrity": "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ==", "dev": true, "requires": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/protocol-http": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.7.tgz", - "integrity": "sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.14.tgz", + "integrity": "sha512-dN5F8kHx8RNU0r+pCwNmFZyz6ChjMkzShy/zup6MtkRmmix4vZzJdW+di7x//b1LiynIev88FM18ie+wwPcQtQ==", "dev": true, "requires": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/querystring-builder": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.7.tgz", - "integrity": "sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.14.tgz", + "integrity": "sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A==", "dev": true, "requires": { - "@smithy/types": "^4.11.0", - "@smithy/util-uri-escape": "^4.2.0", + "@smithy/types": "^4.14.1", + "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "@smithy/querystring-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.7.tgz", - "integrity": "sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.14.tgz", + "integrity": "sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw==", "dev": true, "requires": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/service-error-classification": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.7.tgz", - "integrity": "sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.3.1.tgz", + "integrity": "sha512-aUQuDGh760ts/8MU+APjIZhlLPKhIIfqyzZaJikLEIMrdxFvxuLYD0WxWzaYWpmLbQlXDe9p7EWM3HsBe0K6Gw==", "dev": true, "requires": { - "@smithy/types": "^4.11.0" + "@smithy/types": "^4.14.1" } }, "@smithy/shared-ini-file-loader": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.2.tgz", - "integrity": "sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==", + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.9.tgz", + "integrity": "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ==", "dev": true, "requires": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/signature-v4": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.7.tgz", - "integrity": "sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==", - "dev": true, - "requires": { - "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-uri-escape": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.14.tgz", + "integrity": "sha512-1D9Y/nmlVjCeSivCbhZ7hgEpmHyY1h0GvpSZt3l0xcD9JjmjVC1CHOozS6+Gh+/ldMH8JuJ6cujObQqfayAVFA==", + "dev": true, + "requires": { + "@smithy/is-array-buffer": "^4.2.2", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-hex-encoding": "^4.2.2", + "@smithy/util-middleware": "^4.2.14", + "@smithy/util-uri-escape": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@smithy/smithy-client": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.2.tgz", - "integrity": "sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==", + "version": "4.12.13", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.13.tgz", + "integrity": "sha512-y/Pcj1V9+qG98gyu1gvftHB7rDpdh+7kIBIggs55yGm3JdtBV8GT8IFF3a1qxZ79QnaJHX9GXzvBG6tAd+czJA==", "dev": true, "requires": { - "@smithy/core": "^3.20.0", - "@smithy/middleware-endpoint": "^4.4.1", - "@smithy/middleware-stack": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-stream": "^4.5.8", + "@smithy/core": "^3.23.17", + "@smithy/middleware-endpoint": "^4.4.32", + "@smithy/middleware-stack": "^4.2.14", + "@smithy/protocol-http": "^5.3.14", + "@smithy/types": "^4.14.1", + "@smithy/util-stream": "^4.5.25", "tslib": "^2.6.2" } }, "@smithy/types": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.11.0.tgz", - "integrity": "sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.1.tgz", + "integrity": "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==", "dev": true, "requires": { "tslib": "^2.6.2" } }, "@smithy/url-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.7.tgz", - "integrity": "sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.14.tgz", + "integrity": "sha512-p06BiBigJ8bTA3MgnOfCtDUWnAMY0YfedO/GRpmc7p+wg3KW8vbXy1xwSu5ASy0wV7rRYtlfZOIKH4XqfhjSQQ==", "dev": true, "requires": { - "@smithy/querystring-parser": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/querystring-parser": "^4.2.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/util-base64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", - "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", + "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", "dev": true, "requires": { - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@smithy/util-body-length-browser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", - "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz", + "integrity": "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==", "dev": true, "requires": { "tslib": "^2.6.2" } }, "@smithy/util-body-length-node": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", - "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz", + "integrity": "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==", "dev": true, "requires": { "tslib": "^2.6.2" } }, "@smithy/util-buffer-from": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", - "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz", + "integrity": "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==", "dev": true, "requires": { - "@smithy/is-array-buffer": "^4.2.0", + "@smithy/is-array-buffer": "^4.2.2", "tslib": "^2.6.2" } }, "@smithy/util-config-provider": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", - "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz", + "integrity": "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==", "dev": true, "requires": { "tslib": "^2.6.2" } }, "@smithy/util-defaults-mode-browser": { - "version": "4.3.16", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.16.tgz", - "integrity": "sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==", + "version": "4.3.49", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.49.tgz", + "integrity": "sha512-a5bNrdiONYB/qE2BuKegvUMd/+ZDwdg4vsNuuSzYE8qs2EYAdK9CynL+Rzn29PbPiUqoz/cbpRbcLzD5lEevHw==", "dev": true, "requires": { - "@smithy/property-provider": "^4.2.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", + "@smithy/property-provider": "^4.2.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/util-defaults-mode-node": { - "version": "4.2.19", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.19.tgz", - "integrity": "sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==", + "version": "4.2.54", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.54.tgz", + "integrity": "sha512-g1cvrJvOnzeJgEdf7AE4luI7gp6L8weE0y9a9wQUSGtjb8QRHDbCJYuE4Sy0SD9N8RrnNPFsPltAz/OSoBR9Zw==", "dev": true, "requires": { - "@smithy/config-resolver": "^4.4.5", - "@smithy/credential-provider-imds": "^4.2.7", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/smithy-client": "^4.10.2", - "@smithy/types": "^4.11.0", + "@smithy/config-resolver": "^4.4.17", + "@smithy/credential-provider-imds": "^4.2.14", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/property-provider": "^4.2.14", + "@smithy/smithy-client": "^4.12.13", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/util-endpoints": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.7.tgz", - "integrity": "sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.4.2.tgz", + "integrity": "sha512-a55Tr+3OKld4TTtnT+RhKOQHyPxm3j/xL4OR83WBUhLJaKDS9dnJ7arRMOp3t31dcLhApwG9bgvrRXBHlLdIkg==", "dev": true, "requires": { - "@smithy/node-config-provider": "^4.3.7", - "@smithy/types": "^4.11.0", + "@smithy/node-config-provider": "^4.3.14", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/util-hex-encoding": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", - "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz", + "integrity": "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==", "dev": true, "requires": { "tslib": "^2.6.2" } }, "@smithy/util-middleware": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.7.tgz", - "integrity": "sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==", + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.14.tgz", + "integrity": "sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw==", "dev": true, "requires": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/util-retry": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.7.tgz", - "integrity": "sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.3.8.tgz", + "integrity": "sha512-LUIxbTBi+OpvXpg91poGA6BdyoleMDLnfXjVDqyi2RvZmTveY5loE/FgYUBCR5LU2BThW2SoZRh8dTIIy38IPw==", "dev": true, "requires": { - "@smithy/service-error-classification": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/service-error-classification": "^4.3.1", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/util-stream": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.8.tgz", - "integrity": "sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==", - "dev": true, - "requires": { - "@smithy/fetch-http-handler": "^5.3.8", - "@smithy/node-http-handler": "^4.4.7", - "@smithy/types": "^4.11.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", + "version": "4.5.25", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.25.tgz", + "integrity": "sha512-/PFpG4k8Ze8Ei+mMKj3oiPICYekthuzePZMgZbCqMiXIHHf4n2aZ4Ps0aSRShycFTGuj/J6XldmC0x0DwednIA==", + "dev": true, + "requires": { + "@smithy/fetch-http-handler": "^5.3.17", + "@smithy/node-http-handler": "^4.6.1", + "@smithy/types": "^4.14.1", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-hex-encoding": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@smithy/util-uri-escape": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", - "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz", + "integrity": "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==", "dev": true, "requires": { "tslib": "^2.6.2" } }, "@smithy/util-utf8": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", - "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", + "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", "dev": true, "requires": { - "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" } }, "@smithy/util-waiter": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.7.tgz", - "integrity": "sha512-vHJFXi9b7kUEpHWUCY3Twl+9NPOZvQ0SAi+Ewtn48mbiJk4JY9MZmKQjGB4SCvVb9WPiSphZJYY6RIbs+grrzw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.3.0.tgz", + "integrity": "sha512-JyjYmLAfS+pdxF92o4yLgEoy0zhayKTw73FU1aofLWwLcJw7iSqIY2exGmMTrl/lmZugP5p/zxdFSippJDfKWA==", "dev": true, "requires": { - "@smithy/abort-controller": "^4.2.7", - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.14.1", "tslib": "^2.6.2" } }, "@smithy/uuid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", - "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.2.tgz", + "integrity": "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==", "dev": true, "requires": { "tslib": "^2.6.2" @@ -12311,14 +12665,14 @@ } }, "axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz", + "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==", "dev": true, "requires": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" } }, "balanced-match": { @@ -12376,15 +12730,15 @@ "dev": true }, "bn.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", "dev": true }, "bowser": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", - "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", "dev": true }, "boxen": { @@ -12412,9 +12766,9 @@ } }, "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -12510,6 +12864,12 @@ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, + "c3-linearization": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/c3-linearization/-/c3-linearization-0.3.0.tgz", + "integrity": "sha512-eQNsZQhFSJAhrNrITy2FpKh7EHS98q/pniDtQhndWqqsvayiPeqZ9T6I9V9PsHcm0nc+ZYJHKUvI/hh37I33HQ==", + "dev": true + }, "call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -12921,9 +13281,9 @@ "dev": true }, "diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", "dev": true }, "dir-glob": { @@ -12977,9 +13337,9 @@ }, "dependencies": { "bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "dev": true } } @@ -13558,13 +13918,26 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-xml-builder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", + "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", + "dev": true, + "requires": { + "path-expression-matcher": "^1.5.0", + "xml-naming": "^0.1.0" + } + }, "fast-xml-parser": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", - "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz", + "integrity": "sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==", "dev": true, "requires": { - "strnum": "^2.1.0" + "@nodable/entities": "^2.1.0", + "fast-xml-builder": "^1.1.5", + "path-expression-matcher": "^1.5.0", + "strnum": "^2.2.3" } }, "fastq": { @@ -13681,9 +14054,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true }, "for-each": { @@ -13810,9 +14183,9 @@ }, "dependencies": { "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -13878,15 +14251,24 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "graphviz": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz", + "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==", + "dev": true, + "requires": { + "temp": "~0.4.0" + } + }, "hardhat": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.0.tgz", - "integrity": "sha512-A3yBISI18EcnY2IR7Ny2xZF33Q3qH01yrWapeWbyGOiJm/386SasWjbHRHYgUlZ3YWJETIMh7wYfMUaXrofTDQ==", + "version": "2.28.6", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.6.tgz", + "integrity": "sha512-zQze7qe+8ltwHvhX5NQ8sN1N37WWZGw8L63y+2XcPxGwAjc/SMF829z3NS6o1krX0sryhAsVBK/xrwUqlsot4Q==", "dev": true, "requires": { "@ethereumjs/util": "^9.1.0", "@ethersproject/abi": "^5.1.2", - "@nomicfoundation/edr": "0.12.0-next.17", + "@nomicfoundation/edr": "0.12.0-next.23", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "adm-zip": "^0.4.16", @@ -14153,6 +14535,24 @@ "minimalistic-assert": "^1.0.1" } }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -14259,9 +14659,9 @@ "dev": true }, "immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz", + "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==", "dev": true }, "import-fresh": { @@ -14396,6 +14796,12 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, "is-subdir": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", @@ -14560,9 +14966,9 @@ } }, "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true }, "lodash.isequal": { @@ -14719,12 +15125,12 @@ "dev": true }, "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "requires": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" } }, "minimist": { @@ -14806,9 +15212,9 @@ } }, "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -15122,6 +15528,12 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, + "path-expression-matcher": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", + "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -15173,9 +15585,9 @@ "dev": true }, "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true }, "pify": { @@ -15272,9 +15684,9 @@ } }, "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", "dev": true }, "punycode": { @@ -15284,9 +15696,9 @@ "dev": true }, "qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", "dev": true, "requires": { "side-channel": "^1.1.0" @@ -15444,9 +15856,9 @@ }, "dependencies": { "brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -15468,9 +15880,9 @@ } }, "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -15525,14 +15937,22 @@ "dev": true }, "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", "dev": true, "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", "node-gyp-build": "^4.2.0" + }, + "dependencies": { + "node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "dev": true + } } }, "semver": { @@ -15597,6 +16017,15 @@ "crypt": ">= 0.0.1" } }, + "sha1-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sha1-file/-/sha1-file-2.0.1.tgz", + "integrity": "sha512-L4Kum9Lp8cWqcGKycZcXxR6spUoG4idDIUzAKjPiELnIZWxiFlZ5HFVzFxVxuWuGPsrraeL0JoGk0nFZ7AGFEQ==", + "dev": true, + "requires": { + "hasha": "^5.2.0" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -15847,9 +16276,9 @@ "dev": true }, "strnum": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", - "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz", + "integrity": "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==", "dev": true }, "supports-color": { @@ -15861,6 +16290,64 @@ "has-flag": "^4.0.0" } }, + "surya": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/surya/-/surya-0.4.13.tgz", + "integrity": "sha512-ff2YmkYu9+u9A1tUv6cEuQDhLw1N+++iI+ZenXyhYR7YmaiQ19h32p2VchBn6zy3JPcfpvBZjf/aEmLbSMW1WA==", + "dev": true, + "requires": { + "@solidity-parser/parser": "^0.16.1", + "c3-linearization": "^0.3.0", + "colors": "^1.4.0", + "graphviz": "0.0.9", + "sha1-file": "^2.0.0", + "treeify": "^1.1.0", + "yargs": "^17.0.0" + }, + "dependencies": { + "@solidity-parser/parser": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.2.tgz", + "integrity": "sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==", + "dev": true, + "requires": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, "sync-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", @@ -15881,6 +16368,12 @@ "get-port": "^3.1.0" } }, + "temp": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", + "integrity": "sha512-IsFisGgDKk7qzK9erMIkQe/XwiSUdac7z3wYOsjcLkhPBy3k1SlvLoIh2dAHIlEpgA971CgguMrx9z8fFg7tSA==", + "dev": true + }, "term-size": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", @@ -15952,9 +16445,9 @@ "requires": {} }, "picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true } } @@ -16008,6 +16501,12 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, + "treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "dev": true + }, "tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -16059,9 +16558,9 @@ "dev": true }, "undici": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", - "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.25.0.tgz", + "integrity": "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==", "dev": true }, "undici-types": { @@ -16196,6 +16695,12 @@ "peer": true, "requires": {} }, + "xml-naming": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", + "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", + "dev": true + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -16203,9 +16708,9 @@ "dev": true }, "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "dev": true }, "yargs": { diff --git a/package.json b/package.json index 2ea32b8..65855fa 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "hardhat": "^2.28.0", "hardhat-contract-sizer": "^2.10.0", "hardhat-gas-reporter": "^1.0.9", - "prettier-plugin-solidity": "^2.3.1" + "prettier-plugin-solidity": "^2.3.1", + "surya": "^0.4.13" } } diff --git a/test/common/cmtat/CMTATModuleCommon.js b/test/common/cmtat/CMTATModuleCommon.js index f97290b..dbc1340 100644 --- a/test/common/cmtat/CMTATModuleCommon.js +++ b/test/common/cmtat/CMTATModuleCommon.js @@ -23,13 +23,16 @@ const SnapshotModuleZeroPlannedSnapshotTest = require('../../../submodules/CMTAT * this.policyEngine, this.rbacPolicy, this.rbacPolicyAddress, this.cmtatAddress * this.mintSelector, this.burnSelector */ -function CMTATModuleCommon() { +function CMTATModuleCommon(includeSnapshotModules = true, snapshotZeroDefault = true) { ERC20BaseCommon(); MintModuleCommon(); BurnModuleCommon(); ERC20EnforcementCommon(); DocumentModuleCommon(); - SnapshotModuleCommon(); + if (!includeSnapshotModules) { + return; + } + SnapshotModuleCommon(snapshotZeroDefault); // Snapshot scheduling & global (from CMTAT) SnapshotModuleCommonScheduling(); diff --git a/test/common/cmtat/SnapshotModuleCommon.js b/test/common/cmtat/SnapshotModuleCommon.js index a791f10..ff65700 100644 --- a/test/common/cmtat/SnapshotModuleCommon.js +++ b/test/common/cmtat/SnapshotModuleCommon.js @@ -2,7 +2,7 @@ const { expect } = require('chai'); const ZERO_ADDRESS = ethers.ZeroAddress; -function SnapshotModuleCommon() { +function SnapshotModuleCommon(expectZeroDefault = true) { context('Snapshot Engine Module', function () { it('testCanSetSnapshotEngine', async function () { const snapshotEngineMock = await ethers.deployContract('SnapshotEngineMock', [ @@ -23,9 +23,11 @@ function SnapshotModuleCommon() { ).to.be.revertedWithCustomError(this.cmtat, 'CMTAT_SnapshotModule_SameValue'); }); - it('testSnapshotEngineIsZeroByDefault', async function () { - expect(await this.cmtat.snapshotEngine()).to.equal(ZERO_ADDRESS); - }); + if (expectZeroDefault) { + it('testSnapshotEngineIsZeroByDefault', async function () { + expect(await this.cmtat.snapshotEngine()).to.equal(ZERO_ADDRESS); + }); + } }); } diff --git a/test/deployment/liteStandaloneDeployment.test.js b/test/deployment/liteStandaloneDeployment.test.js index 3eb48a1..9baeb2e 100644 --- a/test/deployment/liteStandaloneDeployment.test.js +++ b/test/deployment/liteStandaloneDeployment.test.js @@ -1,4 +1,9 @@ -const { loadFixture, deployCCTLiteStandalone, createLiteFixture } = require('../deploymentUtils'); +const { + loadFixture, + deployCCTLiteStandalone, + createLiteFixture, + createLiteFixtureWithSnapshot, +} = require('../deploymentUtils'); // Reuse CMTAT common modules const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon'); @@ -23,40 +28,41 @@ const SnapshotModuleOnePlannedSnapshotTest = require('../../submodules/CMTAT/tes const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot'); const liteFixture = createLiteFixture(deployCCTLiteStandalone); +const liteFixtureWithSnapshot = createLiteFixtureWithSnapshot(deployCCTLiteStandalone); describe('ComplianceTokenCMTATLiteStandalone', function () { - beforeEach(async function () { - Object.assign(this, await loadFixture(liteFixture)); - }); - - // Core CMTAT commons - VersionModuleCommon(); - PauseModuleCommon(); - ERC20MintModuleCommon(); - ERC20BurnModuleCommon(); - ERC20BaseModuleCommon(); - EnforcementModuleCommon(); - - // Extensions - ERC20EnforcementModuleCommon(); + context('snapshotEngine = 0 (no snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(liteFixture)); + this.dontCheckTimestamp = true; + }); - // options - ERC20CrossChainModuleCommon(); - CCIPModuleCommon(); - - // Extensions - ExtraInfoModuleCommon(); + VersionModuleCommon(); + PauseModuleCommon(); + ERC20MintModuleCommon(); + ERC20BurnModuleCommon(); + ERC20BaseModuleCommon(); + EnforcementModuleCommon(); + ERC20EnforcementModuleCommon(); + ERC20CrossChainModuleCommon(); + CCIPModuleCommon(); + ExtraInfoModuleCommon(); + DocumentModuleCommon(); + }); - // Engines - DocumentModuleCommon(); - SnapshotModuleCommon(); + context('snapshotEngine is set (snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(liteFixtureWithSnapshot)); + this.dontCheckTimestamp = true; + }); - // Snapshot scheduling & global - SnapshotModuleCommonScheduling(); - SnapshotModuleCommonRescheduling(); - SnapshotModuleCommonUnschedule(); - SnapshotModuleCommonGetNextSnapshot(); - SnapshotModuleMultiplePlannedTest(); - SnapshotModuleOnePlannedSnapshotTest(); - SnapshotModuleZeroPlannedSnapshotTest(); + SnapshotModuleCommon(false); + SnapshotModuleCommonScheduling(); + SnapshotModuleCommonRescheduling(); + SnapshotModuleCommonUnschedule(); + SnapshotModuleCommonGetNextSnapshot(); + SnapshotModuleMultiplePlannedTest(); + SnapshotModuleOnePlannedSnapshotTest(); + SnapshotModuleZeroPlannedSnapshotTest(); + }); }); diff --git a/test/deployment/liteUUPSUpgradeableDeployment.test.js b/test/deployment/liteUUPSUpgradeableDeployment.test.js index 0165bee..3399ee2 100644 --- a/test/deployment/liteUUPSUpgradeableDeployment.test.js +++ b/test/deployment/liteUUPSUpgradeableDeployment.test.js @@ -4,6 +4,7 @@ const { loadFixture, deployCCTLiteUUPSUpgradeable, createLiteFixture, + createLiteFixtureWithSnapshot, } = require('../deploymentUtils'); // Reuse CMTAT common modules @@ -31,117 +32,110 @@ const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/te const PROXY_UPGRADE_ROLE = ethers.keccak256(ethers.toUtf8Bytes('PROXY_UPGRADE_ROLE')); const liteFixture = createLiteFixture(deployCCTLiteUUPSUpgradeable); +const liteFixtureWithSnapshot = createLiteFixtureWithSnapshot(deployCCTLiteUUPSUpgradeable); describe('ComplianceTokenCMTATLiteUUPSUpgradeable', function () { - beforeEach(async function () { - Object.assign(this, await loadFixture(liteFixture)); - }); - - // UUPS proxy-specific - context('Re-initialization', function () { - it('testCannotBeReinitialized', async function () { - const policyEngineAddress = await this.policyEngine.getAddress(); - await expect( - this.cmtat - .connect(this.admin) - .initialize( - this.admin.address, - ['CMTA Token', 'CMTAT', 0], - [ - 'CMTAT_ISIN', - ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], - 'CMTAT_info', - ], - policyEngineAddress, - ethers.ZeroAddress, - ethers.ZeroAddress, - ), - ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); + context('snapshotEngine = 0 (no snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(liteFixture)); + this.dontCheckTimestamp = true; }); - }); - context('UUPS Upgrade', function () { - it('testAdminWithRoleCanUpgrade', async function () { - // Grant PROXY_UPGRADE_ROLE to admin - await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address); - - const FactoryV2 = await ethers.getContractFactory( - 'ComplianceTokenCMTATLiteUUPSUpgradeable', - this.admin, - ); - await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { - unsafeAllow: ['missing-initializer', 'constructor'], - silenceWarnings: true, - kind: 'uups', + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + const policyEngineAddress = await this.policyEngine.getAddress(); + await expect( + this.cmtat + .connect(this.admin) + .initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + [ + 'CMTAT_ISIN', + ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], + 'CMTAT_info', + ], + policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress, + ), + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); }); }); - it('testCannotUpgradeWithoutProxyUpgradeRole', async function () { - const FactoryV2 = await ethers.getContractFactory( - 'ComplianceTokenCMTATLiteUUPSUpgradeable', - this.attacker, - ); - await expect( - upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + context('UUPS Upgrade', function () { + it('testAdminWithRoleCanUpgrade', async function () { + await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address); + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATLiteUUPSUpgradeable', + this.admin, + ); + await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', - }), - ).to.be.revertedWithCustomError(this.cmtat, 'AccessControlUnauthorizedAccount'); - }); - - it('testStatePreservedAfterUpgrade', async function () { - // Mint some tokens before upgrade - await this.cmtat.connect(this.admin).mint(this.address1.address, 100n); - expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n); + }); + }); - // Grant upgrade role and upgrade - await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address); - const FactoryV2 = await ethers.getContractFactory( - 'ComplianceTokenCMTATLiteUUPSUpgradeable', - this.admin, - ); - const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { - unsafeAllow: ['missing-initializer', 'constructor'], - silenceWarnings: true, - kind: 'uups', + it('testCannotUpgradeWithoutProxyUpgradeRole', async function () { + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATLiteUUPSUpgradeable', + this.attacker, + ); + await expect( + upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups', + }), + ).to.be.revertedWithCustomError(this.cmtat, 'AccessControlUnauthorizedAccount'); }); - // Verify state preserved - expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n); - expect(await upgraded.name()).to.equal('CMTA Token'); - expect(await upgraded.symbol()).to.equal('CMTAT'); + it('testStatePreservedAfterUpgrade', async function () { + await this.cmtat.connect(this.admin).mint(this.address1.address, 100n); + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n); + await this.cmtat.connect(this.admin).grantRole(PROXY_UPGRADE_ROLE, this.admin.address); + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATLiteUUPSUpgradeable', + this.admin, + ); + const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups', + }); + expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n); + expect(await upgraded.name()).to.equal('CMTA Token'); + expect(await upgraded.symbol()).to.equal('CMTAT'); + }); }); - }); - - // Core CMTAT commons - VersionModuleCommon(); - PauseModuleCommon(); - ERC20MintModuleCommon(); - ERC20BurnModuleCommon(); - ERC20BaseModuleCommon(); - EnforcementModuleCommon(); - - // Extensions - ERC20EnforcementModuleCommon(); - // options - ERC20CrossChainModuleCommon(); - CCIPModuleCommon(); - - // Extensions - ExtraInfoModuleCommon(); + VersionModuleCommon(); + PauseModuleCommon(); + ERC20MintModuleCommon(); + ERC20BurnModuleCommon(); + ERC20BaseModuleCommon(); + EnforcementModuleCommon(); + ERC20EnforcementModuleCommon(); + ERC20CrossChainModuleCommon(); + CCIPModuleCommon(); + ExtraInfoModuleCommon(); + DocumentModuleCommon(); + }); - // Engines - DocumentModuleCommon(); - SnapshotModuleCommon(); + context('snapshotEngine is set (snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(liteFixtureWithSnapshot)); + this.dontCheckTimestamp = true; + }); - // Snapshot scheduling & global - SnapshotModuleCommonScheduling(); - SnapshotModuleCommonRescheduling(); - SnapshotModuleCommonUnschedule(); - SnapshotModuleCommonGetNextSnapshot(); - SnapshotModuleMultiplePlannedTest(); - SnapshotModuleOnePlannedSnapshotTest(); - SnapshotModuleZeroPlannedSnapshotTest(); + SnapshotModuleCommon(false); + SnapshotModuleCommonScheduling(); + SnapshotModuleCommonRescheduling(); + SnapshotModuleCommonUnschedule(); + SnapshotModuleCommonGetNextSnapshot(); + SnapshotModuleMultiplePlannedTest(); + SnapshotModuleOnePlannedSnapshotTest(); + SnapshotModuleZeroPlannedSnapshotTest(); + }); }); diff --git a/test/deployment/liteUpgradeableDeployment.test.js b/test/deployment/liteUpgradeableDeployment.test.js index 99390bf..6bbba7a 100644 --- a/test/deployment/liteUpgradeableDeployment.test.js +++ b/test/deployment/liteUpgradeableDeployment.test.js @@ -1,6 +1,11 @@ const { ethers } = require('hardhat'); const { expect } = require('chai'); -const { loadFixture, deployCCTLiteUpgradeable, createLiteFixture } = require('../deploymentUtils'); +const { + loadFixture, + deployCCTLiteUpgradeable, + createLiteFixture, + createLiteFixtureWithSnapshot, +} = require('../deploymentUtils'); // Reuse CMTAT common modules const PauseModuleCommon = require('../../submodules/CMTAT/test/common/PauseModuleCommon'); @@ -25,63 +30,63 @@ const SnapshotModuleOnePlannedSnapshotTest = require('../../submodules/CMTAT/tes const SnapshotModuleZeroPlannedSnapshotTest = require('../../submodules/CMTAT/test/common/SnapshotModuleCommon/global/SnapshotModuleZeroPlannedSnapshot'); const liteFixture = createLiteFixture(deployCCTLiteUpgradeable); +const liteFixtureWithSnapshot = createLiteFixtureWithSnapshot(deployCCTLiteUpgradeable); describe('ComplianceTokenCMTATLiteUpgradeable', function () { - beforeEach(async function () { - Object.assign(this, await loadFixture(liteFixture)); - }); - - // Proxy-specific - context('Re-initialization', function () { - it('testCannotBeReinitialized', async function () { - const policyEngineAddress = await this.policyEngine.getAddress(); - await expect( - this.cmtat - .connect(this.admin) - .initialize( - this.admin.address, - ['CMTA Token', 'CMTAT', 0], - [ - 'CMTAT_ISIN', - ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], - 'CMTAT_info', - ], - policyEngineAddress, - ethers.ZeroAddress, - ethers.ZeroAddress, - ), - ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); + context('snapshotEngine = 0 (no snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(liteFixture)); + this.dontCheckTimestamp = true; }); - }); - - // Core CMTAT commons - VersionModuleCommon(); - PauseModuleCommon(); - ERC20MintModuleCommon(); - ERC20BurnModuleCommon(); - ERC20BaseModuleCommon(); - EnforcementModuleCommon(); - - // Extensions - ERC20EnforcementModuleCommon(); - // options - ERC20CrossChainModuleCommon(); - CCIPModuleCommon(); + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + const policyEngineAddress = await this.policyEngine.getAddress(); + await expect( + this.cmtat + .connect(this.admin) + .initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + [ + 'CMTAT_ISIN', + ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], + 'CMTAT_info', + ], + policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress, + ), + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); + }); + }); - // Extensions - ExtraInfoModuleCommon(); + VersionModuleCommon(); + PauseModuleCommon(); + ERC20MintModuleCommon(); + ERC20BurnModuleCommon(); + ERC20BaseModuleCommon(); + EnforcementModuleCommon(); + ERC20EnforcementModuleCommon(); + ERC20CrossChainModuleCommon(); + CCIPModuleCommon(); + ExtraInfoModuleCommon(); + DocumentModuleCommon(); + }); - // Engines - DocumentModuleCommon(); - SnapshotModuleCommon(); + context('snapshotEngine is set (snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(liteFixtureWithSnapshot)); + this.dontCheckTimestamp = true; + }); - // Snapshot scheduling & global - SnapshotModuleCommonScheduling(); - SnapshotModuleCommonRescheduling(); - SnapshotModuleCommonUnschedule(); - SnapshotModuleCommonGetNextSnapshot(); - SnapshotModuleMultiplePlannedTest(); - SnapshotModuleOnePlannedSnapshotTest(); - SnapshotModuleZeroPlannedSnapshotTest(); + SnapshotModuleCommon(false); + SnapshotModuleCommonScheduling(); + SnapshotModuleCommonRescheduling(); + SnapshotModuleCommonUnschedule(); + SnapshotModuleCommonGetNextSnapshot(); + SnapshotModuleMultiplePlannedTest(); + SnapshotModuleOnePlannedSnapshotTest(); + SnapshotModuleZeroPlannedSnapshotTest(); + }); }); diff --git a/test/deployment/standaloneDeployment.test.js b/test/deployment/standaloneDeployment.test.js index 40e0e3b..33cadc3 100644 --- a/test/deployment/standaloneDeployment.test.js +++ b/test/deployment/standaloneDeployment.test.js @@ -1,4 +1,9 @@ -const { loadFixture, deployCCTStandalone, createStandardFixture } = require('../deploymentUtils'); +const { + loadFixture, + deployCCTStandalone, + createStandardFixture, + createStandardFixtureWithSnapshot, +} = require('../deploymentUtils'); // ACE-specific common modules const DeploymentCommon = require('../common/ace/DeploymentCommon'); @@ -9,16 +14,28 @@ const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon'); const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon'); const standardFixture = createStandardFixture(deployCCTStandalone); +const standardFixtureWithSnapshot = createStandardFixtureWithSnapshot(deployCCTStandalone); describe('ComplianceTokenCMTATStandalone', function () { - beforeEach(async function () { - Object.assign(this, await loadFixture(standardFixture)); + context('snapshotEngine = 0 (no snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(standardFixture)); + this.dontCheckTimestamp = true; + }); + + DeploymentCommon(); + PausePolicyCommon(); + RBACPolicyCommon(); + CombinedPolicyCommon(); + PolicyEngineCommon(); + CMTATModuleCommon(false); }); - DeploymentCommon(); - PausePolicyCommon(); - RBACPolicyCommon(); - CombinedPolicyCommon(); - PolicyEngineCommon(); - CMTATModuleCommon(); + context('snapshotEngine is set (snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(standardFixtureWithSnapshot)); + this.dontCheckTimestamp = true; + }); + CMTATModuleCommon(true, false); + }); }); diff --git a/test/deployment/upgradeableDeployment.test.js b/test/deployment/upgradeableDeployment.test.js index 2c96ad3..36310d4 100644 --- a/test/deployment/upgradeableDeployment.test.js +++ b/test/deployment/upgradeableDeployment.test.js @@ -1,6 +1,11 @@ const { ethers } = require('hardhat'); const { expect } = require('chai'); -const { loadFixture, deployCCTUpgradeable, createStandardFixture } = require('../deploymentUtils'); +const { + loadFixture, + deployCCTUpgradeable, + createStandardFixture, + createStandardFixtureWithSnapshot, +} = require('../deploymentUtils'); // ACE-specific common modules const DeploymentCommon = require('../common/ace/DeploymentCommon'); @@ -11,38 +16,49 @@ const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon'); const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon'); const standardFixture = createStandardFixture(deployCCTUpgradeable); +const standardFixtureWithSnapshot = createStandardFixtureWithSnapshot(deployCCTUpgradeable); describe('ComplianceTokenCMTATUpgradeable', function () { - beforeEach(async function () { - Object.assign(this, await loadFixture(standardFixture)); - }); + context('snapshotEngine = 0 (no snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(standardFixture)); + this.dontCheckTimestamp = true; + }); - // Proxy-specific - context('Re-initialization', function () { - it('testCannotBeReinitialized', async function () { - await expect( - this.cmtat - .connect(this.admin) - .initialize( - this.admin.address, - ['CMTA Token', 'CMTAT', 0], - [ - 'CMTAT_ISIN', - ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], - 'CMTAT_info', - ], - this.policyEngineAddress, - ethers.ZeroAddress, - ethers.ZeroAddress, - ), - ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + await expect( + this.cmtat + .connect(this.admin) + .initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + [ + 'CMTAT_ISIN', + ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], + 'CMTAT_info', + ], + this.policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress, + ), + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); + }); }); + + DeploymentCommon(); + PausePolicyCommon(); + RBACPolicyCommon(); + CombinedPolicyCommon(); + PolicyEngineCommon(); + CMTATModuleCommon(false); }); - DeploymentCommon(); - PausePolicyCommon(); - RBACPolicyCommon(); - CombinedPolicyCommon(); - PolicyEngineCommon(); - CMTATModuleCommon(); + context('snapshotEngine is set (snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(standardFixtureWithSnapshot)); + this.dontCheckTimestamp = true; + }); + CMTATModuleCommon(true, false); + }); }); diff --git a/test/deployment/uupsUpgradeableDeployment.test.js b/test/deployment/uupsUpgradeableDeployment.test.js index 8d6f6b6..40d4e72 100644 --- a/test/deployment/uupsUpgradeableDeployment.test.js +++ b/test/deployment/uupsUpgradeableDeployment.test.js @@ -4,6 +4,7 @@ const { loadFixture, deployCCTUUPSUpgradeable, createStandardFixture, + createStandardFixtureWithSnapshot, } = require('../deploymentUtils'); // ACE-specific common modules @@ -15,88 +16,96 @@ const PolicyEngineCommon = require('../common/ace/PolicyEngineCommon'); const CMTATModuleCommon = require('../common/cmtat/CMTATModuleCommon'); const standardFixture = createStandardFixture(deployCCTUUPSUpgradeable); +const standardFixtureWithSnapshot = createStandardFixtureWithSnapshot(deployCCTUUPSUpgradeable); describe('ComplianceTokenCMTATUUPSUpgradeable', function () { - beforeEach(async function () { - Object.assign(this, await loadFixture(standardFixture)); - }); - - // UUPS proxy-specific - context('Re-initialization', function () { - it('testCannotBeReinitialized', async function () { - await expect( - this.cmtat - .connect(this.admin) - .initialize( - this.admin.address, - ['CMTA Token', 'CMTAT', 0], - [ - 'CMTAT_ISIN', - ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], - 'CMTAT_info', - ], - this.policyEngineAddress, - ethers.ZeroAddress, - ethers.ZeroAddress, - ), - ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); + context('snapshotEngine = 0 (no snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(standardFixture)); + this.dontCheckTimestamp = true; }); - }); - context('UUPS Upgrade', function () { - it('testOwnerCanUpgrade', async function () { - const FactoryV2 = await ethers.getContractFactory( - 'ComplianceTokenCMTATUUPSUpgradeable', - this.admin, - ); - await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { - unsafeAllow: ['missing-initializer', 'constructor'], - silenceWarnings: true, - kind: 'uups', + context('Re-initialization', function () { + it('testCannotBeReinitialized', async function () { + await expect( + this.cmtat + .connect(this.admin) + .initialize( + this.admin.address, + ['CMTA Token', 'CMTAT', 0], + [ + 'CMTAT_ISIN', + ['doc1', 'https://example.com/doc1', ethers.keccak256(ethers.toUtf8Bytes('h'))], + 'CMTAT_info', + ], + this.policyEngineAddress, + ethers.ZeroAddress, + ethers.ZeroAddress, + ), + ).to.be.revertedWithCustomError(this.cmtat, 'InvalidInitialization'); }); }); - it('testNonOwnerCannotUpgrade', async function () { - const FactoryV2 = await ethers.getContractFactory( - 'ComplianceTokenCMTATUUPSUpgradeable', - this.attacker, - ); - await expect( - upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + context('UUPS Upgrade', function () { + it('testOwnerCanUpgrade', async function () { + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATUUPSUpgradeable', + this.admin, + ); + await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { unsafeAllow: ['missing-initializer', 'constructor'], silenceWarnings: true, kind: 'uups', - }), - ).to.be.revertedWithCustomError(this.cmtat, 'OwnableUnauthorizedAccount'); - }); - - it('testStatePreservedAfterUpgrade', async function () { - // Mint some tokens before upgrade - await this.cmtat.connect(this.admin).mint(this.address1.address, 100n); - expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n); + }); + }); - // Upgrade - const FactoryV2 = await ethers.getContractFactory( - 'ComplianceTokenCMTATUUPSUpgradeable', - this.admin, - ); - const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { - unsafeAllow: ['missing-initializer', 'constructor'], - silenceWarnings: true, - kind: 'uups', + it('testNonOwnerCannotUpgrade', async function () { + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATUUPSUpgradeable', + this.attacker, + ); + await expect( + upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups', + }), + ).to.be.revertedWithCustomError(this.cmtat, 'OwnableUnauthorizedAccount'); }); - // Verify state preserved - expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n); - expect(await upgraded.name()).to.equal('CMTA Token'); - expect(await upgraded.symbol()).to.equal('CMTAT'); + it('testStatePreservedAfterUpgrade', async function () { + await this.cmtat.connect(this.admin).mint(this.address1.address, 100n); + expect(await this.cmtat.balanceOf(this.address1.address)).to.equal(100n); + + const FactoryV2 = await ethers.getContractFactory( + 'ComplianceTokenCMTATUUPSUpgradeable', + this.admin, + ); + const upgraded = await upgrades.upgradeProxy(await this.cmtat.getAddress(), FactoryV2, { + unsafeAllow: ['missing-initializer', 'constructor'], + silenceWarnings: true, + kind: 'uups', + }); + + expect(await upgraded.balanceOf(this.address1.address)).to.equal(100n); + expect(await upgraded.name()).to.equal('CMTA Token'); + expect(await upgraded.symbol()).to.equal('CMTAT'); + }); }); + + DeploymentCommon(); + PausePolicyCommon(); + RBACPolicyCommon(); + CombinedPolicyCommon(); + PolicyEngineCommon(); + CMTATModuleCommon(false); }); - DeploymentCommon(); - PausePolicyCommon(); - RBACPolicyCommon(); - CombinedPolicyCommon(); - PolicyEngineCommon(); - CMTATModuleCommon(); + context('snapshotEngine is set (snapshot suites)', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(standardFixtureWithSnapshot)); + this.dontCheckTimestamp = true; + }); + CMTATModuleCommon(true, false); + }); }); diff --git a/test/deploymentUtils.js b/test/deploymentUtils.js index b5fec88..3045945 100644 --- a/test/deploymentUtils.js +++ b/test/deploymentUtils.js @@ -403,6 +403,33 @@ function createStandardFixture(deployTokenFn) { }; } +async function withSnapshotEngine(baseFixture) { + const cmtatAddress = baseFixture.cmtatAddress ?? (await baseFixture.cmtat.getAddress()); + const transferEngineMock = await ethers.deployContract('SnapshotEngineMock', [ + cmtatAddress, + baseFixture.admin.address, + ]); + await transferEngineMock.waitForDeployment(); + await ( + await baseFixture.cmtat + .connect(baseFixture.admin) + .setSnapshotEngine(await transferEngineMock.getAddress()) + ).wait(); + return { + ...baseFixture, + cmtatAddress, + transferEngineMock, + }; +} + +function createStandardFixtureWithSnapshot(deployTokenFn) { + const baseFactory = createStandardFixture(deployTokenFn); + return async function standardFixtureWithSnapshot() { + const base = await baseFactory(); + return withSnapshotEngine(base); + }; +} + /** * Creates a fixture for lite (AccessControl + PolicyEngine for validation) deployment tests. * Deploys just the PolicyEngine and token; no PausePolicy or RBAC needed. @@ -441,6 +468,14 @@ function createLiteFixture(deployTokenFn) { }; } +function createLiteFixtureWithSnapshot(deployTokenFn) { + const baseFactory = createLiteFixture(deployTokenFn); + return async function liteFixtureWithSnapshot() { + const base = await baseFactory(); + return withSnapshotEngine(base); + }; +} + module.exports = { ZERO_ADDRESS, DEPLOYMENT_DECIMAL, @@ -468,5 +503,7 @@ module.exports = { deployCCTLiteUpgradeable, deployCCTLiteUUPSUpgradeable, createStandardFixture, + createStandardFixtureWithSnapshot, createLiteFixture, + createLiteFixtureWithSnapshot, }; From abf4a8073ed62a9724ec57909d80810a526f21b0 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Tue, 12 May 2026 10:55:10 +0200 Subject: [PATCH 47/57] Update github workflow to install foundry --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bf5c3a3..decdd94 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,12 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2 + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@de808b1eea699e761c404bda44ba8f21aba30b2c #v1.3.1 + with: + version: nightly + + - name: Setup NodeJS 20.5.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 #v4.4.0 with: From 751bf0cc783831805fd79d2fe1f5eba4d1234dc8 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Tue, 12 May 2026 15:49:17 +0200 Subject: [PATCH 48/57] test(coverage): stabilize snapshot timing under coverage and add targeted tests for PolicyProtected/ValidationModule/ERC1404/CCTCommon uncovered branches --- test/common/ace/DeploymentCommon.js | 44 +++- .../erc1404ValidationAndExtractor.test.js | 191 ++++++++++++++++++ .../custom/policyProtectedUpgradeable.test.js | 131 ++++++++++++ test/custom/transferValidationPolicy.test.js | 46 +++++ ...idationModulePolicyEngine.coverage.test.js | 63 ++++++ 5 files changed, 474 insertions(+), 1 deletion(-) create mode 100644 test/custom/erc1404ValidationAndExtractor.test.js create mode 100644 test/custom/policyProtectedUpgradeable.test.js create mode 100644 test/custom/validationModulePolicyEngine.coverage.test.js diff --git a/test/common/ace/DeploymentCommon.js b/test/common/ace/DeploymentCommon.js index 13cfbc3..27d1122 100644 --- a/test/common/ace/DeploymentCommon.js +++ b/test/common/ace/DeploymentCommon.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); -const { DEPLOYMENT_DECIMAL } = require('../../deploymentUtils'); +const { ethers } = require('hardhat'); +const { DEPLOYMENT_DECIMAL, CROSS_CHAIN_ROLE } = require('../../deploymentUtils'); /** * Basic deployment tests for standard (PolicyEngine-based) contracts. @@ -40,6 +41,47 @@ function DeploymentCommon() { await this.cmtat.connect(this.admin).mint(this.address1, 100n); expect(await this.cmtat.balanceOf(this.address1)).to.equal(100n); }); + + it('testSupportsInterfaceForCrossChainAndPolicyProtected', async function () { + const iPolicyProtected = new ethers.Interface([ + 'function attachPolicyEngine(address policyEngine)', + 'function getPolicyEngine() view returns (address)', + 'function setContext(bytes context)', + 'function getContext() view returns (bytes)', + 'function clearContext()', + ]); + const ierc7802 = new ethers.Interface([ + 'function crosschainMint(address to, uint256 value)', + 'function crosschainBurn(address from, uint256 value)', + ]); + const interfaceId = (iface, names) => { + const value = + names + .map((name) => BigInt(iface.getFunction(name).selector)) + .reduce((acc, selector) => acc ^ selector, 0n) & 0xffffffffn; + return `0x${value.toString(16).padStart(8, '0')}`; + }; + + const policyProtectedId = interfaceId(iPolicyProtected, [ + 'attachPolicyEngine', + 'getPolicyEngine', + 'setContext', + 'getContext', + 'clearContext', + ]); + const ierc7802Id = interfaceId(ierc7802, ['crosschainMint', 'crosschainBurn']); + + expect(await this.cmtat.supportsInterface(ierc7802Id)).to.equal(true); + expect(await this.cmtat.supportsInterface(policyProtectedId)).to.equal(true); + expect(await this.cmtat.supportsInterface('0xffffffff')).to.equal(false); + }); + + it('testCrosschainMintExecutesMinterTransferOverride', async function () { + await this.rbacPolicy.connect(this.admin).grantRole(CROSS_CHAIN_ROLE, this.admin.address); + await this.cmtat.connect(this.admin).crosschainMint(this.address1, 25n); + expect(await this.cmtat.balanceOf(this.address1)).to.equal(25n); + expect(await this.cmtat.totalSupply()).to.equal(25n); + }); }); } diff --git a/test/custom/erc1404ValidationAndExtractor.test.js b/test/custom/erc1404ValidationAndExtractor.test.js new file mode 100644 index 0000000..d987f1c --- /dev/null +++ b/test/custom/erc1404ValidationAndExtractor.test.js @@ -0,0 +1,191 @@ +const { ethers } = require('hardhat'); +const { expect } = require('chai'); +const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers'); +const { fixture, deployPolicyEngine, deployCCTLiteStandalone } = require('../deploymentUtils'); + +describe('ERC1404 validation and MintBurnExtractor coverage', function () { + async function deployLiteFixture() { + const base = await loadFixture(fixture); + const policyEngine = await deployPolicyEngine(true, base.admin.address); + const policyEngineAddress = await policyEngine.getAddress(); + const cmtat = await deployCCTLiteStandalone(base.admin.address, policyEngineAddress); + return { ...base, policyEngine, cmtat }; + } + + describe('PolicyValidationModuleERC1404 / CCTCMTATBaseERC1404', function () { + beforeEach(async function () { + Object.assign(this, await deployLiteFixture()); + await this.cmtat.connect(this.admin).mint(this.address1.address, 100n); + await this.cmtat.connect(this.admin).mint(this.address2.address, 10n); + }); + + it('returns NoRestriction for unrestricted transfer code', async function () { + const code = await this.cmtat.detectTransferRestriction( + this.address1.address, + this.address2.address, + 10n, + ); + expect(code).to.equal(0n); + expect(await this.cmtat.messageForTransferRestriction(code)).to.equal('NoRestriction'); + }); + + it('returns EnforcedPause when paused', async function () { + await this.cmtat.connect(this.admin).pause(); + const code = await this.cmtat.detectTransferRestriction( + this.address1.address, + this.address2.address, + 10n, + ); + expect(await this.cmtat.messageForTransferRestriction(code)).to.equal('EnforcedPause'); + }); + + it('returns ContractDeactivated when deactivated', async function () { + await this.cmtat.connect(this.admin).pause(); + await this.cmtat.connect(this.admin).deactivateContract(); + const code = await this.cmtat.detectTransferRestriction( + this.address1.address, + this.address2.address, + 10n, + ); + expect(await this.cmtat.messageForTransferRestriction(code)).to.equal('ContractDeactivated'); + }); + + it('returns AddrFromIsFrozen when sender is frozen', async function () { + await this.cmtat.connect(this.admin).setAddressFrozen(this.address1.address, true); + const code = await this.cmtat.detectTransferRestriction( + this.address1.address, + this.address2.address, + 10n, + ); + expect(await this.cmtat.messageForTransferRestriction(code)).to.equal('AddrFromIsFrozen'); + }); + + it('returns AddrToIsFrozen when recipient is frozen', async function () { + await this.cmtat.connect(this.admin).setAddressFrozen(this.address2.address, true); + const code = await this.cmtat.detectTransferRestriction( + this.address1.address, + this.address2.address, + 10n, + ); + expect(await this.cmtat.messageForTransferRestriction(code)).to.equal('AddrToIsFrozen'); + }); + + it('returns AddrSpenderIsFrozen for detectTransferRestrictionFrom', async function () { + await this.cmtat.connect(this.admin).setAddressFrozen(this.address3.address, true); + const code = await this.cmtat.detectTransferRestrictionFrom( + this.address3.address, + this.address1.address, + this.address2.address, + 10n, + ); + expect(await this.cmtat.messageForTransferRestriction(code)).to.equal('AddrSpenderIsFrozen'); + }); + + it('returns downstream restriction code in detectTransferRestrictionFrom when spender is not frozen', async function () { + await this.cmtat.connect(this.admin).setAddressFrozen(this.address2.address, true); + const code = await this.cmtat.detectTransferRestrictionFrom( + this.address3.address, + this.address1.address, + this.address2.address, + 10n, + ); + expect(await this.cmtat.messageForTransferRestriction(code)).to.equal('AddrToIsFrozen'); + }); + + it('returns TRANSFER_OK in detectTransferRestrictionFrom when spender and transfer are valid', async function () { + const code = await this.cmtat.detectTransferRestrictionFrom( + this.address3.address, + this.address1.address, + this.address2.address, + 10n, + ); + expect(code).to.equal(0n); + expect(await this.cmtat.messageForTransferRestriction(code)).to.equal('NoRestriction'); + }); + + it('returns insufficient active balance code and message', async function () { + await this.cmtat + .connect(this.admin) + ['freezePartialTokens(address,uint256)'](this.address1.address, 95n); + + const code = await this.cmtat.detectTransferRestriction( + this.address1.address, + this.address2.address, + 20n, + ); + + expect(await this.cmtat.messageForTransferRestriction(code)).to.equal( + 'AddrFrom:insufficientActiveBalance', + ); + }); + + it('returns UnknownCode for arbitrary unsupported code', async function () { + expect(await this.cmtat.messageForTransferRestriction(255)).to.equal('UnknownCode'); + }); + }); + + describe('MintBurnExtractor', function () { + beforeEach(async function () { + Object.assign(this, await loadFixture(fixture)); + this.extractor = await ethers.deployContract('MintBurnExtractor'); + }); + + it('extracts account and amount for mint(address,uint256)', async function () { + const payload = { + selector: '0x40c10f19', + sender: this.admin.address, + data: ethers.AbiCoder.defaultAbiCoder().encode(['address', 'uint256'], [this.address1.address, 123n]), + context: '0x', + }; + + const params = await this.extractor.extract(payload); + expect(params.length).to.equal(2); + expect(params[0].name).to.equal(ethers.keccak256(ethers.toUtf8Bytes('account'))); + expect(ethers.AbiCoder.defaultAbiCoder().decode(['address'], params[0].value)[0]).to.equal( + this.address1.address, + ); + expect(ethers.AbiCoder.defaultAbiCoder().decode(['uint256'], params[1].value)[0]).to.equal(123n); + }); + + it('extracts account and amount for burnFrom(address,uint256)', async function () { + const payload = { + selector: '0x79cc6790', + sender: this.admin.address, + data: ethers.AbiCoder.defaultAbiCoder().encode(['address', 'uint256'], [this.address2.address, 50n]), + context: '0x', + }; + + const params = await this.extractor.extract(payload); + expect(ethers.AbiCoder.defaultAbiCoder().decode(['address'], params[0].value)[0]).to.equal( + this.address2.address, + ); + expect(ethers.AbiCoder.defaultAbiCoder().decode(['uint256'], params[1].value)[0]).to.equal(50n); + }); + + it('uses sender as account for burn(uint256)', async function () { + const payload = { + selector: '0x42966c68', + sender: this.address3.address, + data: ethers.AbiCoder.defaultAbiCoder().encode(['uint256'], [77n]), + context: '0x', + }; + + const params = await this.extractor.extract(payload); + expect(ethers.AbiCoder.defaultAbiCoder().decode(['address'], params[0].value)[0]).to.equal( + this.address3.address, + ); + expect(ethers.AbiCoder.defaultAbiCoder().decode(['uint256'], params[1].value)[0]).to.equal(77n); + }); + + it('reverts on unsupported selector', async function () { + const payload = { + selector: '0x12345678', + sender: this.admin.address, + data: '0x', + context: '0x', + }; + + await expect(this.extractor.extract(payload)).to.be.reverted; + }); + }); +}); diff --git a/test/custom/policyProtectedUpgradeable.test.js b/test/custom/policyProtectedUpgradeable.test.js new file mode 100644 index 0000000..e773072 --- /dev/null +++ b/test/custom/policyProtectedUpgradeable.test.js @@ -0,0 +1,131 @@ +const { expect } = require('chai'); +const { ethers } = require('hardhat'); + +describe('PolicyProtectedUpgradeable', function () { + const iPolicyProtected = new ethers.Interface([ + 'function attachPolicyEngine(address policyEngine)', + 'function getPolicyEngine() view returns (address)', + 'function setContext(bytes context)', + 'function getContext() view returns (bytes)', + 'function clearContext()', + ]); + + const toErrorStringData = (reason) => + ethers.concat([ + '0x08c379a0', + ethers.AbiCoder.defaultAbiCoder().encode(['string'], [reason]), + ]); + + const iPolicyProtectedInterfaceId = (() => { + const selectors = [ + iPolicyProtected.getFunction('attachPolicyEngine').selector, + iPolicyProtected.getFunction('getPolicyEngine').selector, + iPolicyProtected.getFunction('setContext').selector, + iPolicyProtected.getFunction('getContext').selector, + iPolicyProtected.getFunction('clearContext').selector, + ].map((selector) => BigInt(selector)); + const interfaceId = selectors.reduce((acc, selector) => acc ^ selector, 0n) & 0xffffffffn; + return `0x${interfaceId.toString(16).padStart(8, '0')}`; + })(); + + async function deployInitializedHarness() { + const engine = await ethers.deployContract('MockPolicyEngine'); + const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); + await harness.initialize(await engine.getAddress()); + return { engine, harness }; + } + + describe('initialization and attach flow', function () { + it('initializes through __PolicyProtected_init and attaches engine', async function () { + const engine = await ethers.deployContract('MockPolicyEngine'); + const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); + + await expect(harness.initialize(await engine.getAddress())) + .to.emit(harness, 'PolicyEngineAttached') + .withArgs(await engine.getAddress()); + + expect(await harness.getPolicyEngine()).to.equal(await engine.getAddress()); + expect(await engine.attachCalls()).to.equal(1n); + }); + + it('reverts initialize with zero policy engine', async function () { + const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); + await expect(harness.initialize(ethers.ZeroAddress)).to.be.revertedWith('Policy engine is zero address'); + }); + + it('detaches previous engine on attach and emits detach failed if detach reverts', async function () { + const oldEngine = await ethers.deployContract('MockPolicyEngine'); + const newEngine = await ethers.deployContract('MockPolicyEngine'); + const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); + await harness.initialize(await oldEngine.getAddress()); + + await oldEngine.setDetachShouldRevert(true); + + await expect(harness.attachPolicyEngine(await newEngine.getAddress())) + .to.emit(harness, 'PolicyEngineDetachFailed') + .withArgs( + await oldEngine.getAddress(), + toErrorStringData('MockPolicyEngine: detach failed'), + ); + + expect(await harness.getPolicyEngine()).to.equal(await newEngine.getAddress()); + expect(await newEngine.attachCalls()).to.equal(1n); + }); + }); + + describe('policy execution and context', function () { + it('reverts runPolicy when engine is undefined', async function () { + const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); + + await expect(harness.guardedRun()).to.be.reverted; + await expect(harness.guardedRunWithContext('0x1234')).to.be.reverted; + }); + + it('stores, reads and clears sender context through runPolicy cleanup', async function () { + const { engine, harness } = await deployInitializedHarness(); + const context = '0x123456'; + + await harness.setContext(context); + expect(await harness.getContext()).to.equal(context); + + await harness.guardedRun(); + + const payload = await engine.lastPayload(); + expect(payload.context).to.equal(context); + expect(await harness.getContext()).to.equal('0x'); + expect(await harness.counter()).to.equal(1n); + }); + + it('does not clear context when guarded function reverts', async function () { + const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); + const engine = await ethers.deployContract('MockPolicyEngine'); + await harness.initialize(await engine.getAddress()); + + await harness.setContext('0xabcd'); + await expect(harness.guardedRunAndRevert()).to.be.revertedWithCustomError(harness, 'ForcedRevert'); + expect(await harness.getContext()).to.equal('0xabcd'); + + await harness.clearContext(); + expect(await harness.getContext()).to.equal('0x'); + }); + + it('passes explicit context through runPolicyWithContext', async function () { + const { engine, harness } = await deployInitializedHarness(); + const runContext = '0xdeadbeef'; + + await harness.guardedRunWithContext(runContext); + + const payload = await engine.lastPayload(); + expect(payload.context).to.equal(runContext); + expect(await harness.counter()).to.equal(1n); + }); + }); + + describe('ERC165', function () { + it('supports IPolicyProtected and rejects unknown interface', async function () { + const { harness } = await deployInitializedHarness(); + expect(await harness.supportsInterface(iPolicyProtectedInterfaceId)).to.equal(true); + expect(await harness.supportsInterface('0xffffffff')).to.equal(false); + }); + }); +}); diff --git a/test/custom/transferValidationPolicy.test.js b/test/custom/transferValidationPolicy.test.js index d0c4183..0a813a6 100644 --- a/test/custom/transferValidationPolicy.test.js +++ b/test/custom/transferValidationPolicy.test.js @@ -439,6 +439,52 @@ describe('TransferValidationPolicy', function () { }); }); + describe('Direct run() parameter layouts', function () { + beforeEach(async function () { + this.maxAmountRule = await ethers.deployContract('MaxAmountRule', [100n]); + this.transferPolicy = await deployTransferValidationPolicy( + this.policyEngineAddress, + this.admin.address, + [await this.maxAmountRule.getAddress()], + ); + }); + + it('covers 3-parameter layout branch and allows transfer within max', async function () { + const params = [ + ethers.AbiCoder.defaultAbiCoder().encode(['address'], [this.admin.address]), + ethers.AbiCoder.defaultAbiCoder().encode(['address'], [this.address1.address]), + ethers.AbiCoder.defaultAbiCoder().encode(['uint256'], [50n]), + ]; + + const result = await this.transferPolicy.run( + this.admin.address, + this.cmtatAddress, + this.transferSelector, + params, + '0x', + ); + expect(result).to.equal(2); // PolicyResult.Continue + }); + + it('covers 3-parameter layout branch and rejects transfer above max', async function () { + const params = [ + ethers.AbiCoder.defaultAbiCoder().encode(['address'], [this.admin.address]), + ethers.AbiCoder.defaultAbiCoder().encode(['address'], [this.address1.address]), + ethers.AbiCoder.defaultAbiCoder().encode(['uint256'], [101n]), + ]; + + await expect( + this.transferPolicy.run( + this.admin.address, + this.cmtatAddress, + this.transferSelector, + params, + '0x', + ), + ).to.be.reverted; + }); + }); + describe('No policy attached (defaultAllow = true)', function () { it('should allow transfers when no policy is registered for transfer selector', async function () { // PolicyEngine has defaultAllow = true and no policy for transfer diff --git a/test/custom/validationModulePolicyEngine.coverage.test.js b/test/custom/validationModulePolicyEngine.coverage.test.js new file mode 100644 index 0000000..d3d8e78 --- /dev/null +++ b/test/custom/validationModulePolicyEngine.coverage.test.js @@ -0,0 +1,63 @@ +const { expect } = require('chai'); +const { ethers } = require('hardhat'); + +describe('ValidationModulePolicyEngine coverage branches', function () { + beforeEach(async function () { + [this.deployer, this.address1, this.address2, this.address3] = await ethers.getSigners(); + }); + + it('returns true in _tryCheckPolicies when no policy engine is attached', async function () { + const harness = await ethers.deployContract('ValidationModulePolicyEngineHarness'); + + const ok = await harness.exposedTryCheckPolicies( + '0xa9059cbb', + this.address1.address, + ethers.AbiCoder.defaultAbiCoder().encode(['address', 'uint256'], [this.address2.address, 1n]), + ); + + expect(ok).to.equal(true); + }); + + it('returns true in _transferred when no policy engine is attached', async function () { + const harness = await ethers.deployContract('ValidationModulePolicyEngineHarness'); + + const ok = await harness.exposedTransferred.staticCall( + this.address1.address, + this.address2.address, + this.address3.address, + 0n, + ); + + expect(ok).to.equal(true); + }); + + it('clears non-empty context after _transferred when policy engine is attached', async function () { + const engine = await ethers.deployContract('MockPolicyEngine'); + const harness = await ethers.deployContract('ValidationModulePolicyEngineHarness'); + await harness.initializeWithPolicyEngine(await engine.getAddress()); + + await harness.setContext('0x1234'); + expect(await harness.getContext()).to.equal('0x1234'); + + const ok = await harness.exposedTransferred.staticCall( + this.address1.address, + this.address2.address, + this.address3.address, + 0n, + ); + + expect(ok).to.equal(true); + + await harness.exposedTransferred( + this.address1.address, + this.address2.address, + this.address3.address, + 0n, + ); + + expect(await harness.getContext()).to.equal('0x'); + + const payload = await engine.lastPayload(); + expect(payload.context).to.equal('0x1234'); + }); +}); From 8f587a22cc4020f935e259f4afc6e2b0e6ab9b89 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Tue, 12 May 2026 15:52:29 +0200 Subject: [PATCH 49/57] Pin library to specific version (no floating pragma) + install coverage plugin --- hardhat.config.js | 1 + package-lock.json | 8628 ++++++--------------------------------------- package.json | 9 +- 3 files changed, 1129 insertions(+), 7509 deletions(-) diff --git a/hardhat.config.js b/hardhat.config.js index f793997..ea5798f 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,6 +1,7 @@ require('@nomicfoundation/hardhat-foundry'); require('@nomicfoundation/hardhat-chai-matchers'); require('@openzeppelin/hardhat-upgrades'); +require('solidity-coverage') const { silenceWarnings } = require('@openzeppelin/upgrades-core'); silenceWarnings(); diff --git a/package-lock.json b/package-lock.json index e148a4f..65887c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,20 +1,23 @@ { "name": "cmtat-ace", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cmtat-ace", "version": "1.0.0", + "dependencies": { + "solidity-coverage": "^0.8.17" + }, "devDependencies": { - "@chainlink/ace": "^1.0.0", + "@chainlink/ace": "1.0.0", "@chainlink/contracts": "1.3.0", "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", "@nomicfoundation/hardhat-foundry": "^1.2.1", "@nomicfoundation/hardhat-network-helpers": "^1.1.2", - "@openzeppelin/contracts": "5.5.0", - "@openzeppelin/contracts-upgradeable": "5.5.0", + "@openzeppelin/contracts": "5.6.1", + "@openzeppelin/contracts-upgradeable": "5.6.1", "@openzeppelin/hardhat-upgrades": "^3.2.0", "@openzeppelin/upgrades-core": "^1.44.1", "eslint": "^8.57.1", @@ -1336,7 +1339,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", - "dev": true, "bin": { "rlp": "bin/rlp.cjs" }, @@ -1348,7 +1350,6 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", - "dev": true, "dependencies": { "@ethereumjs/rlp": "^5.0.2", "ethereum-cryptography": "^2.2.1" @@ -1361,7 +1362,6 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, "dependencies": { "@noble/hashes": "1.4.0" }, @@ -1373,7 +1373,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, "engines": { "node": ">= 16" }, @@ -1385,7 +1384,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", - "dev": true, "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -1397,7 +1395,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", - "dev": true, "funding": [ { "type": "individual", @@ -1424,7 +1421,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "dev": true, "funding": [ { "type": "individual", @@ -1449,7 +1445,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", - "dev": true, "funding": [ { "type": "individual", @@ -1472,7 +1467,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", - "dev": true, "funding": [ { "type": "individual", @@ -1495,7 +1489,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", - "dev": true, "funding": [ { "type": "individual", @@ -1534,7 +1527,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", - "dev": true, "funding": [ { "type": "individual", @@ -1555,7 +1547,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", - "dev": true, "funding": [ { "type": "individual", @@ -1574,7 +1565,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "dev": true, "funding": [ { "type": "individual", @@ -1621,7 +1611,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "dev": true, "funding": [ { "type": "individual", @@ -1715,7 +1704,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", - "dev": true, "funding": [ { "type": "individual", @@ -1735,7 +1723,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", - "dev": true, "funding": [ { "type": "individual", @@ -1751,7 +1738,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", - "dev": true, "funding": [ { "type": "individual", @@ -1790,7 +1776,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", - "dev": true, "funding": [ { "type": "individual", @@ -1888,7 +1873,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", - "dev": true, "funding": [ { "type": "individual", @@ -1929,7 +1913,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "dev": true, "funding": [ { "type": "individual", @@ -1977,7 +1960,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", - "dev": true, "funding": [ { "type": "individual", @@ -1998,7 +1980,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "dev": true, "funding": [ { "type": "individual", @@ -2079,7 +2060,6 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", - "dev": true, "funding": [ { "type": "individual", @@ -2125,7 +2105,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true, "engines": { "node": ">=14" } @@ -2282,7 +2261,6 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true, "funding": [ { "type": "individual", @@ -2307,7 +2285,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2320,7 +2297,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -2329,7 +2305,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2342,7 +2317,6 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.23.tgz", "integrity": "sha512-F2/6HZh8Q9RsgkOIkRrckldbhPjIZY7d4mT9LYuW68miwGQ5l7CkAgcz9fRRiurA0+YJhtsbx/EyrD9DmX9BOw==", - "dev": true, "license": "MIT", "dependencies": { "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.23", @@ -2361,7 +2335,6 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.23.tgz", "integrity": "sha512-Amh7mRoDzZyJJ4efqoePqdoZOzharmSOttZuJDlVE5yy07BoE8hL6ZRpa5fNYn0LCqn/KoWs8OHANWxhKDGhvQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2371,7 +2344,6 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.23.tgz", "integrity": "sha512-9wn489FIQm7m0UCD+HhktjWx6vskZzeZD9oDc2k9ZvbBzdXwPp5tiDqUBJ+eQpByAzCDfteAJwRn2lQCE0U+Iw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2381,7 +2353,6 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.23.tgz", "integrity": "sha512-nlk5EejSzEUfEngv0Jkhqq3/wINIfF2ED9wAofc22w/V1DV99ASh9l3/e/MIHOQFecIZ9MDqt0Em9/oDyB1Uew==", - "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2391,7 +2362,6 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.23.tgz", "integrity": "sha512-SJuPBp3Rc6vM92UtVTUxZQ/QlLhLfwTftt2XUiYohmGKB3RjGzpgduEFMCA0LEnucUckU6UHrJNFHiDm77C4PQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2401,7 +2371,6 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.23.tgz", "integrity": "sha512-NU+Qs3u7Qt6t3bJFdmmjd5CsvgI2bPPzO31KifM2Ez96/jsXYho5debtTQnimlb5NAqiHTSlxjh/F8ROcptmeQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2411,7 +2380,6 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.23.tgz", "integrity": "sha512-F78fZA2h6/ssiCSZOovlgIu0dUeI7ItKPsDDF3UUlIibef052GCXmliMinC90jVPbrjUADMd1BUwjfI0Z8OllQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2421,7 +2389,6 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.23.tgz", "integrity": "sha512-IfJZQJn7d/YyqhmguBIGoCKjE9dKjbu6V6iNEPApfwf5JyyjHYyyfkLU4rf7hygj57bfH4sl1jtQ6r8HnT62lw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2499,7 +2466,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", - "dev": true, "engines": { "node": ">= 12" }, @@ -2517,7 +2483,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", - "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2527,7 +2492,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", - "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2537,7 +2501,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", - "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2547,7 +2510,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", - "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2557,7 +2519,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", - "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2567,7 +2528,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", - "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2577,7 +2537,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", - "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2606,18 +2565,20 @@ "dev": true }, "node_modules/@openzeppelin/contracts": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.5.0.tgz", - "integrity": "sha512-R8hq4zmKKWP2c7OxeRgAcjZwvF5W0Qq2OIX7degrtdM52Q9xYr4MLJdUAVPKGUewNJ1qo+M6YiZLLnNUnjP/gg==", - "dev": true + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.6.1.tgz", + "integrity": "sha512-Ly6SlsVJ3mj+b18W3R8gNufB7dTICT105fJhodGAGgyC2oqnBAhqSiNDJ8V8DLY05cCz81GLI0CU5vNYA1EC/w==", + "dev": true, + "license": "MIT" }, "node_modules/@openzeppelin/contracts-upgradeable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.5.0.tgz", - "integrity": "sha512-Va5hKG5oaK0EE5bXTVWugcGimMHazxL+SL523dH6WVbGiuLXwuWr9oxtLyPHQSVGtgmlIgtKNR5V+OUpCIUwFQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.6.1.tgz", + "integrity": "sha512-n4a/vfRs114lXyUdYg7pyY8LvFKWvCDF5lEcRRAVxap8g6ZEdLqm+9tmt2zTtRHcNMxTYp9y5t6KBof4tHp7Og==", "dev": true, + "license": "MIT", "peerDependencies": { - "@openzeppelin/contracts": "5.5.0" + "@openzeppelin/contracts": "5.6.1" } }, "node_modules/@openzeppelin/defender-sdk-base-client": { @@ -2716,7 +2677,6 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", - "dev": true, "funding": { "url": "https://paulmillr.com/funding/" } @@ -2725,7 +2685,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", - "dev": true, "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -2739,7 +2698,6 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, "dependencies": { "@noble/hashes": "1.4.0" }, @@ -2751,7 +2709,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, "engines": { "node": ">= 16" }, @@ -2763,7 +2720,6 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true, "funding": { "url": "https://paulmillr.com/funding/" } @@ -2772,7 +2728,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", - "dev": true, "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -2785,7 +2740,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, "engines": { "node": ">= 16" }, @@ -2797,7 +2751,6 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true, "funding": { "url": "https://paulmillr.com/funding/" } @@ -2806,7 +2759,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -2821,14 +2773,12 @@ "node_modules/@sentry/core/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/hub": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, "dependencies": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", @@ -2841,14 +2791,12 @@ "node_modules/@sentry/hub/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/minimal": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", @@ -2861,14 +2809,12 @@ "node_modules/@sentry/minimal/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/node": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, "dependencies": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -2887,14 +2833,12 @@ "node_modules/@sentry/node/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/tracing": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -2909,14 +2853,12 @@ "node_modules/@sentry/tracing/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/types": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, "engines": { "node": ">=6" } @@ -2925,7 +2867,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, "dependencies": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" @@ -2937,8 +2878,7 @@ "node_modules/@sentry/utils/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@smithy/config-resolver": { "version": "4.4.17", @@ -3697,11 +3637,26 @@ "@types/node": "*" } }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "12.20.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" }, "node_modules/@types/pbkdf2": { "version": "3.1.2", @@ -3758,6 +3713,12 @@ ] } }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "license": "ISC" + }, "node_modules/acorn": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", @@ -3785,7 +3746,6 @@ "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, "engines": { "node": ">=0.3.0" } @@ -3801,7 +3761,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "dependencies": { "debug": "4" }, @@ -3813,7 +3772,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -3880,11 +3838,20 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "license": "BSD-3-Clause OR MIT", + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, "dependencies": { "string-width": "^4.1.0" } @@ -3893,7 +3860,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, "engines": { "node": ">=6" } @@ -3902,7 +3868,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -3917,7 +3882,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -3926,7 +3890,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3947,7 +3910,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3959,14 +3921,12 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, "engines": { "node": ">=8" } @@ -3995,6 +3955,12 @@ "node": ">=12" } }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "license": "MIT" + }, "node_modules/async-retry": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", @@ -4049,8 +4015,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base-x": { "version": "3.0.11", @@ -4112,7 +4077,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, "engines": { "node": ">=8" }, @@ -4130,7 +4094,6 @@ "version": "5.2.3", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", - "dev": true, "license": "MIT" }, "node_modules/bowser": { @@ -4144,7 +4107,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -4166,7 +4128,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -4178,7 +4139,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -4188,7 +4148,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -4199,14 +4158,12 @@ "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "node_modules/browserify-aes": { "version": "1.2.0", @@ -4256,8 +4213,7 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/buffer-xor": { "version": "1.0.3", @@ -4278,7 +4234,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -4351,7 +4306,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, "engines": { "node": ">=10" }, @@ -4420,7 +4374,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4463,7 +4416,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, "dependencies": { "readdirp": "^4.0.1" }, @@ -4507,7 +4459,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, "engines": { "node": ">=6" } @@ -4516,7 +4467,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, "engines": { "node": ">=6" }, @@ -4543,7 +4493,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -4554,7 +4503,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4565,8 +4513,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colors": { "version": "1.4.0", @@ -4592,14 +4539,12 @@ "node_modules/command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, "engines": { "node": ">= 12" } @@ -4613,8 +4558,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -4665,7 +4609,6 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -4743,11 +4686,15 @@ "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==", "dev": true }, + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==" + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, "dependencies": { "ms": "^2.1.3" }, @@ -4764,7 +4711,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -4788,7 +4734,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, "license": "MIT" }, "node_modules/define-data-property": { @@ -4821,7 +4766,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -4839,17 +4783,26 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "dependencies": { + "heap": ">= 0.2.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -4897,7 +4850,6 @@ "version": "6.6.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "dev": true, "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -4912,20 +4864,17 @@ "version": "4.12.3", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -4938,7 +4887,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, "engines": { "node": ">=6" } @@ -4992,7 +4940,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "engines": { "node": ">=6" } @@ -5001,7 +4948,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -5009,6 +4955,111 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/escodegen/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/eslint": { "version": "8.57.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", @@ -5349,7 +5400,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -5557,6 +5607,27 @@ "node": ">=4" } }, + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", @@ -5642,6 +5713,26 @@ "dev": true, "peer": true }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "license": "MIT" + }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -5689,7 +5780,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5712,7 +5802,6 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, "license": "MIT" }, "node_modules/fast-xml-builder": { @@ -5758,7 +5847,6 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -5780,7 +5868,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5814,7 +5901,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, "bin": { "flat": "cli.js" } @@ -5908,7 +5994,6 @@ "version": "1.16.0", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", - "dev": true, "funding": [ { "type": "individual", @@ -5959,14 +6044,12 @@ "node_modules/fp-ts": { "version": "1.19.3", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" }, "node_modules/fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -5985,15 +6068,14 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -6015,7 +6097,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -6075,12 +6156,95 @@ "node": ">= 0.4" } }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "license": "ISC", + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" + } + }, + "node_modules/ghost-testrpc/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ghost-testrpc/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ghost-testrpc/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6099,7 +6263,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -6111,7 +6274,6 @@ "version": "5.1.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -6120,6 +6282,32 @@ "node": ">=10" } }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -6184,8 +6372,7 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graphemer": { "version": "1.4.0", @@ -6207,11 +6394,31 @@ "node": ">=0.6.8" } }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, "node_modules/hardhat": { "version": "2.28.6", "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.6.tgz", "integrity": "sha512-zQze7qe+8ltwHvhX5NQ8sN1N37WWZGw8L63y+2XcPxGwAjc/SMF829z3NS6o1krX0sryhAsVBK/xrwUqlsot4Q==", - "dev": true, "license": "MIT", "dependencies": { "@ethereumjs/util": "^9.1.0", @@ -6302,7 +6509,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, "funding": [ { "type": "individual", @@ -6314,7 +6520,6 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true, "funding": { "url": "https://paulmillr.com/funding/" } @@ -6323,7 +6528,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, "funding": [ { "type": "individual", @@ -6340,7 +6544,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, "funding": [ { "type": "individual", @@ -6355,14 +6558,12 @@ "node_modules/hardhat/node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "node_modules/hardhat/node_modules/ethereum-cryptography": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, "dependencies": { "@noble/hashes": "1.2.0", "@noble/secp256k1": "1.7.1", @@ -6374,7 +6575,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -6390,7 +6590,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -6405,7 +6604,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -6420,7 +6618,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -6435,7 +6632,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -6444,7 +6640,6 @@ "version": "5.29.0", "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", - "dev": true, "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -6456,7 +6651,6 @@ "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, "engines": { "node": ">=8.3.0" }, @@ -6477,7 +6671,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -6576,7 +6769,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -6625,16 +6817,20 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, "bin": { "he": "bin/he" } }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "license": "MIT" + }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -6660,7 +6856,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", @@ -6695,7 +6890,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -6714,7 +6908,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -6746,7 +6939,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, "engines": { "node": ">= 4" } @@ -6755,7 +6947,6 @@ "version": "4.3.8", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz", "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==", - "dev": true, "license": "MIT" }, "node_modules/import-fresh": { @@ -6799,7 +6990,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, "engines": { "node": ">=8" } @@ -6809,7 +6999,6 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6818,14 +7007,27 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } }, "node_modules/io-ts": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, "dependencies": { "fp-ts": "^1.0.0" } @@ -6834,7 +7036,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -6891,7 +7092,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -6900,7 +7100,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -6909,7 +7108,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -6917,11 +7115,20 @@ "node": ">=0.10.0" } }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -6940,7 +7147,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, "engines": { "node": ">=8" } @@ -6989,7 +7195,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, "engines": { "node": ">=10" }, @@ -7027,8 +7232,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isomorphic-unfetch": { "version": "3.1.0", @@ -7049,14 +7253,12 @@ "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -7089,7 +7291,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", - "dev": true, "engines": { "node": ">=7.10.1" } @@ -7098,16 +7299,23 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, + "node_modules/jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/keccak": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "dev": true, "hasInstallScript": true, "dependencies": { "node-addon-api": "^2.0.0", @@ -7128,6 +7336,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/klaw-sync": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", @@ -7167,7 +7384,6 @@ "version": "4.18.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "dev": true, "license": "MIT" }, "node_modules/lodash.isequal": { @@ -7195,7 +7411,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -7219,8 +7434,7 @@ "node_modules/lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" }, "node_modules/markdown-table": { "version": "1.1.3", @@ -7252,7 +7466,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, "engines": { "node": ">= 0.10.0" } @@ -7261,7 +7474,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } @@ -7270,7 +7482,6 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", - "dev": true, "dependencies": { "@noble/curves": "~1.8.1", "@noble/hashes": "~1.7.1", @@ -7281,7 +7492,6 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", - "dev": true, "dependencies": { "@noble/hashes": "1.7.2" }, @@ -7296,7 +7506,6 @@ "version": "1.7.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", - "dev": true, "engines": { "node": "^14.21.3 || >=16" }, @@ -7304,11 +7513,16 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "license": "MIT" + }, "node_modules/micro-packed": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", - "dev": true, "dependencies": { "@scure/base": "~1.2.5" }, @@ -7320,7 +7534,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -7353,14 +7566,12 @@ "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "node_modules/minimatch": { "version": "9.0.9", @@ -7382,16 +7593,26 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/mnemonist": { "version": "0.38.5", "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, "dependencies": { "obliterator": "^2.0.0" } @@ -7400,7 +7621,6 @@ "version": "10.8.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", - "dev": true, "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -7435,7 +7655,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -7459,7 +7678,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7475,7 +7693,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -7490,7 +7707,6 @@ "version": "5.1.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -7503,7 +7719,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -7518,7 +7733,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -7533,7 +7747,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -7545,7 +7758,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -7568,8 +7780,7 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -7578,6 +7789,12 @@ "dev": true, "license": "MIT" }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -7587,8 +7804,16 @@ "node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21" + } }, "node_modules/node-fetch": { "version": "2.7.0", @@ -7614,7 +7839,6 @@ "version": "4.8.4", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "dev": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -7630,15 +7854,46 @@ "node": ">=12.19" } }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "license": "MIT" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7663,14 +7918,12 @@ "node_modules/obliterator": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", - "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", - "dev": true + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==" }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -7719,7 +7972,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7782,7 +8034,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -7917,7 +8168,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -7942,7 +8192,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7959,14 +8208,12 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -8000,14 +8247,12 @@ "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -8020,7 +8265,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, "engines": { "node": ">=6" } @@ -8194,7 +8438,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -8214,7 +8457,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -8223,7 +8465,6 @@ "version": "2.5.3", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "dev": true, "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", @@ -8275,7 +8516,6 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -8289,7 +8529,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, "engines": { "node": ">= 14.18.0" }, @@ -8298,6 +8537,51 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/recursive-readdir/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/req-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", @@ -8335,7 +8619,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8344,7 +8627,6 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, "dependencies": { "path-parse": "^1.0.6" }, @@ -8374,7 +8656,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -8467,7 +8748,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -8490,7 +8770,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -8509,8 +8788,146 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "license": "BSD-3-Clause", + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/sc-istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/sc-istanbul/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/sc-istanbul/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sc-istanbul/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "license": "MIT" + }, + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "license": "MIT", + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/scrypt-js": { "version": "3.0.1", @@ -8545,7 +8962,6 @@ "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -8558,7 +8974,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, "dependencies": { "randombytes": "^2.1.0" } @@ -8589,8 +9004,7 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/sha.js": { "version": "2.4.12", @@ -8659,6 +9073,66 @@ "node": ">=0.10.0" } }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/shelljs/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -8741,7 +9215,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, "engines": { "node": ">=8" } @@ -8750,7 +9223,6 @@ "version": "0.8.26", "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", - "dev": true, "dependencies": { "command-exists": "^1.2.8", "commander": "^8.1.0", @@ -8771,7 +9243,6 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -8782,96 +9253,280 @@ "integrity": "sha512-OYBJYcYyG7gLV0VuXl9CUrvgJXjV/v0XnR4+1YomVe3q+QyENQXJJxAEASUz4vN6lMAl+C8RSRSr5MBAz09f6w==", "dev": true }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, + "node_modules/solidity-coverage": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.17.tgz", + "integrity": "sha512-5P8vnB6qVX9tt1MfuONtCTEaEGO/O4WuEidPHIAJjx4sktHHKhO3rFvnE0q8L30nWJPTrcqGQMT7jpE29B2qow==", + "license": "ISC", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.20.1", + "chalk": "^2.4.2", + "death": "^1.1.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" + }, + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" } }, - "node_modules/spawndamnit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", - "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.5", - "signal-exit": "^4.0.1" - } + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", + "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", + "license": "MIT" }, - "node_modules/spawndamnit/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, + "node_modules/solidity-coverage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/spawndamnit/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/solidity-coverage/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/spawndamnit/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "node_modules/solidity-coverage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/spawndamnit/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/solidity-coverage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/spawndamnit/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, + "node_modules/solidity-coverage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/solidity-coverage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.8.0" } }, - "node_modules/spawndamnit/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/solidity-coverage/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/solidity-coverage/node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "license": "MIT", + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/solidity-coverage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/solidity-coverage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spawndamnit": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", + "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.5", + "signal-exit": "^4.0.1" + } + }, + "node_modules/spawndamnit/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/spawndamnit/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawndamnit/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawndamnit/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawndamnit/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/spawndamnit/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -8885,14 +9540,12 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/stacktrace-parser": { "version": "0.1.11", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", - "dev": true, "dependencies": { "type-fest": "^0.7.1" }, @@ -8904,7 +9557,6 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, "engines": { "node": ">=8" } @@ -8913,7 +9565,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -8922,7 +9573,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -8931,7 +9581,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8945,7 +9594,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -8962,11 +9610,23 @@ "node": ">=4" } }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -8991,7 +9651,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -9172,7 +9831,6 @@ "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" @@ -9188,7 +9846,6 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, "engines": { "node": ">=12.0.0" }, @@ -9205,7 +9862,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -9218,7 +9874,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -9250,7 +9905,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -9262,7 +9916,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, "engines": { "node": ">=0.6" } @@ -9292,8 +9945,7 @@ "node_modules/tsort": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" }, "node_modules/type-check": { "version": "0.4.0", @@ -9321,7 +9973,6 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, "engines": { "node": ">=10" }, @@ -9349,6 +10000,19 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/undici": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/undici/-/undici-6.25.0.tgz", @@ -9376,7 +10040,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, "engines": { "node": ">= 4.0.0" } @@ -9385,7 +10048,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -9400,21 +10062,106 @@ "punycode": "^2.1.0" } }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "license": "MIT" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" } }, + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/web3-utils/node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -9435,7 +10182,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -9468,7 +10214,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, "dependencies": { "string-width": "^4.0.0" }, @@ -9480,23 +10225,26 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" + }, "node_modules/workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==" }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9512,8 +10260,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { "version": "8.17.1", @@ -9557,7 +10304,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "engines": { "node": ">=10" } @@ -9576,7 +10322,6 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -9594,7 +10339,6 @@ "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, "engines": { "node": ">=10" } @@ -9603,7 +10347,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -9618,7 +10361,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, @@ -9626,7131 +10368,5 @@ "url": "https://github.com/sponsors/sindresorhus" } } - }, - "dependencies": { - "@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "dev": true, - "peer": true - }, - "@arbitrum/nitro-contracts": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-1.1.1.tgz", - "integrity": "sha512-4Tyk3XVHz+bm8UujUC78LYSw3xAxyYvBCxfEX4z3qE4/ww7Qck/rmce5gbHMzQjArEAzAP2YSfYIFuIFuRXtfg==", - "dev": true, - "requires": { - "@offchainlabs/upgrade-executor": "1.1.0-beta.0", - "@openzeppelin/contracts": "4.5.0", - "@openzeppelin/contracts-upgradeable": "4.5.2", - "patch-package": "^6.4.7" - }, - "dependencies": { - "@openzeppelin/contracts": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.5.0.tgz", - "integrity": "sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA==", - "dev": true - }, - "@openzeppelin/contracts-upgradeable": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz", - "integrity": "sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA==", - "dev": true - } - } - }, - "@arbitrum/token-bridge-contracts": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@arbitrum/token-bridge-contracts/-/token-bridge-contracts-1.1.2.tgz", - "integrity": "sha512-k7AZXiB2HFecJ1KfaDBqgOKe3Loo1ttGLC7hUOVB+0YrihIR6cYpJRuqKSKK4YCy+FF21AUDtaG3x57OFM667Q==", - "dev": true, - "requires": { - "@arbitrum/nitro-contracts": "^1.0.0-beta.8", - "@offchainlabs/upgrade-executor": "1.1.0-beta.0", - "@openzeppelin/contracts": "4.8.3", - "@openzeppelin/contracts-upgradeable": "4.8.3", - "@openzeppelin/upgrades-core": "^1.24.1" - }, - "dependencies": { - "@openzeppelin/contracts": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", - "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", - "dev": true - }, - "@openzeppelin/contracts-upgradeable": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz", - "integrity": "sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg==", - "dev": true - } - } - }, - "@aws-crypto/crc32": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", - "dev": true, - "requires": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - } - }, - "@aws-crypto/sha256-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", - "dev": true, - "requires": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - }, - "dependencies": { - "@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dev": true, - "requires": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, - "requires": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - } - } - } - }, - "@aws-crypto/sha256-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", - "dev": true, - "requires": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - } - }, - "@aws-crypto/supports-web-crypto": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@aws-crypto/util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - }, - "dependencies": { - "@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dev": true, - "requires": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dev": true, - "requires": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - } - } - } - }, - "@aws-sdk/client-lambda": { - "version": "3.1045.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.1045.0.tgz", - "integrity": "sha512-9EDPinh03XanJQssTBdTY+9E7PkyQ0NLLJiaOAM71/g4DI+0OZboGqhX7KKizwUGqKkj0paKEAwgWaMLgEkQFQ==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/credential-provider-node": "^3.972.39", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-user-agent": "^3.972.38", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.24", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.17", - "@smithy/eventstream-serde-browser": "^4.2.14", - "@smithy/eventstream-serde-config-resolver": "^4.3.14", - "@smithy/eventstream-serde-node": "^4.2.14", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/middleware-retry": "^4.5.7", - "@smithy/middleware-serde": "^4.2.20", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.49", - "@smithy/util-defaults-mode-node": "^4.2.54", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/util-stream": "^4.5.25", - "@smithy/util-utf8": "^4.2.2", - "@smithy/util-waiter": "^4.3.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/core": { - "version": "3.974.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.8.tgz", - "integrity": "sha512-njR2qoG6ZuB0kvAS2FyICsFZJ6gmCcf2X/7JcD14sUvGDm26wiZ5BrA6LOiUxKFEF+IVe7kdroxyE00YlkiYsw==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/xml-builder": "^3.972.22", - "@smithy/core": "^3.23.17", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-env": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.34.tgz", - "integrity": "sha512-XT0jtf8Fw9JE6ppsQeoNnZRiG+jqRixMT1v1ZR17G60UvVdsQmTG8nbEyHuEPfMxDXEhfdARaM/XiEhca4lGHQ==", - "dev": true, - "requires": { - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-http": { - "version": "3.972.36", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.36.tgz", - "integrity": "sha512-DPoGWfy7J7RKxvbf5kOKIGQkD2ek3dbKgzKIGrnLuvZBz5myU+Im/H6pmc14QcnFbqHMqxvtWSgRDSJW3qXLQg==", - "dev": true, - "requires": { - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/types": "^3.973.8", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/util-stream": "^4.5.25", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-ini": { - "version": "3.972.38", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.38.tgz", - "integrity": "sha512-oDzUBu2MGJFgoar05sPMCwSrhw44ASyccrHzj66vO69OZqi7I6hZZxXfuPLC8OCzW7C+sU+bI73XHij41yekgQ==", - "dev": true, - "requires": { - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/credential-provider-env": "^3.972.34", - "@aws-sdk/credential-provider-http": "^3.972.36", - "@aws-sdk/credential-provider-login": "^3.972.38", - "@aws-sdk/credential-provider-process": "^3.972.34", - "@aws-sdk/credential-provider-sso": "^3.972.38", - "@aws-sdk/credential-provider-web-identity": "^3.972.38", - "@aws-sdk/nested-clients": "^3.997.6", - "@aws-sdk/types": "^3.973.8", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-login": { - "version": "3.972.38", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.38.tgz", - "integrity": "sha512-g1NosS8qe4OF++G2UFCM5ovSkgipC7YYor5KCWatG0UoMSO5YFj9C8muePlyVmOBV/WTI16Jo3/s1NUo/o1Bww==", - "dev": true, - "requires": { - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/nested-clients": "^3.997.6", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-node": { - "version": "3.972.39", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.39.tgz", - "integrity": "sha512-HEswDQyxUtadoZ/bJsPPENHg7R0Lzym5LuMksJeHvqhCOpP+rtkDLKI4/ZChH4w3cf5kG8n6bZuI8PzajoiqMg==", - "dev": true, - "requires": { - "@aws-sdk/credential-provider-env": "^3.972.34", - "@aws-sdk/credential-provider-http": "^3.972.36", - "@aws-sdk/credential-provider-ini": "^3.972.38", - "@aws-sdk/credential-provider-process": "^3.972.34", - "@aws-sdk/credential-provider-sso": "^3.972.38", - "@aws-sdk/credential-provider-web-identity": "^3.972.38", - "@aws-sdk/types": "^3.973.8", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.34.tgz", - "integrity": "sha512-T3IFs4EVmVi1dVN5RciFnklCANSzvrQd/VuHY9ThHSQmYkTogjcGkoJEr+oNUPQZnso52183088NqysMPji1/Q==", - "dev": true, - "requires": { - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-sso": { - "version": "3.972.38", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.38.tgz", - "integrity": "sha512-5ZxG+t0+3Q3QPh8KEjX6syskhgNf7I0MN7oGioTf6Lm1NTjfP7sIcYGNsthXC2qR8vcD3edNZwCr2ovfSSWuRA==", - "dev": true, - "requires": { - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/nested-clients": "^3.997.6", - "@aws-sdk/token-providers": "3.1041.0", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.972.38", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.38.tgz", - "integrity": "sha512-lYHFF30DGI20jZcYX8cm6Ns0V7f1dDN6g/MBDLTyD/5iw+bXs3yBr2iAiHDkx4RFU5JgsnZvCHYKiRVPRdmOgw==", - "dev": true, - "requires": { - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/nested-clients": "^3.997.6", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.10.tgz", - "integrity": "sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.973.8", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.10.tgz", - "integrity": "sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.11.tgz", - "integrity": "sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.973.8", - "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-sdk-s3": { - "version": "3.972.37", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.37.tgz", - "integrity": "sha512-Km7M+i8DrLArVzrid1gfxeGhYHBd3uxvE77g0s5a52zPSVosxzQBnJ0gwWb6NIp/DOk8gsBMhi7V+cpJG0ndTA==", - "dev": true, - "requires": { - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-arn-parser": "^3.972.3", - "@smithy/core": "^3.23.17", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/util-config-provider": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-stream": "^4.5.25", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.972.38", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.38.tgz", - "integrity": "sha512-iz+B29TXcAZsJpwB+AwG/TTGA5l/VnmMZ2UxtiySOZjI6gCdmviXPwdgzcmuazMy16rXoPY4mYCGe7zdNKfx5A==", - "dev": true, - "requires": { - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@smithy/core": "^3.23.17", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-retry": "^4.3.6", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/nested-clients": { - "version": "3.997.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.6.tgz", - "integrity": "sha512-WBDnqatJl+kGObpfmfSxqnXeYTu3Me8wx8WCtvoxX3pfWrrTv8I4WTMSSs7PZqcRcVh8WeUKMgGFjMG+52SR1w==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-user-agent": "^3.972.38", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/signature-v4-multi-region": "^3.996.25", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.24", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.17", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/middleware-retry": "^4.5.7", - "@smithy/middleware-serde": "^4.2.20", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.49", - "@smithy/util-defaults-mode-node": "^4.2.54", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/region-config-resolver": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.13.tgz", - "integrity": "sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.973.8", - "@smithy/config-resolver": "^4.4.17", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/signature-v4-multi-region": { - "version": "3.996.25", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.25.tgz", - "integrity": "sha512-+CMIt3e1VzlklAECmG+DtP1sV8iKq25FuA0OKpnJ4KA0kxUtd7CgClY7/RU6VzJBQwbN4EJ9Ue6plvqx1qGadw==", - "dev": true, - "requires": { - "@aws-sdk/middleware-sdk-s3": "^3.972.37", - "@aws-sdk/types": "^3.973.8", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/token-providers": { - "version": "3.1041.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1041.0.tgz", - "integrity": "sha512-Th7kPI6YPtvJUcdznooXJMy+9rQWjmEF81LxaJssngBzuysK4a/x+l8kjm1zb7nYsUPbndnBdUnwng/3PLvtGw==", - "dev": true, - "requires": { - "@aws-sdk/core": "^3.974.8", - "@aws-sdk/nested-clients": "^3.997.6", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/types": { - "version": "3.973.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.8.tgz", - "integrity": "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-arn-parser": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.3.tgz", - "integrity": "sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.996.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.8.tgz", - "integrity": "sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-endpoints": "^3.4.2", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-locate-window": { - "version": "3.965.5", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz", - "integrity": "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.10.tgz", - "integrity": "sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.973.24", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.24.tgz", - "integrity": "sha512-ZWwlkjcIp7cEL8ZfTpTAPNkwx25p7xol0xlKoWVVf22+nsjwmLcHYtTPjIV1cSpmB/b6DaK4cb1fSkvCXHgRdw==", - "dev": true, - "requires": { - "@aws-sdk/middleware-user-agent": "^3.972.38", - "@aws-sdk/types": "^3.973.8", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-config-provider": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/xml-builder": { - "version": "3.972.22", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.22.tgz", - "integrity": "sha512-PMYKKtJd70IsSG0yHrdAbxBr+ZWBKLvzFZfD3/urxgf6hXVMzuU5M+3MJ5G67RpOmLBu1fAUN65SbWuKUCOlAA==", - "dev": true, - "requires": { - "@nodable/entities": "2.1.0", - "@smithy/types": "^4.14.1", - "fast-xml-parser": "5.7.2", - "tslib": "^2.6.2" - } - }, - "@aws/lambda-invoke-store": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz", - "integrity": "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==", - "dev": true - }, - "@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", - "dev": true - }, - "@bytecodealliance/preview2-shim": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.0.tgz", - "integrity": "sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==", - "dev": true - }, - "@chainlink/ace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@chainlink/ace/-/ace-1.0.0.tgz", - "integrity": "sha512-lamF+fabw5cyIQ+7PA5QkEl0GyHmmH3lc875jrspo9VxsxiKbMxDcRDGPEuubFQS3Zcx7H/Z80C72+Xm/FgeqA==", - "dev": true - }, - "@chainlink/contracts": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.3.0.tgz", - "integrity": "sha512-Vk93nijTC5iRFW/L6FKUzeMuJy7k5dNzAtqlHpdreqtzL7efO/qXbYCkqjJFNXGurfOXVehHlehFoH4tWvSbfw==", - "dev": true, - "requires": { - "@arbitrum/nitro-contracts": "1.1.1", - "@arbitrum/token-bridge-contracts": "1.1.2", - "@changesets/changelog-github": "^0.5.0", - "@changesets/cli": "~2.27.8", - "@eth-optimism/contracts": "0.6.0", - "@openzeppelin/contracts": "4.9.3", - "@openzeppelin/contracts-upgradeable": "4.9.3", - "@scroll-tech/contracts": "0.1.0", - "@zksync/contracts": "git+https://github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9", - "semver": "^7.6.3" - }, - "dependencies": { - "@eth-optimism/contracts": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", - "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", - "dev": true, - "requires": { - "@eth-optimism/core-utils": "0.12.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0" - } - }, - "@openzeppelin/contracts": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", - "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==", - "dev": true - }, - "@openzeppelin/contracts-upgradeable": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", - "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==", - "dev": true - }, - "ethers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", - "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", - "dev": true, - "peer": true, - "requires": { - "@ethersproject/abi": "5.8.0", - "@ethersproject/abstract-provider": "5.8.0", - "@ethersproject/abstract-signer": "5.8.0", - "@ethersproject/address": "5.8.0", - "@ethersproject/base64": "5.8.0", - "@ethersproject/basex": "5.8.0", - "@ethersproject/bignumber": "5.8.0", - "@ethersproject/bytes": "5.8.0", - "@ethersproject/constants": "5.8.0", - "@ethersproject/contracts": "5.8.0", - "@ethersproject/hash": "5.8.0", - "@ethersproject/hdnode": "5.8.0", - "@ethersproject/json-wallets": "5.8.0", - "@ethersproject/keccak256": "5.8.0", - "@ethersproject/logger": "5.8.0", - "@ethersproject/networks": "5.8.0", - "@ethersproject/pbkdf2": "5.8.0", - "@ethersproject/properties": "5.8.0", - "@ethersproject/providers": "5.8.0", - "@ethersproject/random": "5.8.0", - "@ethersproject/rlp": "5.8.0", - "@ethersproject/sha2": "5.8.0", - "@ethersproject/signing-key": "5.8.0", - "@ethersproject/solidity": "5.8.0", - "@ethersproject/strings": "5.8.0", - "@ethersproject/transactions": "5.8.0", - "@ethersproject/units": "5.8.0", - "@ethersproject/wallet": "5.8.0", - "@ethersproject/web": "5.8.0", - "@ethersproject/wordlists": "5.8.0" - } - } - } - }, - "@changesets/apply-release-plan": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.14.tgz", - "integrity": "sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==", - "dev": true, - "requires": { - "@changesets/config": "^3.1.2", - "@changesets/get-version-range-type": "^0.4.0", - "@changesets/git": "^3.0.4", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "detect-indent": "^6.0.0", - "fs-extra": "^7.0.1", - "lodash.startcase": "^4.4.0", - "outdent": "^0.5.0", - "prettier": "^2.7.1", - "resolve-from": "^5.0.0", - "semver": "^7.5.3" - }, - "dependencies": { - "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true - } - } - }, - "@changesets/assemble-release-plan": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", - "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", - "dev": true, - "requires": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "semver": "^7.5.3" - } - }, - "@changesets/changelog-git": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", - "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", - "dev": true, - "requires": { - "@changesets/types": "^6.1.0" - } - }, - "@changesets/changelog-github": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.5.2.tgz", - "integrity": "sha512-HeGeDl8HaIGj9fQHo/tv5XKQ2SNEi9+9yl1Bss1jttPqeiASRXhfi0A2wv8yFKCp07kR1gpOI5ge6+CWNm1jPw==", - "dev": true, - "requires": { - "@changesets/get-github-info": "^0.7.0", - "@changesets/types": "^6.1.0", - "dotenv": "^8.1.0" - } - }, - "@changesets/cli": { - "version": "2.27.12", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.12.tgz", - "integrity": "sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==", - "dev": true, - "requires": { - "@changesets/apply-release-plan": "^7.0.8", - "@changesets/assemble-release-plan": "^6.0.5", - "@changesets/changelog-git": "^0.2.0", - "@changesets/config": "^3.0.5", - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.2", - "@changesets/get-release-plan": "^4.0.6", - "@changesets/git": "^3.0.2", - "@changesets/logger": "^0.1.1", - "@changesets/pre": "^2.0.1", - "@changesets/read": "^0.6.2", - "@changesets/should-skip-package": "^0.1.1", - "@changesets/types": "^6.0.0", - "@changesets/write": "^0.3.2", - "@manypkg/get-packages": "^1.1.3", - "ansi-colors": "^4.1.3", - "ci-info": "^3.7.0", - "enquirer": "^2.4.1", - "external-editor": "^3.1.0", - "fs-extra": "^7.0.1", - "mri": "^1.2.0", - "p-limit": "^2.2.0", - "package-manager-detector": "^0.2.0", - "picocolors": "^1.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "spawndamnit": "^3.0.1", - "term-size": "^2.1.0" - } - }, - "@changesets/config": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.2.tgz", - "integrity": "sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==", - "dev": true, - "requires": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/logger": "^0.1.1", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1", - "micromatch": "^4.0.8" - } - }, - "@changesets/errors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", - "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", - "dev": true, - "requires": { - "extendable-error": "^0.1.5" - } - }, - "@changesets/get-dependents-graph": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", - "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", - "dev": true, - "requires": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "picocolors": "^1.1.0", - "semver": "^7.5.3" - } - }, - "@changesets/get-github-info": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.7.0.tgz", - "integrity": "sha512-+i67Bmhfj9V4KfDeS1+Tz3iF32btKZB2AAx+cYMqDSRFP7r3/ZdGbjCo+c6qkyViN9ygDuBjzageuPGJtKGe5A==", - "dev": true, - "requires": { - "dataloader": "^1.4.0", - "node-fetch": "^2.5.0" - } - }, - "@changesets/get-release-plan": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.14.tgz", - "integrity": "sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==", - "dev": true, - "requires": { - "@changesets/assemble-release-plan": "^6.0.9", - "@changesets/config": "^3.1.2", - "@changesets/pre": "^2.0.2", - "@changesets/read": "^0.6.6", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" - } - }, - "@changesets/get-version-range-type": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", - "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", - "dev": true - }, - "@changesets/git": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", - "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", - "dev": true, - "requires": { - "@changesets/errors": "^0.2.0", - "@manypkg/get-packages": "^1.1.3", - "is-subdir": "^1.1.1", - "micromatch": "^4.0.8", - "spawndamnit": "^3.0.1" - } - }, - "@changesets/logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", - "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", - "dev": true, - "requires": { - "picocolors": "^1.1.0" - } - }, - "@changesets/parse": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.2.tgz", - "integrity": "sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==", - "dev": true, - "requires": { - "@changesets/types": "^6.1.0", - "js-yaml": "^4.1.1" - } - }, - "@changesets/pre": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", - "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", - "dev": true, - "requires": { - "@changesets/errors": "^0.2.0", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1" - } - }, - "@changesets/read": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.6.tgz", - "integrity": "sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==", - "dev": true, - "requires": { - "@changesets/git": "^3.0.4", - "@changesets/logger": "^0.1.1", - "@changesets/parse": "^0.4.2", - "@changesets/types": "^6.1.0", - "fs-extra": "^7.0.1", - "p-filter": "^2.1.0", - "picocolors": "^1.1.0" - } - }, - "@changesets/should-skip-package": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", - "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", - "dev": true, - "requires": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" - } - }, - "@changesets/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", - "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", - "dev": true - }, - "@changesets/write": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.2.tgz", - "integrity": "sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==", - "dev": true, - "requires": { - "@changesets/types": "^6.0.0", - "fs-extra": "^7.0.1", - "human-id": "^1.0.2", - "prettier": "^2.7.1" - }, - "dependencies": { - "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true - } - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true - }, - "@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.4.3" - } - }, - "@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.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" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true - }, - "@eth-optimism/core-utils": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz", - "integrity": "sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bufio": "^1.0.7", - "chai": "^4.3.4" - } - }, - "@ethereumjs/rlp": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", - "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", - "dev": true - }, - "@ethereumjs/util": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", - "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", - "dev": true, - "requires": { - "@ethereumjs/rlp": "^5.0.2", - "ethereum-cryptography": "^2.2.1" - }, - "dependencies": { - "@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, - "requires": { - "@noble/hashes": "1.4.0" - } - }, - "@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true - }, - "ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", - "dev": true, - "requires": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" - } - } - } - }, - "@ethersproject/abi": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", - "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" - } - }, - "@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" - } - }, - "@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0" - } - }, - "@ethersproject/basex": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", - "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/properties": "^5.8.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.8.0" - } - }, - "@ethersproject/constants": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.8.0" - } - }, - "@ethersproject/contracts": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", - "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0" - } - }, - "@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "@ethersproject/hdnode": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", - "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" - } - }, - "@ethersproject/json-wallets": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", - "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - }, - "dependencies": { - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true - } - } - }, - "@ethersproject/keccak256": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", - "dev": true - }, - "@ethersproject/networks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.8.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", - "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/sha2": "^5.8.0" - } - }, - "@ethersproject/properties": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.8.0" - } - }, - "@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" - }, - "dependencies": { - "ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, - "requires": {} - } - } - }, - "@ethersproject/random": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", - "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "@ethersproject/rlp": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "@ethersproject/sha2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", - "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", - "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "@ethersproject/strings": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "@ethersproject/units": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", - "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "@ethersproject/wallet": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", - "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/json-wallets": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" - } - }, - "@ethersproject/web": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", - "dev": true, - "requires": { - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "@ethersproject/wordlists": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", - "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true - }, - "@manypkg/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@types/node": "^12.7.1", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@manypkg/get-packages": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@changesets/types": "^4.0.1", - "@manypkg/find-root": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "read-yaml-file": "^1.1.0" - }, - "dependencies": { - "@changesets/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, - "peer": true, - "requires": { - "@noble/hashes": "1.3.2" - } - }, - "@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, - "peer": true - }, - "@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true - }, - "@nodable/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@nomicfoundation/edr": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.23.tgz", - "integrity": "sha512-F2/6HZh8Q9RsgkOIkRrckldbhPjIZY7d4mT9LYuW68miwGQ5l7CkAgcz9fRRiurA0+YJhtsbx/EyrD9DmX9BOw==", - "dev": true, - "requires": { - "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.23", - "@nomicfoundation/edr-darwin-x64": "0.12.0-next.23", - "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.23", - "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.23", - "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.23", - "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.23", - "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.23" - } - }, - "@nomicfoundation/edr-darwin-arm64": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.23.tgz", - "integrity": "sha512-Amh7mRoDzZyJJ4efqoePqdoZOzharmSOttZuJDlVE5yy07BoE8hL6ZRpa5fNYn0LCqn/KoWs8OHANWxhKDGhvQ==", - "dev": true - }, - "@nomicfoundation/edr-darwin-x64": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.23.tgz", - "integrity": "sha512-9wn489FIQm7m0UCD+HhktjWx6vskZzeZD9oDc2k9ZvbBzdXwPp5tiDqUBJ+eQpByAzCDfteAJwRn2lQCE0U+Iw==", - "dev": true - }, - "@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.23.tgz", - "integrity": "sha512-nlk5EejSzEUfEngv0Jkhqq3/wINIfF2ED9wAofc22w/V1DV99ASh9l3/e/MIHOQFecIZ9MDqt0Em9/oDyB1Uew==", - "dev": true - }, - "@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.23.tgz", - "integrity": "sha512-SJuPBp3Rc6vM92UtVTUxZQ/QlLhLfwTftt2XUiYohmGKB3RjGzpgduEFMCA0LEnucUckU6UHrJNFHiDm77C4PQ==", - "dev": true - }, - "@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.23.tgz", - "integrity": "sha512-NU+Qs3u7Qt6t3bJFdmmjd5CsvgI2bPPzO31KifM2Ez96/jsXYho5debtTQnimlb5NAqiHTSlxjh/F8ROcptmeQ==", - "dev": true - }, - "@nomicfoundation/edr-linux-x64-musl": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.23.tgz", - "integrity": "sha512-F78fZA2h6/ssiCSZOovlgIu0dUeI7ItKPsDDF3UUlIibef052GCXmliMinC90jVPbrjUADMd1BUwjfI0Z8OllQ==", - "dev": true - }, - "@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.12.0-next.23", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.23.tgz", - "integrity": "sha512-IfJZQJn7d/YyqhmguBIGoCKjE9dKjbu6V6iNEPApfwf5JyyjHYyyfkLU4rf7hygj57bfH4sl1jtQ6r8HnT62lw==", - "dev": true - }, - "@nomicfoundation/hardhat-chai-matchers": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.2.tgz", - "integrity": "sha512-NlUlde/ycXw2bLzA2gWjjbxQaD9xIRbAF30nsoEprAWzH8dXEI1ILZUKZMyux9n9iygEXTzN0SDVjE6zWDZi9g==", - "dev": true, - "requires": { - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - } - }, - "@nomicfoundation/hardhat-ethers": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.3.tgz", - "integrity": "sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==", - "dev": true, - "peer": true, - "requires": { - "debug": "^4.1.1", - "lodash.isequal": "^4.5.0" - } - }, - "@nomicfoundation/hardhat-foundry": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.2.1.tgz", - "integrity": "sha512-pH1KeyI0sysgi7I7uQKPLXWl895EkuS6V41rSi820Ipqp/FScIwDh27RbevgC9zJ4ufSsSz34njm9cvRMGMNVA==", - "dev": true, - "requires": { - "picocolors": "^1.1.0" - } - }, - "@nomicfoundation/hardhat-network-helpers": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz", - "integrity": "sha512-p7HaUVDbLj7ikFivQVNhnfMHUBgiHYMwQWvGn9AriieuopGOELIrwj2KjyM2a6z70zai5YKO264Vwz+3UFJZPQ==", - "dev": true, - "requires": { - "ethereumjs-util": "^7.1.4" - } - }, - "@nomicfoundation/slang": { - "version": "0.18.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.18.3.tgz", - "integrity": "sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ==", - "dev": true, - "requires": { - "@bytecodealliance/preview2-shim": "0.17.0" - } - }, - "@nomicfoundation/solidity-analyzer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", - "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", - "dev": true, - "requires": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" - } - }, - "@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", - "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", - "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", - "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", - "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", - "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", - "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", - "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", - "dev": true, - "optional": true - }, - "@offchainlabs/upgrade-executor": { - "version": "1.1.0-beta.0", - "resolved": "https://registry.npmjs.org/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz", - "integrity": "sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw==", - "dev": true, - "requires": { - "@openzeppelin/contracts": "4.7.3", - "@openzeppelin/contracts-upgradeable": "4.7.3" - }, - "dependencies": { - "@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", - "dev": true - }, - "@openzeppelin/contracts-upgradeable": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", - "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==", - "dev": true - } - } - }, - "@openzeppelin/contracts": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.5.0.tgz", - "integrity": "sha512-R8hq4zmKKWP2c7OxeRgAcjZwvF5W0Qq2OIX7degrtdM52Q9xYr4MLJdUAVPKGUewNJ1qo+M6YiZLLnNUnjP/gg==", - "dev": true - }, - "@openzeppelin/contracts-upgradeable": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.5.0.tgz", - "integrity": "sha512-Va5hKG5oaK0EE5bXTVWugcGimMHazxL+SL523dH6WVbGiuLXwuWr9oxtLyPHQSVGtgmlIgtKNR5V+OUpCIUwFQ==", - "dev": true, - "requires": {} - }, - "@openzeppelin/defender-sdk-base-client": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-2.7.0.tgz", - "integrity": "sha512-J5IpvbFfdIJM4IadBcXfhCXVdX2yEpaZtRR1ecq87d8CdkmmEpniYfef/yVlG98yekvu125LaIRg0yXQOt9Bdg==", - "dev": true, - "requires": { - "@aws-sdk/client-lambda": "^3.563.0", - "amazon-cognito-identity-js": "^6.3.6", - "async-retry": "^1.3.3" - } - }, - "@openzeppelin/defender-sdk-deploy-client": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-2.7.0.tgz", - "integrity": "sha512-YOHZmnHmM1y6uSqXWGfk2/5/ae4zZJE6xG92yFEAIOy8vqh1dxznWMsoCcAXRXTCWc8RdCDpFdMfEy4SBTyYtg==", - "dev": true, - "requires": { - "@openzeppelin/defender-sdk-base-client": "^2.7.0", - "axios": "^1.7.4", - "lodash": "^4.17.21" - } - }, - "@openzeppelin/defender-sdk-network-client": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/defender-sdk-network-client/-/defender-sdk-network-client-2.7.0.tgz", - "integrity": "sha512-4CYWPa9+kSjojE5KS7kRmP161qsBATdp97TCrzyDdGoVahj0GyqgafRL9AAjm0eHZOM1c7EIYEpbvYRtFi8vyA==", - "dev": true, - "requires": { - "@openzeppelin/defender-sdk-base-client": "^2.7.0", - "axios": "^1.7.4", - "lodash": "^4.17.21" - } - }, - "@openzeppelin/hardhat-upgrades": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-3.9.1.tgz", - "integrity": "sha512-pSDjlOnIpP+PqaJVe144dK6VVKZw2v6YQusyt0OOLiCsl+WUzfo4D0kylax7zjrOxqy41EK2ipQeIF4T+cCn2A==", - "dev": true, - "requires": { - "@openzeppelin/defender-sdk-base-client": "^2.1.0", - "@openzeppelin/defender-sdk-deploy-client": "^2.1.0", - "@openzeppelin/defender-sdk-network-client": "^2.1.0", - "@openzeppelin/upgrades-core": "^1.41.0", - "chalk": "^4.1.0", - "debug": "^4.1.1", - "ethereumjs-util": "^7.1.5", - "proper-lockfile": "^4.1.1", - "undici": "^6.11.1" - } - }, - "@openzeppelin/upgrades-core": { - "version": "1.44.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades-core/-/upgrades-core-1.44.2.tgz", - "integrity": "sha512-m6iorjyhPK9ow5/trNs7qsBC/SOzJCO51pvvAF2W9nOiZ1t0RtCd+rlRmRmlWTv4M33V0wzIUeamJ2BPbzgUXA==", - "dev": true, - "requires": { - "@nomicfoundation/slang": "^0.18.3", - "bignumber.js": "^9.1.2", - "cbor": "^10.0.0", - "chalk": "^4.1.0", - "compare-versions": "^6.0.0", - "debug": "^4.1.1", - "ethereumjs-util": "^7.0.3", - "minimatch": "^9.0.5", - "minimist": "^1.2.7", - "proper-lockfile": "^4.1.1", - "solidity-ast": "^0.4.60" - } - }, - "@scroll-tech/contracts": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@scroll-tech/contracts/-/contracts-0.1.0.tgz", - "integrity": "sha512-aBbDOc3WB/WveZdpJYcrfvMYMz7ZTEiW8M9XMJLba8p9FAR5KGYB/cV+8+EUsq3MKt7C1BfR+WnXoTVdvwIY6w==", - "dev": true - }, - "@scure/base": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", - "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", - "dev": true - }, - "@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", - "dev": true, - "requires": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "dependencies": { - "@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, - "requires": { - "@noble/hashes": "1.4.0" - } - }, - "@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true - }, - "@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true - } - } - }, - "@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", - "dev": true, - "requires": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true - }, - "@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true - } - } - }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@smithy/config-resolver": { - "version": "4.4.17", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.17.tgz", - "integrity": "sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ==", - "dev": true, - "requires": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-config-provider": "^4.2.2", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "tslib": "^2.6.2" - } - }, - "@smithy/core": { - "version": "3.23.17", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.17.tgz", - "integrity": "sha512-x7BlLbUFL8NWCGjMF9C+1N5cVCxcPa7g6Tv9B4A2luWx3be3oU8hQ96wIwxe/s7OhIzvoJH73HAUSg5JXVlEtQ==", - "dev": true, - "requires": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-stream": "^4.5.25", - "@smithy/util-utf8": "^4.2.2", - "@smithy/uuid": "^1.1.2", - "tslib": "^2.6.2" - } - }, - "@smithy/credential-provider-imds": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.14.tgz", - "integrity": "sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg==", - "dev": true, - "requires": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-codec": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.14.tgz", - "integrity": "sha512-erZq0nOIpzfeZdCyzZjdJb4nVSKLUmSkaQUVkRGQTXs30gyUGeKnrYEg+Xe1W5gE3aReS7IgsvANwVPxSzY6Pw==", - "dev": true, - "requires": { - "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.14.1", - "@smithy/util-hex-encoding": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-serde-browser": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.14.tgz", - "integrity": "sha512-8IelTCtTctWRbb+0Dcy+C0aICh1qa0qWXqgjcXDmMuCvPJRnv26hiDZoAau2ILOniki65mCPKqOQs/BaWvO4CQ==", - "dev": true, - "requires": { - "@smithy/eventstream-serde-universal": "^4.2.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-serde-config-resolver": { - "version": "4.3.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.14.tgz", - "integrity": "sha512-sqHiHpYRYo3FJlaIxD1J8PhbcmJAm7IuM16mVnwSkCToD7g00IBZzKuiLNMGmftULmEUX6/UAz8/NN5uMP8bVA==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-serde-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.14.tgz", - "integrity": "sha512-Ht/8BuGlKfFTy0H3+8eEu0vdpwGztCnaLLXtpXNdQqiR7Hj4vFScU3T436vRAjATglOIPjJXronY+1WxxNLSiw==", - "dev": true, - "requires": { - "@smithy/eventstream-serde-universal": "^4.2.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-serde-universal": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.14.tgz", - "integrity": "sha512-lWyt4T2XQZUZgK3tQ3Wn0w3XBvZsK/vjTuJl6bXbnGZBHH0ZUSONTYiK9TgjTTzU54xQr3DRFwpjmhp0oLm3gg==", - "dev": true, - "requires": { - "@smithy/eventstream-codec": "^4.2.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/fetch-http-handler": { - "version": "5.3.17", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.17.tgz", - "integrity": "sha512-bXOvQzaSm6MnmLaWA1elgfQcAtN4UP3vXqV97bHuoOrHQOJiLT3ds6o9eo5bqd0TJfRFpzdGnDQdW3FACiAVdw==", - "dev": true, - "requires": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/querystring-builder": "^4.2.14", - "@smithy/types": "^4.14.1", - "@smithy/util-base64": "^4.3.2", - "tslib": "^2.6.2" - } - }, - "@smithy/hash-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.14.tgz", - "integrity": "sha512-8ZBDY2DD4wr+GGjTpPtiglEsqr0lUP+KHqgZcWczFf6qeZ/YRjMIOoQWVQlmwu7EtxKTd8YXD8lblmYcpBIA1g==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "@smithy/util-buffer-from": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@smithy/invalid-dependency": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.14.tgz", - "integrity": "sha512-c21qJiTSb25xvvOp+H2TNZzPCngrvl5vIPqPB8zQ/DmJF4QWXO19x1dWfMJZ6wZuuWUPPm0gV8C0cU3+ifcWuw==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/is-array-buffer": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz", - "integrity": "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-content-length": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.14.tgz", - "integrity": "sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw==", - "dev": true, - "requires": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-endpoint": { - "version": "4.4.32", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.32.tgz", - "integrity": "sha512-ZZkgyjnJppiZbIm6Qbx92pbXYi1uzenIvGhBSCDlc7NwuAkiqSgS75j1czAD25ZLs2FjMjYy1q7gyRVWG6JA0Q==", - "dev": true, - "requires": { - "@smithy/core": "^3.23.17", - "@smithy/middleware-serde": "^4.2.20", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-middleware": "^4.2.14", - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-retry": { - "version": "4.5.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.5.7.tgz", - "integrity": "sha512-bRt6ZImqVSeTk39Nm81K20ObIiAZ3WefY7G6+iz/0tZjs4dgRRjvRX2sgsH+zi6iDCRR/aQvQofLKxxz4rPBZg==", - "dev": true, - "requires": { - "@smithy/core": "^3.23.17", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/service-error-classification": "^4.3.1", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.6", - "@smithy/uuid": "^1.1.2", - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-serde": { - "version": "4.2.20", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.20.tgz", - "integrity": "sha512-Lx9JMO9vArPtiChE3wbEZ5akMIDQpWQtlu90lhACQmNOXcGXRbaDywMHDzuDZ2OkZzP+9wQfZi3YJT9F67zTQQ==", - "dev": true, - "requires": { - "@smithy/core": "^3.23.17", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-stack": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.14.tgz", - "integrity": "sha512-2dvkUKLuFdKsCRmOE4Mn63co0Djtsm+JMh0bYZQupN1pJwMeE8FmQmRLLzzEMN0dnNi7CDCYYH8F0EVwWiPBeA==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/node-config-provider": { - "version": "4.3.14", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.14.tgz", - "integrity": "sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg==", - "dev": true, - "requires": { - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/node-http-handler": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.6.1.tgz", - "integrity": "sha512-iB+orM4x3xrr57X3YaXazfKnntl0LHlZB1kcXSGzMV1Tt0+YwEjGlbjk/44qEGtBzXAz6yFDzkYTKSV6Pj2HUg==", - "dev": true, - "requires": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/querystring-builder": "^4.2.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/property-provider": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.14.tgz", - "integrity": "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/protocol-http": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.14.tgz", - "integrity": "sha512-dN5F8kHx8RNU0r+pCwNmFZyz6ChjMkzShy/zup6MtkRmmix4vZzJdW+di7x//b1LiynIev88FM18ie+wwPcQtQ==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/querystring-builder": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.14.tgz", - "integrity": "sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "@smithy/util-uri-escape": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@smithy/querystring-parser": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.14.tgz", - "integrity": "sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/service-error-classification": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.3.1.tgz", - "integrity": "sha512-aUQuDGh760ts/8MU+APjIZhlLPKhIIfqyzZaJikLEIMrdxFvxuLYD0WxWzaYWpmLbQlXDe9p7EWM3HsBe0K6Gw==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1" - } - }, - "@smithy/shared-ini-file-loader": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.9.tgz", - "integrity": "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/signature-v4": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.14.tgz", - "integrity": "sha512-1D9Y/nmlVjCeSivCbhZ7hgEpmHyY1h0GvpSZt3l0xcD9JjmjVC1CHOozS6+Gh+/ldMH8JuJ6cujObQqfayAVFA==", - "dev": true, - "requires": { - "@smithy/is-array-buffer": "^4.2.2", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-hex-encoding": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-uri-escape": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@smithy/smithy-client": { - "version": "4.12.13", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.13.tgz", - "integrity": "sha512-y/Pcj1V9+qG98gyu1gvftHB7rDpdh+7kIBIggs55yGm3JdtBV8GT8IFF3a1qxZ79QnaJHX9GXzvBG6tAd+czJA==", - "dev": true, - "requires": { - "@smithy/core": "^3.23.17", - "@smithy/middleware-endpoint": "^4.4.32", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-stream": "^4.5.25", - "tslib": "^2.6.2" - } - }, - "@smithy/types": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.1.tgz", - "integrity": "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/url-parser": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.14.tgz", - "integrity": "sha512-p06BiBigJ8bTA3MgnOfCtDUWnAMY0YfedO/GRpmc7p+wg3KW8vbXy1xwSu5ASy0wV7rRYtlfZOIKH4XqfhjSQQ==", - "dev": true, - "requires": { - "@smithy/querystring-parser": "^4.2.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/util-base64": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", - "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", - "dev": true, - "requires": { - "@smithy/util-buffer-from": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@smithy/util-body-length-browser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz", - "integrity": "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-body-length-node": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz", - "integrity": "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-buffer-from": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz", - "integrity": "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==", - "dev": true, - "requires": { - "@smithy/is-array-buffer": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@smithy/util-config-provider": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz", - "integrity": "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-defaults-mode-browser": { - "version": "4.3.49", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.49.tgz", - "integrity": "sha512-a5bNrdiONYB/qE2BuKegvUMd/+ZDwdg4vsNuuSzYE8qs2EYAdK9CynL+Rzn29PbPiUqoz/cbpRbcLzD5lEevHw==", - "dev": true, - "requires": { - "@smithy/property-provider": "^4.2.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/util-defaults-mode-node": { - "version": "4.2.54", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.54.tgz", - "integrity": "sha512-g1cvrJvOnzeJgEdf7AE4luI7gp6L8weE0y9a9wQUSGtjb8QRHDbCJYuE4Sy0SD9N8RrnNPFsPltAz/OSoBR9Zw==", - "dev": true, - "requires": { - "@smithy/config-resolver": "^4.4.17", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/smithy-client": "^4.12.13", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/util-endpoints": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.4.2.tgz", - "integrity": "sha512-a55Tr+3OKld4TTtnT+RhKOQHyPxm3j/xL4OR83WBUhLJaKDS9dnJ7arRMOp3t31dcLhApwG9bgvrRXBHlLdIkg==", - "dev": true, - "requires": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/util-hex-encoding": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz", - "integrity": "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-middleware": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.14.tgz", - "integrity": "sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/util-retry": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.3.8.tgz", - "integrity": "sha512-LUIxbTBi+OpvXpg91poGA6BdyoleMDLnfXjVDqyi2RvZmTveY5loE/FgYUBCR5LU2BThW2SoZRh8dTIIy38IPw==", - "dev": true, - "requires": { - "@smithy/service-error-classification": "^4.3.1", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/util-stream": { - "version": "4.5.25", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.25.tgz", - "integrity": "sha512-/PFpG4k8Ze8Ei+mMKj3oiPICYekthuzePZMgZbCqMiXIHHf4n2aZ4Ps0aSRShycFTGuj/J6XldmC0x0DwednIA==", - "dev": true, - "requires": { - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/node-http-handler": "^4.6.1", - "@smithy/types": "^4.14.1", - "@smithy/util-base64": "^4.3.2", - "@smithy/util-buffer-from": "^4.2.2", - "@smithy/util-hex-encoding": "^4.2.2", - "@smithy/util-utf8": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@smithy/util-uri-escape": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz", - "integrity": "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-utf8": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", - "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "dev": true, - "requires": { - "@smithy/util-buffer-from": "^4.2.2", - "tslib": "^2.6.2" - } - }, - "@smithy/util-waiter": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.3.0.tgz", - "integrity": "sha512-JyjYmLAfS+pdxF92o4yLgEoy0zhayKTw73FU1aofLWwLcJw7iSqIY2exGmMTrl/lmZugP5p/zxdFSippJDfKWA==", - "dev": true, - "requires": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@smithy/uuid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.2.tgz", - "integrity": "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==", - "dev": true, - "requires": { - "tslib": "^2.6.2" - } - }, - "@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", - "dev": true, - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "@types/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", - "dev": true, - "requires": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", - "dev": true, - "requires": { - "@types/chai": "*" - } - }, - "@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true - }, - "@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "dev": true - }, - "@types/secp256k1": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", - "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "@zksync/contracts": { - "version": "git+ssh://git@github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9", - "integrity": "sha512-Uke6C3HTDonp/sqP4SlNxU40YL9TK1ICCubcmEBryGQoZCa0z9oc3GSUZ1WBAHQ9HhLiHnpqpayFNmq9fZkK7Q==", - "dev": true, - "from": "@zksync/contracts@git+https://github.com/matter-labs/era-contracts.git#446d391d34bdb48255d5f8fef8a8248925fc98b9" - }, - "acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true, - "peer": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "amazon-cognito-identity-js": { - "version": "6.3.16", - "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.16.tgz", - "integrity": "sha512-HPGSBGD6Q36t99puWh0LnptxO/4icnk2kqIQ9cTJ2tFQo5NMUnWQIgtrTAk8nm+caqUbjDzXzG56GBjI2tS6jQ==", - "dev": true, - "requires": { - "@aws-crypto/sha256-js": "1.2.2", - "buffer": "4.9.2", - "fast-base64-decode": "^1.0.0", - "isomorphic-unfetch": "^3.0.0", - "js-cookie": "^2.2.1" - }, - "dependencies": { - "@aws-crypto/sha256-js": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", - "integrity": "sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==", - "dev": true, - "requires": { - "@aws-crypto/util": "^1.2.2", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" - } - }, - "@aws-crypto/util": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz", - "integrity": "sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "requires": { - "string-width": "^4.1.0" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true - }, - "async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "dev": true, - "requires": { - "retry": "0.13.1" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "requires": { - "possible-typed-array-names": "^1.0.0" - } - }, - "axios": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz", - "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==", - "dev": true, - "requires": { - "follow-redirects": "^1.16.0", - "form-data": "^4.0.5", - "proxy-from-env": "^2.1.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true - }, - "better-path-resolve": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", - "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", - "dev": true, - "requires": { - "is-windows": "^1.0.0" - } - }, - "bignumber.js": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", - "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true - }, - "bn.js": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", - "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", - "dev": true - }, - "bowser": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", - "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", - "dev": true - }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "requires": { - "fill-range": "^7.1.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "bufio": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.2.3.tgz", - "integrity": "sha512-5Tt66bRzYUSlVZatc0E92uDenreJ+DpTBmSAUwL4VSxJn3e6cUyYwx+PoqML0GRZatgA/VX8ybhxItF8InZgqA==", - "dev": true - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "c3-linearization": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/c3-linearization/-/c3-linearization-0.3.0.tgz", - "integrity": "sha512-eQNsZQhFSJAhrNrITy2FpKh7EHS98q/pniDtQhndWqqsvayiPeqZ9T6I9V9PsHcm0nc+ZYJHKUvI/hh37I33HQ==", - "dev": true - }, - "call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "requires": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - } - }, - "call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - } - }, - "call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "requires": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "cbor": { - "version": "10.0.11", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-10.0.11.tgz", - "integrity": "sha512-vIwORDd/WyB8Nc23o2zNN5RrtFGlR6Fca61TtjkUXueI3Jf2DOZDl1zsshvBntZ3wZHBM9ztjnkXSmzQDaq3WA==", - "dev": true, - "requires": { - "nofilter": "^3.0.2" - } - }, - "chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - }, - "dependencies": { - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - } - } - }, - "chai-as-promised": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", - "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", - "dev": true, - "requires": { - "check-error": "^1.0.2" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true - }, - "check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "requires": { - "get-func-name": "^2.0.2" - } - }, - "chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "requires": { - "readdirp": "^4.0.1" - } - }, - "ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", - "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.2" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "compare-versions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", - "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - } - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true - }, - "dataloader": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", - "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==", - "dev": true - }, - "debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "diff": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", - "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - }, - "dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - } - }, - "elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true - }, - "es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "requires": { - "es-errors": "^1.3.0" - } - }, - "es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - } - }, - "escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "eslint-config-prettier": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true - }, - "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "eth-gas-reporter": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", - "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", - "dev": true, - "requires": { - "@solidity-parser/parser": "^0.14.0", - "axios": "^1.5.1", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^5.7.2", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^10.2.0", - "req-cwd": "^2.0.0", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true - }, - "@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true - }, - "@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "requires": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "requires": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } - }, - "ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "requires": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "ethers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", - "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.8.0", - "@ethersproject/abstract-provider": "5.8.0", - "@ethersproject/abstract-signer": "5.8.0", - "@ethersproject/address": "5.8.0", - "@ethersproject/base64": "5.8.0", - "@ethersproject/basex": "5.8.0", - "@ethersproject/bignumber": "5.8.0", - "@ethersproject/bytes": "5.8.0", - "@ethersproject/constants": "5.8.0", - "@ethersproject/contracts": "5.8.0", - "@ethersproject/hash": "5.8.0", - "@ethersproject/hdnode": "5.8.0", - "@ethersproject/json-wallets": "5.8.0", - "@ethersproject/keccak256": "5.8.0", - "@ethersproject/logger": "5.8.0", - "@ethersproject/networks": "5.8.0", - "@ethersproject/pbkdf2": "5.8.0", - "@ethersproject/properties": "5.8.0", - "@ethersproject/providers": "5.8.0", - "@ethersproject/random": "5.8.0", - "@ethersproject/rlp": "5.8.0", - "@ethersproject/sha2": "5.8.0", - "@ethersproject/signing-key": "5.8.0", - "@ethersproject/solidity": "5.8.0", - "@ethersproject/strings": "5.8.0", - "@ethersproject/transactions": "5.8.0", - "@ethersproject/units": "5.8.0", - "@ethersproject/wallet": "5.8.0", - "@ethersproject/web": "5.8.0", - "@ethersproject/wordlists": "5.8.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethers": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", - "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", - "dev": true, - "peer": true, - "requires": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" - }, - "dependencies": { - "@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "dev": true, - "peer": true, - "requires": { - "undici-types": "~6.19.2" - } - }, - "tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true, - "peer": true - } - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "extendable-error": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", - "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "fast-base64-decode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", - "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fast-xml-builder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", - "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", - "dev": true, - "requires": { - "path-expression-matcher": "^1.5.0", - "xml-naming": "^0.1.0" - } - }, - "fast-xml-parser": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz", - "integrity": "sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==", - "dev": true, - "requires": { - "@nodable/entities": "^2.1.0", - "fast-xml-builder": "^1.1.5", - "path-expression-matcher": "^1.5.0", - "strnum": "^2.2.3" - } - }, - "fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "requires": { - "micromatch": "^4.0.2" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "requires": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true - }, - "follow-redirects": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", - "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", - "dev": true - }, - "for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "requires": { - "is-callable": "^1.2.7" - } - }, - "form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - } - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true - }, - "get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "requires": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - } - }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "dev": true - }, - "get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "requires": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "dependencies": { - "minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "graphviz": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz", - "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==", - "dev": true, - "requires": { - "temp": "~0.4.0" - } - }, - "hardhat": { - "version": "2.28.6", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.6.tgz", - "integrity": "sha512-zQze7qe+8ltwHvhX5NQ8sN1N37WWZGw8L63y+2XcPxGwAjc/SMF829z3NS6o1krX0sryhAsVBK/xrwUqlsot4Q==", - "dev": true, - "requires": { - "@ethereumjs/util": "^9.1.0", - "@ethersproject/abi": "^5.1.2", - "@nomicfoundation/edr": "0.12.0-next.23", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "boxen": "^5.1.2", - "chokidar": "^4.0.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "find-up": "^5.0.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "json-stream-stringify": "^3.1.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "micro-eth-signer": "^0.14.0", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "picocolors": "^1.1.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.8.26", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tinyglobby": "^0.2.6", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true - }, - "@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true - }, - "@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "requires": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "requires": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "requires": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "undici": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", - "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", - "dev": true, - "requires": { - "@fastify/busboy": "^2.0.0" - } - }, - "ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, - "requires": {} - } - } - }, - "hardhat-contract-sizer": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.1.tgz", - "integrity": "sha512-/PPQQbUMgW6ERzk8M0/DA8/v2TEM9xRRAnF9qKPNMYF6FX5DFWcnxBsQvtp8uBz+vy7rmLyV9Elti2wmmhgkbg==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "cli-table3": "^0.6.0", - "strip-ansi": "^6.0.0" - } - }, - "hardhat-gas-reporter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", - "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", - "dev": true, - "requires": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.3" - } - }, - "hash-base": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", - "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "requires": { - "function-bind": "^1.1.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dev": true, - "requires": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - } - }, - "http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "requires": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - } - }, - "http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dev": true, - "requires": { - "@types/node": "^10.0.3" - }, - "dependencies": { - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true - } - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-id": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", - "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true - }, - "immutable": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz", - "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==", - "dev": true - }, - "import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "requires": { - "fp-ts": "^1.0.0" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - }, - "dependencies": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - } - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-subdir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", - "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", - "dev": true, - "requires": { - "better-path-resolve": "1.0.0" - } - }, - "is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "requires": { - "which-typed-array": "^1.1.16" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, - "js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", - "dev": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json-stream-stringify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", - "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true, - "peer": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "requires": { - "get-func-name": "^2.0.1" - } - }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "dev": true - }, - "math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micro-eth-signer": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", - "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", - "dev": true, - "requires": { - "@noble/curves": "~1.8.1", - "@noble/hashes": "~1.7.1", - "micro-packed": "~0.7.2" - }, - "dependencies": { - "@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", - "dev": true, - "requires": { - "@noble/hashes": "1.7.2" - } - }, - "@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", - "dev": true - } - } - }, - "micro-packed": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", - "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", - "dev": true, - "requires": { - "@scure/base": "~1.2.5" - } - }, - "micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "requires": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.2" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "requires": { - "obliterator": "^2.0.0" - } - }, - "mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "dependencies": { - "chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "dev": true - }, - "nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true - }, - "obliterator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", - "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "requires": { - "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" - } - }, - "ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "outdent": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", - "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", - "dev": true - }, - "p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "dev": true, - "requires": { - "p-map": "^2.0.0" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-manager-detector": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", - "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", - "dev": true, - "requires": { - "quansync": "^0.2.7" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", - "dev": true - }, - "patch-package": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz", - "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==", - "dev": true, - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^1.10.2" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true - } - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-expression-matcher": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", - "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", - "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", - "dev": true, - "requires": { - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "ripemd160": "^2.0.3", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.12", - "to-buffer": "^1.2.1" - } - }, - "picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", - "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", - "dev": true, - "peer": true - }, - "prettier-plugin-solidity": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-2.3.1.tgz", - "integrity": "sha512-71sZM5oqgq6pnTlf+RH23U6Ej710APfCiMWO2Z/pHNjrXyvn9Nr0vTS1AUVaSf4GRW0V6hj6Djt0MyWudJUJbQ==", - "dev": true, - "requires": { - "@nomicfoundation/slang": "1.3.4", - "@solidity-parser/parser": "^0.20.2", - "semver": "^7.7.4" - }, - "dependencies": { - "@bytecodealliance/preview2-shim": { - "version": "0.17.8", - "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.8.tgz", - "integrity": "sha512-wS5kg8u0KCML1UeHQPJ1IuOI24x/XLentCzsqPER1+gDNC5Cz2hG4G2blLOZap+3CEGhIhnJ9mmZYj6a2W0Lww==", - "dev": true - }, - "@nomicfoundation/slang": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-1.3.4.tgz", - "integrity": "sha512-ghzrPSYH1sZO65id6+Bq2Ood87HT54QP3RGC8EkmpcrJ6tT9Ky0RtaJfrzV5G4jpDsnNua6+YEDpzOMori04hQ==", - "dev": true, - "requires": { - "@bytecodealliance/preview2-shim": "^0.17.2" - } - }, - "@solidity-parser/parser": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", - "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "requires": { - "asap": "~2.0.6" - } - }, - "proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - } - } - }, - "proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", - "dev": true - }, - "punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true - }, - "qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", - "dev": true, - "requires": { - "side-channel": "^1.1.0" - } - }, - "quansync": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "dev": true, - "requires": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" - } - }, - "read-yaml-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", - "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.5", - "js-yaml": "^3.6.1", - "pify": "^4.0.1", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true - }, - "req-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", - "dev": true, - "requires": { - "req-from": "^2.0.0" - } - }, - "req-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - }, - "reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "ripemd160": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", - "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", - "dev": true, - "requires": { - "hash-base": "^3.1.2", - "inherits": "^2.0.4" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "secp256k1": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", - "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", - "dev": true, - "requires": { - "elliptic": "^6.5.7", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" - }, - "dependencies": { - "node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "dev": true - } - } - }, - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - } - }, - "sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "dev": true, - "requires": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - } - }, - "sha1-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sha1-file/-/sha1-file-2.0.1.tgz", - "integrity": "sha512-L4Kum9Lp8cWqcGKycZcXxR6spUoG4idDIUzAKjPiELnIZWxiFlZ5HFVzFxVxuWuGPsrraeL0JoGk0nFZ7AGFEQ==", - "dev": true, - "requires": { - "hasha": "^5.2.0" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - } - }, - "side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - } - }, - "side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - } - }, - "side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "solc": { - "version": "0.8.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", - "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - } - } - }, - "solidity-ast": { - "version": "0.4.61", - "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.61.tgz", - "integrity": "sha512-OYBJYcYyG7gLV0VuXl9CUrvgJXjV/v0XnR4+1YomVe3q+QyENQXJJxAEASUz4vN6lMAl+C8RSRSr5MBAz09f6w==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spawndamnit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", - "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.5", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stacktrace-parser": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", - "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", - "dev": true, - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true - } - } - }, - "statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "strnum": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz", - "integrity": "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "surya": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/surya/-/surya-0.4.13.tgz", - "integrity": "sha512-ff2YmkYu9+u9A1tUv6cEuQDhLw1N+++iI+ZenXyhYR7YmaiQ19h32p2VchBn6zy3JPcfpvBZjf/aEmLbSMW1WA==", - "dev": true, - "requires": { - "@solidity-parser/parser": "^0.16.1", - "c3-linearization": "^0.3.0", - "colors": "^1.4.0", - "graphviz": "0.0.9", - "sha1-file": "^2.0.0", - "treeify": "^1.1.0", - "yargs": "^17.0.0" - }, - "dependencies": { - "@solidity-parser/parser": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.2.tgz", - "integrity": "sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==", - "dev": true, - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } - } - }, - "sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dev": true, - "requires": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - } - }, - "sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dev": true, - "requires": { - "get-port": "^3.1.0" - } - }, - "temp": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", - "integrity": "sha512-IsFisGgDKk7qzK9erMIkQe/XwiSUdac7z3wYOsjcLkhPBy3k1SlvLoIh2dAHIlEpgA971CgguMrx9z8fFg7tSA==", - "dev": true - }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dev": true, - "requires": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "dev": true - }, - "form-data": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", - "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.35", - "safe-buffer": "^5.2.1" - } - } - } - }, - "tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "requires": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "dependencies": { - "fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "requires": {} - }, - "picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true - } - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-buffer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", - "dev": true, - "requires": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", - "dev": true - }, - "tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, - "tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "undici": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.25.0.tgz", - "integrity": "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==", - "dev": true - }, - "undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "peer": true - }, - "unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, - "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true - }, - "workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "peer": true, - "requires": {} - }, - "xml-naming": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", - "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yaml": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", - "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } } } diff --git a/package.json b/package.json index 65855fa..01e543a 100644 --- a/package.json +++ b/package.json @@ -17,13 +17,13 @@ "author": "", "homepage": "https://github.com/CMTA/CMTAT-ACE#readme", "devDependencies": { - "@chainlink/ace": "^1.0.0", + "@chainlink/ace": "1.0.0", "@chainlink/contracts": "1.3.0", "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", "@nomicfoundation/hardhat-foundry": "^1.2.1", "@nomicfoundation/hardhat-network-helpers": "^1.1.2", - "@openzeppelin/contracts": "5.5.0", - "@openzeppelin/contracts-upgradeable": "5.5.0", + "@openzeppelin/contracts": "5.6.1", + "@openzeppelin/contracts-upgradeable": "5.6.1", "@openzeppelin/hardhat-upgrades": "^3.2.0", "@openzeppelin/upgrades-core": "^1.44.1", "eslint": "^8.57.1", @@ -33,5 +33,8 @@ "hardhat-gas-reporter": "^1.0.9", "prettier-plugin-solidity": "^2.3.1", "surya": "^0.4.13" + }, + "dependencies": { + "solidity-coverage": "^0.8.17" } } From 96588e58e75f428d0928aa1af15c8353162a0b81 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Tue, 12 May 2026 15:55:21 +0200 Subject: [PATCH 50/57] Add coverage files --- doc/coverage/coverage.json | 1 + doc/coverage/coverage/base.css | 213 ++++ doc/coverage/coverage/coverage-final.json | 20 + ...omplianceTokenCMTATLiteStandalone.sol.html | 194 +++ ...anceTokenCMTATLiteUUPSUpgradeable.sol.html | 149 +++ ...mplianceTokenCMTATLiteUpgradeable.sol.html | 119 ++ .../coverage/deployment/lite/index.html | 119 ++ .../ComplianceTokenCMTATStandalone.sol.html | 194 +++ ...mplianceTokenCMTATUUPSUpgradeable.sol.html | 137 +++ .../ComplianceTokenCMTATUpgradeable.sol.html | 119 ++ .../coverage/deployment/standard/index.html | 119 ++ doc/coverage/coverage/index.html | 184 +++ doc/coverage/coverage/lcov-report/base.css | 213 ++++ ...omplianceTokenCMTATLiteStandalone.sol.html | 194 +++ ...anceTokenCMTATLiteUUPSUpgradeable.sol.html | 149 +++ ...mplianceTokenCMTATLiteUpgradeable.sol.html | 119 ++ .../lcov-report/deployment/lite/index.html | 119 ++ .../ComplianceTokenCMTATStandalone.sol.html | 194 +++ ...mplianceTokenCMTATUUPSUpgradeable.sol.html | 137 +++ .../ComplianceTokenCMTATUpgradeable.sol.html | 119 ++ .../deployment/standard/index.html | 119 ++ doc/coverage/coverage/lcov-report/index.html | 184 +++ .../ERC20TransferFromExtractor.sol.html | 230 ++++ .../custom/TransferValidationPolicy.sol.html | 470 ++++++++ .../modules/chainlink-ace/custom/index.html | 106 ++ .../PolicyProtectedUpgradeableMocks.sol.html | 449 +++++++ .../mocks/TransferRuleMocks.sol.html | 536 +++++++++ .../modules/chainlink-ace/mocks/index.html | 106 ++ .../modified/MintBurnExtractor.sol.html | 218 ++++ .../PolicyProtectedUpgradeable.sol.html | 452 +++++++ .../modules/chainlink-ace/modified/index.html | 106 ++ .../modules/demo/DemoImports.sol.html | 110 ++ .../lcov-report/modules/demo/index.html | 93 ++ .../modules/lite/CCTCMTATBaseERC1404.sol.html | 326 +++++ .../lite/CCTCMTATBaseERC20CrossChain.sol.html | 572 +++++++++ .../lite/CCTCMTATBasePolicyEngine.sol.html | 674 +++++++++++ .../PolicyValidationModuleERC1404.sol.html | 440 +++++++ .../ValidationModulePolicyEngine.sol.html | 428 +++++++ .../lcov-report/modules/lite/index.html | 145 +++ .../modules/standard/CCTCommon.sol.html | 1055 +++++++++++++++++ .../lcov-report/modules/standard/index.html | 93 ++ .../coverage/lcov-report/prettify.css | 1 + doc/coverage/coverage/lcov-report/prettify.js | 1 + .../lcov-report/sort-arrow-sprite.png | Bin 0 -> 209 bytes doc/coverage/coverage/lcov-report/sorter.js | 158 +++ doc/coverage/coverage/lcov.info | 950 +++++++++++++++ .../ERC20TransferFromExtractor.sol.html | 230 ++++ .../custom/TransferValidationPolicy.sol.html | 470 ++++++++ .../modules/chainlink-ace/custom/index.html | 106 ++ .../PolicyProtectedUpgradeableMocks.sol.html | 449 +++++++ .../mocks/TransferRuleMocks.sol.html | 536 +++++++++ .../modules/chainlink-ace/mocks/index.html | 106 ++ .../modified/MintBurnExtractor.sol.html | 218 ++++ .../PolicyProtectedUpgradeable.sol.html | 452 +++++++ .../modules/chainlink-ace/modified/index.html | 106 ++ .../modules/demo/DemoImports.sol.html | 110 ++ doc/coverage/coverage/modules/demo/index.html | 93 ++ .../modules/lite/CCTCMTATBaseERC1404.sol.html | 326 +++++ .../lite/CCTCMTATBaseERC20CrossChain.sol.html | 572 +++++++++ .../lite/CCTCMTATBasePolicyEngine.sol.html | 674 +++++++++++ .../PolicyValidationModuleERC1404.sol.html | 440 +++++++ .../ValidationModulePolicyEngine.sol.html | 428 +++++++ doc/coverage/coverage/modules/lite/index.html | 145 +++ .../modules/standard/CCTCommon.sol.html | 1055 +++++++++++++++++ .../coverage/modules/standard/index.html | 93 ++ doc/coverage/coverage/prettify.css | 1 + doc/coverage/coverage/prettify.js | 1 + doc/coverage/coverage/sort-arrow-sprite.png | Bin 0 -> 209 bytes doc/coverage/coverage/sorter.js | 158 +++ 69 files changed, 17603 insertions(+) create mode 100644 doc/coverage/coverage.json create mode 100644 doc/coverage/coverage/base.css create mode 100644 doc/coverage/coverage/coverage-final.json create mode 100644 doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html create mode 100644 doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html create mode 100644 doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html create mode 100644 doc/coverage/coverage/deployment/lite/index.html create mode 100644 doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATStandalone.sol.html create mode 100644 doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html create mode 100644 doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html create mode 100644 doc/coverage/coverage/deployment/standard/index.html create mode 100644 doc/coverage/coverage/index.html create mode 100644 doc/coverage/coverage/lcov-report/base.css create mode 100644 doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html create mode 100644 doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html create mode 100644 doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html create mode 100644 doc/coverage/coverage/lcov-report/deployment/lite/index.html create mode 100644 doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATStandalone.sol.html create mode 100644 doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html create mode 100644 doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html create mode 100644 doc/coverage/coverage/lcov-report/deployment/standard/index.html create mode 100644 doc/coverage/coverage/lcov-report/index.html create mode 100644 doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/index.html create mode 100644 doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/index.html create mode 100644 doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/MintBurnExtractor.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/index.html create mode 100644 doc/coverage/coverage/lcov-report/modules/demo/DemoImports.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/demo/index.html create mode 100644 doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC1404.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBasePolicyEngine.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/lite/PolicyValidationModuleERC1404.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/lite/ValidationModulePolicyEngine.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/lite/index.html create mode 100644 doc/coverage/coverage/lcov-report/modules/standard/CCTCommon.sol.html create mode 100644 doc/coverage/coverage/lcov-report/modules/standard/index.html create mode 100644 doc/coverage/coverage/lcov-report/prettify.css create mode 100644 doc/coverage/coverage/lcov-report/prettify.js create mode 100644 doc/coverage/coverage/lcov-report/sort-arrow-sprite.png create mode 100644 doc/coverage/coverage/lcov-report/sorter.js create mode 100644 doc/coverage/coverage/lcov.info create mode 100644 doc/coverage/coverage/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html create mode 100644 doc/coverage/coverage/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html create mode 100644 doc/coverage/coverage/modules/chainlink-ace/custom/index.html create mode 100644 doc/coverage/coverage/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html create mode 100644 doc/coverage/coverage/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html create mode 100644 doc/coverage/coverage/modules/chainlink-ace/mocks/index.html create mode 100644 doc/coverage/coverage/modules/chainlink-ace/modified/MintBurnExtractor.sol.html create mode 100644 doc/coverage/coverage/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html create mode 100644 doc/coverage/coverage/modules/chainlink-ace/modified/index.html create mode 100644 doc/coverage/coverage/modules/demo/DemoImports.sol.html create mode 100644 doc/coverage/coverage/modules/demo/index.html create mode 100644 doc/coverage/coverage/modules/lite/CCTCMTATBaseERC1404.sol.html create mode 100644 doc/coverage/coverage/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html create mode 100644 doc/coverage/coverage/modules/lite/CCTCMTATBasePolicyEngine.sol.html create mode 100644 doc/coverage/coverage/modules/lite/PolicyValidationModuleERC1404.sol.html create mode 100644 doc/coverage/coverage/modules/lite/ValidationModulePolicyEngine.sol.html create mode 100644 doc/coverage/coverage/modules/lite/index.html create mode 100644 doc/coverage/coverage/modules/standard/CCTCommon.sol.html create mode 100644 doc/coverage/coverage/modules/standard/index.html create mode 100644 doc/coverage/coverage/prettify.css create mode 100644 doc/coverage/coverage/prettify.js create mode 100644 doc/coverage/coverage/sort-arrow-sprite.png create mode 100644 doc/coverage/coverage/sorter.js diff --git a/doc/coverage/coverage.json b/doc/coverage/coverage.json new file mode 100644 index 0000000..bf75ba1 --- /dev/null +++ b/doc/coverage/coverage.json @@ -0,0 +1 @@ +{"contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol":{"l":{"34":47},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol","s":{"1":47},"b":{},"f":{"1":47},"fnMap":{"1":{"name":"constructor","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":42,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":1480}}},"branchMap":{}},"contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol":{"l":{"16":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol","s":{"1":1},"b":{},"f":{"1":1},"fnMap":{"1":{"name":"constructor","line":14,"loc":{"start":{"line":14,"column":4},"end":{"line":17,"column":4}}}},"statementMap":{"1":{"start":{"line":16,"column":8},"end":{"line":16,"column":29}}},"branchMap":{}},"contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol":{"l":{"19":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol","s":{"1":1},"b":{"1":[2,1]},"f":{"1":1,"2":2},"fnMap":{"1":{"name":"constructor","line":17,"loc":{"start":{"line":17,"column":4},"end":{"line":20,"column":4}}},"2":{"name":"_authorizeUpgrade","line":27,"loc":{"start":{"line":25,"column":4},"end":{"line":27,"column":79}}}},"statementMap":{"1":{"start":{"line":19,"column":8},"end":{"line":19,"column":29}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":49},"end":{"line":27,"column":49}},{"start":{"line":27,"column":49},"end":{"line":27,"column":49}}]}}},"contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol":{"l":{"34":8},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol","s":{"1":8},"b":{},"f":{"1":8},"fnMap":{"1":{"name":"constructor","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":42,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":1416}}},"branchMap":{}},"contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol":{"l":{"16":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol","s":{"1":1},"b":{},"f":{"1":1},"fnMap":{"1":{"name":"constructor","line":14,"loc":{"start":{"line":14,"column":4},"end":{"line":17,"column":4}}}},"statementMap":{"1":{"start":{"line":16,"column":8},"end":{"line":16,"column":29}}},"branchMap":{}},"contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol":{"l":{"17":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol","s":{"1":1},"b":{"1":[2,1]},"f":{"1":1,"2":2},"fnMap":{"1":{"name":"constructor","line":15,"loc":{"start":{"line":15,"column":4},"end":{"line":18,"column":4}}},"2":{"name":"_authorizeUpgrade","line":23,"loc":{"start":{"line":23,"column":4},"end":{"line":23,"column":112}}}},"statementMap":{"1":{"start":{"line":17,"column":8},"end":{"line":17,"column":29}}},"branchMap":{"1":{"line":23,"type":"if","locations":[{"start":{"line":23,"column":101},"end":{"line":23,"column":101}},{"start":{"line":23,"column":101},"end":{"line":23,"column":101}}]}}},"contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol":{"l":{"31":34,"32":34,"33":34,"34":34,"36":34,"37":30,"38":30,"39":30,"41":4,"42":4,"44":0,"47":34,"48":34,"49":34,"50":34,"51":34,"53":34},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol","s":{"1":34,"2":34,"3":34,"4":34,"5":34,"6":4,"7":34,"8":34},"b":{"1":[30,4],"2":[4,0]},"f":{"1":34},"fnMap":{"1":{"name":"extract","line":28,"loc":{"start":{"line":28,"column":4},"end":{"line":54,"column":4}}}},"statementMap":{"1":{"start":{"line":31,"column":8},"end":{"line":31,"column":23}},"2":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"3":{"start":{"line":33,"column":8},"end":{"line":33,"column":18}},"4":{"start":{"line":34,"column":8},"end":{"line":34,"column":22}},"5":{"start":{"line":36,"column":8},"end":{"line":36,"column":1498}},"6":{"start":{"line":40,"column":15},"end":{"line":40,"column":1711}},"7":{"start":{"line":47,"column":8},"end":{"line":47,"column":82}},"8":{"start":{"line":53,"column":8},"end":{"line":53,"column":21}}},"branchMap":{"1":{"line":36,"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":36,"column":8}},{"start":{"line":36,"column":8},"end":{"line":36,"column":8}}]},"2":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":15},"end":{"line":40,"column":15}},{"start":{"line":40,"column":15},"end":{"line":40,"column":15}}]}}},"contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol":{"l":{"38":69,"49":33,"50":30,"51":30,"52":30,"53":37,"54":37,"64":2,"65":2,"66":2,"67":2,"68":2,"69":2,"71":2,"78":1,"85":1,"101":35,"102":35,"104":35,"106":33,"107":33,"108":33,"109":33,"111":33,"112":35,"113":35,"114":13,"115":13,"120":2,"121":2,"122":2,"124":2,"125":2,"126":2,"127":1,"128":1,"133":21},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol","s":{"1":33,"2":30,"3":30,"4":30,"5":37,"6":37,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":1,"14":1,"15":35,"16":35,"17":35,"18":33,"19":33,"20":33,"21":33,"22":33,"23":35,"24":35,"25":13,"26":2,"27":2,"28":2,"29":2,"30":2,"31":2,"32":1,"33":21},"b":{"1":[33,0],"2":[30,3],"3":[37,0],"4":[2,1],"5":[2,0],"6":[33,2],"7":[13,22],"8":[1,1]},"f":{"1":69,"2":33,"3":2,"4":1,"5":1,"6":35},"fnMap":{"1":{"name":"_getStorage","line":37,"loc":{"start":{"line":37,"column":4},"end":{"line":41,"column":4}}},"2":{"name":"configure","line":48,"loc":{"start":{"line":48,"column":4},"end":{"line":57,"column":4}}},"3":{"name":"setRules","line":63,"loc":{"start":{"line":63,"column":4},"end":{"line":72,"column":4}}},"4":{"name":"rules","line":77,"loc":{"start":{"line":77,"column":4},"end":{"line":79,"column":4}}},"5":{"name":"rulesCount","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":86,"column":4}}},"6":{"name":"run","line":94,"loc":{"start":{"line":94,"column":4},"end":{"line":134,"column":4}}}},"statementMap":{"1":{"start":{"line":49,"column":8},"end":{"line":49,"column":2016}},"2":{"start":{"line":50,"column":12},"end":{"line":50,"column":76}},"3":{"start":{"line":51,"column":12},"end":{"line":51,"column":63}},"4":{"start":{"line":52,"column":12},"end":{"line":52,"column":2204}},"5":{"start":{"line":53,"column":16},"end":{"line":53,"column":81}},"6":{"start":{"line":54,"column":16},"end":{"line":54,"column":48}},"7":{"start":{"line":64,"column":8},"end":{"line":64,"column":59}},"8":{"start":{"line":65,"column":8},"end":{"line":65,"column":46}},"9":{"start":{"line":67,"column":8},"end":{"line":67,"column":2745}},"10":{"start":{"line":68,"column":12},"end":{"line":68,"column":83}},"11":{"start":{"line":69,"column":12},"end":{"line":69,"column":34}},"12":{"start":{"line":71,"column":8},"end":{"line":71,"column":55}},"13":{"start":{"line":78,"column":8},"end":{"line":78,"column":34}},"14":{"start":{"line":85,"column":8},"end":{"line":85,"column":41}},"15":{"start":{"line":101,"column":8},"end":{"line":101,"column":59}},"16":{"start":{"line":102,"column":8},"end":{"line":102,"column":36}},"17":{"start":{"line":104,"column":8},"end":{"line":104,"column":3910}},"18":{"start":{"line":106,"column":12},"end":{"line":106,"column":66}},"19":{"start":{"line":107,"column":12},"end":{"line":107,"column":63}},"20":{"start":{"line":108,"column":12},"end":{"line":108,"column":61}},"21":{"start":{"line":109,"column":12},"end":{"line":109,"column":65}},"22":{"start":{"line":111,"column":12},"end":{"line":111,"column":4298}},"23":{"start":{"line":112,"column":16},"end":{"line":112,"column":96}},"24":{"start":{"line":113,"column":16},"end":{"line":113,"column":4452}},"25":{"start":{"line":114,"column":20},"end":{"line":114,"column":90}},"26":{"start":{"line":120,"column":12},"end":{"line":120,"column":63}},"27":{"start":{"line":121,"column":12},"end":{"line":121,"column":61}},"28":{"start":{"line":122,"column":12},"end":{"line":122,"column":65}},"29":{"start":{"line":124,"column":12},"end":{"line":124,"column":4945}},"30":{"start":{"line":125,"column":16},"end":{"line":125,"column":83}},"31":{"start":{"line":126,"column":16},"end":{"line":126,"column":5086}},"32":{"start":{"line":127,"column":20},"end":{"line":127,"column":90}},"33":{"start":{"line":133,"column":8},"end":{"line":133,"column":50}}},"branchMap":{"1":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":68},"end":{"line":48,"column":68}},{"start":{"line":48,"column":68},"end":{"line":48,"column":68}}]},"2":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":8},"end":{"line":49,"column":8}},{"start":{"line":49,"column":8},"end":{"line":49,"column":8}}]},"3":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":16},"end":{"line":53,"column":16}},{"start":{"line":53,"column":16},"end":{"line":53,"column":16}}]},"4":{"line":63,"type":"if","locations":[{"start":{"line":63,"column":56},"end":{"line":63,"column":56}},{"start":{"line":63,"column":56},"end":{"line":63,"column":56}}]},"5":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":12},"end":{"line":68,"column":12}},{"start":{"line":68,"column":12},"end":{"line":68,"column":12}}]},"6":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":8},"end":{"line":104,"column":8}},{"start":{"line":104,"column":8},"end":{"line":104,"column":8}}]},"7":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":16},"end":{"line":113,"column":16}},{"start":{"line":113,"column":16},"end":{"line":113,"column":16}}]},"8":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":16},"end":{"line":126,"column":16}},{"start":{"line":126,"column":16},"end":{"line":126,"column":16}}]}}},"contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol":{"l":{"16":1,"20":0,"24":8,"28":1,"29":1,"30":1,"35":5,"45":0,"51":0,"61":0,"67":0,"81":7,"87":1,"91":1,"95":1,"101":1,"117":1,"126":3},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol","s":{"1":0,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0,"8":7,"9":1,"10":1,"11":3},"b":{"1":[1,0],"2":[7,0],"3":[1,1],"4":[1,1],"5":[1,0],"6":[1,0]},"f":{"1":1,"2":0,"3":8,"4":1,"5":5,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":7,"21":1,"22":1,"23":1,"24":1,"25":1,"26":0,"27":0,"28":0,"29":0,"30":1,"31":3},"fnMap":{"1":{"name":"setDetachShouldRevert","line":15,"loc":{"start":{"line":15,"column":4},"end":{"line":17,"column":4}}},"2":{"name":"typeAndVersion","line":19,"loc":{"start":{"line":19,"column":4},"end":{"line":21,"column":4}}},"3":{"name":"attach","line":23,"loc":{"start":{"line":23,"column":4},"end":{"line":25,"column":4}}},"4":{"name":"detach","line":27,"loc":{"start":{"line":27,"column":4},"end":{"line":32,"column":4}}},"5":{"name":"run","line":34,"loc":{"start":{"line":34,"column":4},"end":{"line":36,"column":4}}},"6":{"name":"check","line":38,"loc":{"start":{"line":38,"column":4},"end":{"line":38,"column":61}}},"7":{"name":"setExtractor","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":40,"column":67}}},"8":{"name":"setExtractors","line":42,"loc":{"start":{"line":42,"column":4},"end":{"line":42,"column":79}}},"9":{"name":"getExtractor","line":44,"loc":{"start":{"line":44,"column":4},"end":{"line":46,"column":4}}},"10":{"name":"setPolicyMapper","line":48,"loc":{"start":{"line":48,"column":4},"end":{"line":48,"column":71}}},"11":{"name":"getPolicyMapper","line":50,"loc":{"start":{"line":50,"column":4},"end":{"line":52,"column":4}}},"12":{"name":"addPolicy","line":54,"loc":{"start":{"line":54,"column":4},"end":{"line":54,"column":93}}},"13":{"name":"addPolicyAt","line":56,"loc":{"start":{"line":56,"column":4},"end":{"line":56,"column":104}}},"14":{"name":"removePolicy","line":58,"loc":{"start":{"line":58,"column":4},"end":{"line":58,"column":76}}},"15":{"name":"getPolicies","line":60,"loc":{"start":{"line":60,"column":4},"end":{"line":62,"column":4}}},"16":{"name":"setPolicyConfiguration","line":64,"loc":{"start":{"line":64,"column":4},"end":{"line":64,"column":102}}},"17":{"name":"getPolicyConfigVersion","line":66,"loc":{"start":{"line":66,"column":4},"end":{"line":68,"column":4}}},"18":{"name":"setDefaultPolicyAllow","line":70,"loc":{"start":{"line":70,"column":4},"end":{"line":70,"column":65}}},"19":{"name":"setTargetDefaultPolicyAllow","line":72,"loc":{"start":{"line":72,"column":4},"end":{"line":72,"column":80}}},"20":{"name":"initialize","line":80,"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":4}}},"21":{"name":"_authorizeAttachPolicyEngine","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":84,"column":75}}},"22":{"name":"guardedRun","line":86,"loc":{"start":{"line":86,"column":4},"end":{"line":88,"column":4}}},"23":{"name":"guardedRunWithContext","line":90,"loc":{"start":{"line":90,"column":4},"end":{"line":92,"column":4}}},"24":{"name":"guardedRunAndRevert","line":94,"loc":{"start":{"line":94,"column":4},"end":{"line":96,"column":4}}},"25":{"name":"initializeWithPolicyEngine","line":100,"loc":{"start":{"line":100,"column":4},"end":{"line":102,"column":4}}},"26":{"name":"_authorizeAttachPolicyEngine","line":104,"loc":{"start":{"line":104,"column":4},"end":{"line":104,"column":75}}},"27":{"name":"_authorizePause","line":106,"loc":{"start":{"line":106,"column":4},"end":{"line":106,"column":55}}},"28":{"name":"_authorizeDeactivate","line":108,"loc":{"start":{"line":108,"column":4},"end":{"line":108,"column":60}}},"29":{"name":"_authorizeFreeze","line":110,"loc":{"start":{"line":110,"column":4},"end":{"line":110,"column":56}}},"30":{"name":"exposedTryCheckPolicies","line":112,"loc":{"start":{"line":112,"column":4},"end":{"line":118,"column":4}}},"31":{"name":"exposedTransferred","line":120,"loc":{"start":{"line":120,"column":4},"end":{"line":127,"column":4}}}},"statementMap":{"1":{"start":{"line":20,"column":8},"end":{"line":20,"column":39}},"2":{"start":{"line":29,"column":8},"end":{"line":29,"column":987}},"3":{"start":{"line":30,"column":12},"end":{"line":30,"column":52}},"4":{"start":{"line":45,"column":8},"end":{"line":45,"column":25}},"5":{"start":{"line":51,"column":8},"end":{"line":51,"column":25}},"6":{"start":{"line":61,"column":8},"end":{"line":61,"column":31}},"7":{"start":{"line":67,"column":8},"end":{"line":67,"column":16}},"8":{"start":{"line":81,"column":8},"end":{"line":81,"column":43}},"9":{"start":{"line":101,"column":8},"end":{"line":101,"column":43}},"10":{"start":{"line":117,"column":8},"end":{"line":117,"column":56}},"11":{"start":{"line":126,"column":8},"end":{"line":126,"column":53}}},"branchMap":{"1":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":8},"end":{"line":29,"column":8}},{"start":{"line":29,"column":8},"end":{"line":29,"column":8}}]},"2":{"line":80,"type":"if","locations":[{"start":{"line":80,"column":55},"end":{"line":80,"column":55}},{"start":{"line":80,"column":55},"end":{"line":80,"column":55}}]},"3":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":35},"end":{"line":86,"column":35}},{"start":{"line":86,"column":35},"end":{"line":86,"column":35}}]},"4":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":68},"end":{"line":90,"column":68}},{"start":{"line":90,"column":68},"end":{"line":90,"column":68}}]},"5":{"line":94,"type":"if","locations":[{"start":{"line":94,"column":44},"end":{"line":94,"column":44}},{"start":{"line":94,"column":44},"end":{"line":94,"column":44}}]},"6":{"line":100,"type":"if","locations":[{"start":{"line":100,"column":71},"end":{"line":100,"column":71}},{"start":{"line":100,"column":71},"end":{"line":100,"column":71}}]}}},"contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol":{"l":{"21":26,"29":25,"38":23,"42":0,"51":0,"64":0,"68":0,"72":8,"88":3,"89":3,"93":14,"94":14,"95":12,"100":3,"108":12,"109":10,"110":6,"119":12,"123":0,"132":0,"145":0,"149":0,"153":6,"154":4,"155":0},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol","s":{"1":25,"2":23,"3":0,"4":0,"5":0,"6":0,"7":8,"8":3,"9":14,"10":12,"11":2,"12":10,"13":4,"14":6,"15":12,"16":0,"17":0,"18":0,"19":0,"20":6,"21":2,"22":4,"23":4,"24":0},"b":{"1":[8,17],"2":[8,0],"3":[3,0],"4":[3,0],"5":[2,10],"6":[4,6],"7":[0,0],"8":[2,4],"9":[4,0]},"f":{"1":26,"2":25,"3":23,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":8,"11":3,"12":14,"13":3,"14":12,"15":12,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":6},"fnMap":{"1":{"name":"constructor","line":20,"loc":{"start":{"line":20,"column":4},"end":{"line":22,"column":4}}},"2":{"name":"detectTransferRestriction","line":24,"loc":{"start":{"line":24,"column":4},"end":{"line":30,"column":4}}},"3":{"name":"detectTransferRestrictionFrom","line":32,"loc":{"start":{"line":32,"column":4},"end":{"line":39,"column":4}}},"4":{"name":"canTransfer","line":41,"loc":{"start":{"line":41,"column":4},"end":{"line":43,"column":4}}},"5":{"name":"canTransferFrom","line":45,"loc":{"start":{"line":45,"column":4},"end":{"line":52,"column":4}}},"6":{"name":"transferred","line":54,"loc":{"start":{"line":54,"column":4},"end":{"line":54,"column":108}}},"7":{"name":"transferred","line":56,"loc":{"start":{"line":56,"column":4},"end":{"line":61,"column":30}}},"8":{"name":"supportsInterface","line":63,"loc":{"start":{"line":63,"column":4},"end":{"line":65,"column":4}}},"9":{"name":"canReturnTransferRestrictionCode","line":67,"loc":{"start":{"line":67,"column":4},"end":{"line":69,"column":4}}},"10":{"name":"messageForTransferRestriction","line":71,"loc":{"start":{"line":71,"column":4},"end":{"line":73,"column":4}}},"11":{"name":"onlyOwner","line":87,"loc":{"start":{"line":87,"column":4},"end":{"line":90,"column":4}}},"12":{"name":"constructor","line":92,"loc":{"start":{"line":92,"column":4},"end":{"line":97,"column":4}}},"13":{"name":"setRestricted","line":99,"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":4}}},"14":{"name":"detectTransferRestriction","line":103,"loc":{"start":{"line":103,"column":4},"end":{"line":111,"column":4}}},"15":{"name":"detectTransferRestrictionFrom","line":113,"loc":{"start":{"line":113,"column":4},"end":{"line":120,"column":4}}},"16":{"name":"canTransfer","line":122,"loc":{"start":{"line":122,"column":4},"end":{"line":124,"column":4}}},"17":{"name":"canTransferFrom","line":126,"loc":{"start":{"line":126,"column":4},"end":{"line":133,"column":4}}},"18":{"name":"transferred","line":135,"loc":{"start":{"line":135,"column":4},"end":{"line":135,"column":108}}},"19":{"name":"transferred","line":137,"loc":{"start":{"line":137,"column":4},"end":{"line":142,"column":30}}},"20":{"name":"supportsInterface","line":144,"loc":{"start":{"line":144,"column":4},"end":{"line":146,"column":4}}},"21":{"name":"canReturnTransferRestrictionCode","line":148,"loc":{"start":{"line":148,"column":4},"end":{"line":150,"column":4}}},"22":{"name":"messageForTransferRestriction","line":152,"loc":{"start":{"line":152,"column":4},"end":{"line":156,"column":4}}}},"statementMap":{"1":{"start":{"line":29,"column":8},"end":{"line":29,"column":91}},"2":{"start":{"line":38,"column":8},"end":{"line":38,"column":58}},"3":{"start":{"line":42,"column":8},"end":{"line":42,"column":63}},"4":{"start":{"line":51,"column":8},"end":{"line":51,"column":44}},"5":{"start":{"line":64,"column":8},"end":{"line":64,"column":53}},"6":{"start":{"line":68,"column":8},"end":{"line":68,"column":38}},"7":{"start":{"line":72,"column":8},"end":{"line":72,"column":82}},"8":{"start":{"line":88,"column":8},"end":{"line":88,"column":49}},"9":{"start":{"line":94,"column":8},"end":{"line":94,"column":2793}},"10":{"start":{"line":108,"column":8},"end":{"line":108,"column":52}},"11":{"start":{"line":108,"column":30},"end":{"line":108,"column":52}},"12":{"start":{"line":109,"column":8},"end":{"line":109,"column":48}},"13":{"start":{"line":109,"column":28},"end":{"line":109,"column":48}},"14":{"start":{"line":110,"column":8},"end":{"line":110,"column":52}},"15":{"start":{"line":119,"column":8},"end":{"line":119,"column":58}},"16":{"start":{"line":123,"column":8},"end":{"line":123,"column":63}},"17":{"start":{"line":132,"column":8},"end":{"line":132,"column":44}},"18":{"start":{"line":145,"column":8},"end":{"line":145,"column":53}},"19":{"start":{"line":149,"column":8},"end":{"line":149,"column":63}},"20":{"start":{"line":153,"column":8},"end":{"line":153,"column":66}},"21":{"start":{"line":153,"column":37},"end":{"line":153,"column":66}},"22":{"start":{"line":154,"column":8},"end":{"line":154,"column":67}},"23":{"start":{"line":154,"column":35},"end":{"line":154,"column":67}},"24":{"start":{"line":155,"column":8},"end":{"line":155,"column":29}}},"branchMap":{"1":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":36},"end":{"line":29,"column":50}},{"start":{"line":29,"column":54},"end":{"line":29,"column":90}}]},"2":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":41},"end":{"line":72,"column":64}},{"start":{"line":72,"column":68},"end":{"line":72,"column":81}}]},"3":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":8}},{"start":{"line":88,"column":8},"end":{"line":88,"column":8}}]},"4":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":66},"end":{"line":99,"column":66}},{"start":{"line":99,"column":66},"end":{"line":99,"column":66}}]},"5":{"line":108,"type":"if","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":8}},{"start":{"line":108,"column":8},"end":{"line":108,"column":8}}]},"6":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"7":{"line":149,"type":"cond-expr","locations":[{"start":{"line":149,"column":15},"end":{"line":149,"column":37}},{"start":{"line":149,"column":42},"end":{"line":149,"column":62}}]},"8":{"line":153,"type":"if","locations":[{"start":{"line":153,"column":8},"end":{"line":153,"column":8}},{"start":{"line":153,"column":8},"end":{"line":153,"column":8}}]},"9":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":8},"end":{"line":154,"column":8}},{"start":{"line":154,"column":8},"end":{"line":154,"column":8}}]}}},"contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol":{"l":{"34":4,"35":4,"37":4,"38":2,"40":1,"41":1,"43":1,"46":3,"47":3,"48":3,"49":3},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol","s":{"1":4,"2":4,"3":4,"4":2,"5":3,"6":3},"b":{"1":[2,2],"2":[1,1],"3":[1,1]},"f":{"1":4},"fnMap":{"1":{"name":"extract","line":31,"loc":{"start":{"line":31,"column":4},"end":{"line":50,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":23}},"2":{"start":{"line":35,"column":8},"end":{"line":35,"column":22}},"3":{"start":{"line":37,"column":8},"end":{"line":37,"column":1615}},"4":{"start":{"line":39,"column":15},"end":{"line":39,"column":1791}},"5":{"start":{"line":46,"column":8},"end":{"line":46,"column":82}},"6":{"start":{"line":49,"column":8},"end":{"line":49,"column":21}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":8},"end":{"line":37,"column":8}},{"start":{"line":37,"column":8},"end":{"line":37,"column":8}}]},"2":{"line":37,"type":"cond-expr","locations":[{"start":{"line":37,"column":12},"end":{"line":37,"column":44}},{"start":{"line":37,"column":49},"end":{"line":37,"column":86}}]},"3":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":15},"end":{"line":39,"column":15}},{"start":{"line":39,"column":15},"end":{"line":39,"column":15}}]}}},"contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol":{"l":{"32":4374,"38":8,"39":8,"43":71,"52":703,"53":1,"55":702,"56":702,"59":612,"60":593,"61":1,"70":2,"71":1,"73":1,"76":1,"83":7,"84":4,"88":75,"89":74,"90":4,"93":1,"96":74,"97":74,"98":74,"103":1054,"108":3,"113":1752,"118":4,"127":11},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol","s":{"1":8,"2":8,"3":71,"4":703,"5":702,"6":702,"7":593,"8":1,"9":2,"10":1,"11":7,"12":4,"13":75,"14":74,"15":4,"16":1,"17":74,"18":74,"19":1054,"20":1752,"21":11},"b":{"1":[8,0],"2":[71,0],"3":[1,702],"4":[1,592],"5":[1,1],"6":[74,1],"7":[4,70],"8":[4,0]},"f":{"1":4374,"2":8,"3":71,"4":703,"5":2,"6":7,"7":75,"8":1054,"9":3,"10":1752,"11":4,"12":11},"fnMap":{"1":{"name":"_policyProtectedStorage","line":30,"loc":{"start":{"line":30,"column":4},"end":{"line":35,"column":4}}},"2":{"name":"__PolicyProtected_init","line":37,"loc":{"start":{"line":37,"column":4},"end":{"line":40,"column":4}}},"3":{"name":"__PolicyProtected_init_unchained","line":42,"loc":{"start":{"line":42,"column":4},"end":{"line":44,"column":4}}},"4":{"name":"runPolicy","line":51,"loc":{"start":{"line":51,"column":4},"end":{"line":63,"column":4}}},"5":{"name":"runPolicyWithContext","line":69,"loc":{"start":{"line":69,"column":4},"end":{"line":77,"column":4}}},"6":{"name":"attachPolicyEngine","line":82,"loc":{"start":{"line":82,"column":4},"end":{"line":85,"column":4}}},"7":{"name":"_attachPolicyEngine","line":87,"loc":{"start":{"line":87,"column":4},"end":{"line":99,"column":4}}},"8":{"name":"getPolicyEngine","line":102,"loc":{"start":{"line":102,"column":4},"end":{"line":104,"column":4}}},"9":{"name":"setContext","line":107,"loc":{"start":{"line":107,"column":4},"end":{"line":109,"column":4}}},"10":{"name":"getContext","line":112,"loc":{"start":{"line":112,"column":4},"end":{"line":114,"column":4}}},"11":{"name":"clearContext","line":117,"loc":{"start":{"line":117,"column":4},"end":{"line":119,"column":4}}},"12":{"name":"supportsInterface","line":124,"loc":{"start":{"line":124,"column":4},"end":{"line":128,"column":4}}}},"statementMap":{"1":{"start":{"line":38,"column":8},"end":{"line":38,"column":22}},"2":{"start":{"line":39,"column":8},"end":{"line":39,"column":53}},"3":{"start":{"line":43,"column":8},"end":{"line":43,"column":40}},"4":{"start":{"line":52,"column":8},"end":{"line":52,"column":2588}},"5":{"start":{"line":55,"column":8},"end":{"line":55,"column":43}},"6":{"start":{"line":56,"column":8},"end":{"line":56,"column":2778}},"7":{"start":{"line":60,"column":8},"end":{"line":60,"column":2965}},"8":{"start":{"line":61,"column":12},"end":{"line":61,"column":25}},"9":{"start":{"line":70,"column":8},"end":{"line":70,"column":3303}},"10":{"start":{"line":73,"column":8},"end":{"line":73,"column":3448}},"11":{"start":{"line":83,"column":8},"end":{"line":83,"column":49}},"12":{"start":{"line":84,"column":8},"end":{"line":84,"column":40}},"13":{"start":{"line":88,"column":8},"end":{"line":88,"column":75}},"14":{"start":{"line":89,"column":8},"end":{"line":89,"column":4090}},"15":{"start":{"line":90,"column":12},"end":{"line":90,"column":4175}},"16":{"start":{"line":93,"column":16},"end":{"line":93,"column":102}},"17":{"start":{"line":97,"column":8},"end":{"line":97,"column":43}},"18":{"start":{"line":98,"column":8},"end":{"line":98,"column":47}},"19":{"start":{"line":103,"column":8},"end":{"line":103,"column":62}},"20":{"start":{"line":113,"column":8},"end":{"line":113,"column":66}},"21":{"start":{"line":127,"column":8},"end":{"line":127,"column":104}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":67},"end":{"line":37,"column":67}},{"start":{"line":37,"column":67},"end":{"line":37,"column":67}}]},"2":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":77},"end":{"line":42,"column":77}},{"start":{"line":42,"column":77},"end":{"line":42,"column":77}}]},"3":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":8},"end":{"line":52,"column":8}},{"start":{"line":52,"column":8},"end":{"line":52,"column":8}}]},"4":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":60,"column":8}},{"start":{"line":60,"column":8},"end":{"line":60,"column":8}}]},"5":{"line":70,"type":"if","locations":[{"start":{"line":70,"column":8},"end":{"line":70,"column":8}},{"start":{"line":70,"column":8},"end":{"line":70,"column":8}}]},"6":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":8}},{"start":{"line":88,"column":8},"end":{"line":88,"column":8}}]},"7":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":8},"end":{"line":89,"column":8}},{"start":{"line":89,"column":8},"end":{"line":89,"column":8}}]},"8":{"line":127,"type":"cond-expr","locations":[{"start":{"line":127,"column":15},"end":{"line":127,"column":63}},{"start":{"line":127,"column":68},"end":{"line":127,"column":103}}]}}},"contracts/modules/demo/DemoImports.sol":{"l":{},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/demo/DemoImports.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/modules/lite/CCTCMTATBaseERC1404.sol":{"l":{"31":10,"35":1,"37":9,"49":233,"61":35,"72":8,"73":8,"74":1,"75":1,"76":1,"79":7,"85":6},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC1404.sol","s":{"1":10,"2":1,"3":9,"4":233,"5":35,"6":8,"7":8,"8":1,"9":1,"10":1,"11":7,"12":6},"b":{"1":[1,9],"2":[1,7],"3":[1,0]},"f":{"1":10,"2":233,"3":35,"4":8,"5":6},"fnMap":{"1":{"name":"messageForTransferRestriction","line":28,"loc":{"start":{"line":28,"column":4},"end":{"line":39,"column":4}}},"2":{"name":"canTransfer","line":44,"loc":{"start":{"line":44,"column":4},"end":{"line":50,"column":4}}},"3":{"name":"canTransferFrom","line":55,"loc":{"start":{"line":55,"column":4},"end":{"line":62,"column":4}}},"4":{"name":"_detectTransferRestriction","line":67,"loc":{"start":{"line":67,"column":4},"end":{"line":80,"column":4}}},"5":{"name":"supportsInterface","line":82,"loc":{"start":{"line":82,"column":4},"end":{"line":86,"column":4}}}},"statementMap":{"1":{"start":{"line":31,"column":8},"end":{"line":31,"column":1405}},"2":{"start":{"line":35,"column":12},"end":{"line":35,"column":74}},"3":{"start":{"line":37,"column":12},"end":{"line":37,"column":95}},"4":{"start":{"line":49,"column":8},"end":{"line":49,"column":68}},"5":{"start":{"line":61,"column":8},"end":{"line":61,"column":81}},"6":{"start":{"line":72,"column":8},"end":{"line":72,"column":80}},"7":{"start":{"line":73,"column":8},"end":{"line":73,"column":2947}},"8":{"start":{"line":74,"column":12},"end":{"line":74,"column":88}},"9":{"start":{"line":75,"column":12},"end":{"line":75,"column":3082}},"10":{"start":{"line":76,"column":16},"end":{"line":76,"column":114}},"11":{"start":{"line":79,"column":8},"end":{"line":79,"column":88}},"12":{"start":{"line":85,"column":8},"end":{"line":85,"column":70}}},"branchMap":{"1":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":8},"end":{"line":31,"column":8}},{"start":{"line":31,"column":8},"end":{"line":31,"column":8}}]},"2":{"line":73,"type":"if","locations":[{"start":{"line":73,"column":8},"end":{"line":73,"column":8}},{"start":{"line":73,"column":8},"end":{"line":73,"column":8}}]},"3":{"line":75,"type":"if","locations":[{"start":{"line":75,"column":12},"end":{"line":75,"column":12}},{"start":{"line":75,"column":12},"end":{"line":75,"column":12}}]}}},"contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol":{"l":{"29":119,"35":81,"45":29,"54":731,"55":716,"65":144,"66":120,"77":27,"78":18,"85":3,"92":10,"99":10,"106":12,"132":39,"167":939},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol","s":{"1":119,"2":81,"3":29,"4":731,"5":716,"6":144,"7":120,"8":27,"9":18,"10":3,"11":10,"12":10,"13":12,"14":39,"15":939},"b":{"1":[119,3],"2":[6,3],"3":[9,3],"4":[39,12],"5":[15,3],"6":[9,6],"7":[18,6],"8":[12,6]},"f":{"1":119,"2":81,"3":29,"4":731,"5":144,"6":27,"7":3,"8":10,"9":10,"10":12,"11":9,"12":39,"13":9,"14":12,"15":939},"fnMap":{"1":{"name":"approve","line":28,"loc":{"start":{"line":25,"column":4},"end":{"line":30,"column":4}}},"2":{"name":"transfer","line":31,"loc":{"start":{"line":31,"column":4},"end":{"line":36,"column":4}}},"3":{"name":"transferFrom","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":46,"column":4}}},"4":{"name":"_mintOverride","line":50,"loc":{"start":{"line":50,"column":4},"end":{"line":56,"column":4}}},"5":{"name":"_burnOverride","line":61,"loc":{"start":{"line":61,"column":4},"end":{"line":67,"column":4}}},"6":{"name":"_minterTransferOverride","line":72,"loc":{"start":{"line":72,"column":4},"end":{"line":79,"column":4}}},"7":{"name":"decimals","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":86,"column":4}}},"8":{"name":"name","line":91,"loc":{"start":{"line":91,"column":4},"end":{"line":93,"column":4}}},"9":{"name":"symbol","line":98,"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":4}}},"10":{"name":"supportsInterface","line":103,"loc":{"start":{"line":103,"column":4},"end":{"line":109,"column":4}}},"11":{"name":"_authorizeCCIPSetAdmin","line":120,"loc":{"start":{"line":120,"column":4},"end":{"line":120,"column":106}}},"12":{"name":"_checkTokenBridge","line":131,"loc":{"start":{"line":131,"column":4},"end":{"line":133,"column":4}}},"13":{"name":"_authorizeBurnFrom","line":145,"loc":{"start":{"line":140,"column":4},"end":{"line":146,"column":5}}},"14":{"name":"_authorizeSelfBurn","line":158,"loc":{"start":{"line":153,"column":4},"end":{"line":159,"column":5}}},"15":{"name":"_update","line":162,"loc":{"start":{"line":162,"column":4},"end":{"line":168,"column":4}}}},"statementMap":{"1":{"start":{"line":29,"column":8},"end":{"line":29,"column":55}},"2":{"start":{"line":35,"column":8},"end":{"line":35,"column":50}},"3":{"start":{"line":45,"column":8},"end":{"line":45,"column":60}},"4":{"start":{"line":54,"column":8},"end":{"line":54,"column":64}},"5":{"start":{"line":55,"column":8},"end":{"line":55,"column":60}},"6":{"start":{"line":65,"column":8},"end":{"line":65,"column":64}},"7":{"start":{"line":66,"column":8},"end":{"line":66,"column":60}},"8":{"start":{"line":77,"column":8},"end":{"line":77,"column":53}},"9":{"start":{"line":78,"column":8},"end":{"line":78,"column":71}},"10":{"start":{"line":85,"column":8},"end":{"line":85,"column":41}},"11":{"start":{"line":92,"column":8},"end":{"line":92,"column":37}},"12":{"start":{"line":99,"column":8},"end":{"line":99,"column":39}},"13":{"start":{"line":106,"column":8},"end":{"line":106,"column":3715}},"14":{"start":{"line":132,"column":8},"end":{"line":132,"column":68}},"15":{"start":{"line":167,"column":8},"end":{"line":167,"column":56}}},"branchMap":{"1":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":48},"end":{"line":28,"column":48}},{"start":{"line":28,"column":48},"end":{"line":28,"column":48}}]},"2":{"line":107,"type":"cond-expr","locations":[{"start":{"line":107,"column":12},"end":{"line":107,"column":64}},{"start":{"line":108,"column":12},"end":{"line":108,"column":62}}]},"3":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":76},"end":{"line":120,"column":76}},{"start":{"line":120,"column":76},"end":{"line":120,"column":76}}]},"4":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":96},"end":{"line":131,"column":96}},{"start":{"line":131,"column":96},"end":{"line":131,"column":96}}]},"5":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":8},"end":{"line":144,"column":8}},{"start":{"line":144,"column":8},"end":{"line":144,"column":8}}]},"6":{"line":145,"type":"if","locations":[{"start":{"line":145,"column":8},"end":{"line":145,"column":8}},{"start":{"line":145,"column":8},"end":{"line":145,"column":8}}]},"7":{"line":157,"type":"if","locations":[{"start":{"line":157,"column":8},"end":{"line":157,"column":8}},{"start":{"line":157,"column":8},"end":{"line":157,"column":8}}]},"8":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":8},"end":{"line":158,"column":8}},{"start":{"line":158,"column":8},"end":{"line":158,"column":8}}]}}},"contracts/modules/lite/CCTCMTATBasePolicyEngine.sol":{"l":{"51":51,"72":51,"95":51,"98":51,"101":51,"104":51,"107":51,"108":51,"111":51,"121":51,"132":0,"146":233,"147":233,"148":88,"150":145,"163":35,"164":35,"165":12,"167":23,"189":1012,"190":994,"199":6},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol","s":{"1":51,"2":51,"3":51,"4":51,"5":51,"6":51,"7":51,"8":51,"9":51,"10":51,"11":0,"12":233,"13":233,"14":88,"15":145,"16":35,"17":35,"18":12,"19":23,"20":1012,"21":994,"22":6},"b":{"1":[51,2],"2":[51,0],"3":[51,0],"4":[51,0],"5":[0,0],"6":[88,145],"7":[12,23],"8":[0,0],"9":[99,6],"10":[37,3],"11":[78,9],"12":[918,76],"13":[3,0]},"f":{"1":51,"2":51,"3":51,"4":51,"5":0,"6":233,"7":35,"8":0,"9":99,"10":37,"11":78,"12":1012,"13":6},"fnMap":{"1":{"name":"initialize","line":50,"loc":{"start":{"line":43,"column":4},"end":{"line":59,"column":4}}},"2":{"name":"_initialize","line":71,"loc":{"start":{"line":64,"column":4},"end":{"line":80,"column":4}}},"3":{"name":"__CMTAT_init","line":92,"loc":{"start":{"line":85,"column":4},"end":{"line":112,"column":4}}},"4":{"name":"__CMTAT_openzeppelin_init_unchained","line":119,"loc":{"start":{"line":117,"column":4},"end":{"line":122,"column":4}}},"5":{"name":"__CMTAT_modules_init_unchained","line":131,"loc":{"start":{"line":127,"column":4},"end":{"line":133,"column":4}}},"6":{"name":"canTransfer","line":141,"loc":{"start":{"line":141,"column":4},"end":{"line":152,"column":4}}},"7":{"name":"canTransferFrom","line":157,"loc":{"start":{"line":157,"column":4},"end":{"line":169,"column":4}}},"8":{"name":"_authorizeAttachPolicyEngine","line":171,"loc":{"start":{"line":171,"column":4},"end":{"line":171,"column":107}}},"9":{"name":"_authorizePause","line":177,"loc":{"start":{"line":177,"column":4},"end":{"line":177,"column":93}}},"10":{"name":"_authorizeDeactivate","line":178,"loc":{"start":{"line":178,"column":4},"end":{"line":178,"column":105}}},"11":{"name":"_authorizeFreeze","line":180,"loc":{"start":{"line":180,"column":4},"end":{"line":180,"column":102}}},"12":{"name":"_checkTransferred","line":183,"loc":{"start":{"line":183,"column":4},"end":{"line":194,"column":4}}},"13":{"name":"supportsInterface","line":196,"loc":{"start":{"line":196,"column":4},"end":{"line":202,"column":4}}}},"statementMap":{"1":{"start":{"line":51,"column":8},"end":{"line":51,"column":2292}},"2":{"start":{"line":72,"column":8},"end":{"line":72,"column":2920}},"3":{"start":{"line":95,"column":8},"end":{"line":95,"column":33}},"4":{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},"5":{"start":{"line":101,"column":8},"end":{"line":101,"column":60}},"6":{"start":{"line":104,"column":8},"end":{"line":104,"column":97}},"7":{"start":{"line":107,"column":8},"end":{"line":107,"column":61}},"8":{"start":{"line":108,"column":8},"end":{"line":108,"column":61}},"9":{"start":{"line":111,"column":8},"end":{"line":111,"column":54}},"10":{"start":{"line":121,"column":8},"end":{"line":121,"column":77}},"11":{"start":{"line":132,"column":8},"end":{"line":132,"column":97}},"12":{"start":{"line":146,"column":8},"end":{"line":146,"column":90}},"13":{"start":{"line":147,"column":8},"end":{"line":147,"column":5646}},"14":{"start":{"line":148,"column":12},"end":{"line":148,"column":24}},"15":{"start":{"line":150,"column":12},"end":{"line":150,"column":76}},"16":{"start":{"line":163,"column":8},"end":{"line":163,"column":90}},"17":{"start":{"line":164,"column":8},"end":{"line":164,"column":6165}},"18":{"start":{"line":165,"column":12},"end":{"line":165,"column":24}},"19":{"start":{"line":167,"column":12},"end":{"line":167,"column":89}},"20":{"start":{"line":189,"column":8},"end":{"line":189,"column":66}},"21":{"start":{"line":190,"column":8},"end":{"line":190,"column":7278}},"22":{"start":{"line":199,"column":8},"end":{"line":199,"column":7669}}},"branchMap":{"1":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":21},"end":{"line":50,"column":21}},{"start":{"line":50,"column":21},"end":{"line":50,"column":21}}]},"2":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":23},"end":{"line":71,"column":23}},{"start":{"line":71,"column":23},"end":{"line":71,"column":23}}]},"3":{"line":92,"type":"if","locations":[{"start":{"line":92,"column":23},"end":{"line":92,"column":23}},{"start":{"line":92,"column":23},"end":{"line":92,"column":23}}]},"4":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":23},"end":{"line":119,"column":23}},{"start":{"line":119,"column":23},"end":{"line":119,"column":23}}]},"5":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":23},"end":{"line":131,"column":23}},{"start":{"line":131,"column":23},"end":{"line":131,"column":23}}]},"6":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":8},"end":{"line":147,"column":8}},{"start":{"line":147,"column":8},"end":{"line":147,"column":8}}]},"7":{"line":164,"type":"if","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":8}},{"start":{"line":164,"column":8},"end":{"line":164,"column":8}}]},"8":{"line":171,"type":"if","locations":[{"start":{"line":171,"column":77},"end":{"line":171,"column":77}},{"start":{"line":171,"column":77},"end":{"line":171,"column":77}}]},"9":{"line":177,"type":"if","locations":[{"start":{"line":177,"column":70},"end":{"line":177,"column":70}},{"start":{"line":177,"column":70},"end":{"line":177,"column":70}}]},"10":{"line":178,"type":"if","locations":[{"start":{"line":178,"column":75},"end":{"line":178,"column":75}},{"start":{"line":178,"column":75},"end":{"line":178,"column":75}}]},"11":{"line":180,"type":"if","locations":[{"start":{"line":180,"column":77},"end":{"line":180,"column":77}},{"start":{"line":180,"column":77},"end":{"line":180,"column":77}}]},"12":{"line":190,"type":"if","locations":[{"start":{"line":190,"column":8},"end":{"line":190,"column":8}},{"start":{"line":190,"column":8},"end":{"line":190,"column":8}}]},"13":{"line":200,"type":"cond-expr","locations":[{"start":{"line":200,"column":12},"end":{"line":200,"column":64}},{"start":{"line":201,"column":12},"end":{"line":201,"column":68}}]}}},"contracts/modules/lite/PolicyValidationModuleERC1404.sol":{"l":{"45":9,"46":2,"48":1,"50":1,"52":1,"54":2,"56":1,"58":1,"75":6,"76":6,"77":5,"79":1,"89":3,"90":1,"92":2,"93":2,"94":1,"96":1,"113":7,"114":1,"116":1,"118":1,"120":2,"122":2},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/PolicyValidationModuleERC1404.sol","s":{"1":9,"2":2,"3":7,"4":1,"5":6,"6":1,"7":5,"8":1,"9":4,"10":2,"11":2,"12":1,"13":1,"14":6,"15":6,"16":5,"17":1,"18":3,"19":1,"20":2,"21":2,"22":1,"23":1,"24":7,"25":1,"26":6,"27":1,"28":5,"29":1,"30":4,"31":2,"32":2},"b":{"1":[2,7],"2":[1,6],"3":[1,5],"4":[1,4],"5":[2,2],"6":[1,1],"7":[5,1],"8":[1,2],"9":[1,1],"10":[1,6],"11":[1,5],"12":[1,4],"13":[2,2]},"f":{"1":9,"2":6,"3":3,"4":7},"fnMap":{"1":{"name":"messageForTransferRestriction","line":42,"loc":{"start":{"line":42,"column":4},"end":{"line":60,"column":4}}},"2":{"name":"detectTransferRestriction","line":70,"loc":{"start":{"line":70,"column":4},"end":{"line":81,"column":4}}},"3":{"name":"detectTransferRestrictionFrom","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":99,"column":4}}},"4":{"name":"_detectTransferRestriction","line":108,"loc":{"start":{"line":108,"column":4},"end":{"line":124,"column":4}}}},"statementMap":{"1":{"start":{"line":45,"column":8},"end":{"line":45,"column":1876}},"2":{"start":{"line":46,"column":12},"end":{"line":46,"column":35}},"3":{"start":{"line":47,"column":15},"end":{"line":47,"column":2007}},"4":{"start":{"line":48,"column":12},"end":{"line":48,"column":48}},"5":{"start":{"line":49,"column":15},"end":{"line":49,"column":2164}},"6":{"start":{"line":50,"column":12},"end":{"line":50,"column":53}},"7":{"start":{"line":51,"column":15},"end":{"line":51,"column":2331}},"8":{"start":{"line":52,"column":12},"end":{"line":52,"column":53}},"9":{"start":{"line":53,"column":15},"end":{"line":53,"column":2498}},"10":{"start":{"line":54,"column":12},"end":{"line":54,"column":51}},"11":{"start":{"line":55,"column":15},"end":{"line":55,"column":2661}},"12":{"start":{"line":56,"column":12},"end":{"line":56,"column":56}},"13":{"start":{"line":58,"column":12},"end":{"line":58,"column":36}},"14":{"start":{"line":75,"column":8},"end":{"line":75,"column":70}},"15":{"start":{"line":76,"column":8},"end":{"line":76,"column":3513}},"16":{"start":{"line":77,"column":12},"end":{"line":77,"column":29}},"17":{"start":{"line":79,"column":12},"end":{"line":79,"column":71}},"18":{"start":{"line":89,"column":8},"end":{"line":89,"column":3940}},"19":{"start":{"line":90,"column":12},"end":{"line":90,"column":92}},"20":{"start":{"line":92,"column":12},"end":{"line":92,"column":74}},"21":{"start":{"line":93,"column":12},"end":{"line":93,"column":4168}},"22":{"start":{"line":94,"column":16},"end":{"line":94,"column":33}},"23":{"start":{"line":96,"column":16},"end":{"line":96,"column":75}},"24":{"start":{"line":113,"column":8},"end":{"line":113,"column":4844}},"25":{"start":{"line":114,"column":12},"end":{"line":114,"column":89}},"26":{"start":{"line":115,"column":15},"end":{"line":115,"column":4971}},"27":{"start":{"line":116,"column":12},"end":{"line":116,"column":84}},"28":{"start":{"line":117,"column":15},"end":{"line":117,"column":5088}},"29":{"start":{"line":118,"column":12},"end":{"line":118,"column":89}},"30":{"start":{"line":119,"column":15},"end":{"line":119,"column":5216}},"31":{"start":{"line":120,"column":12},"end":{"line":120,"column":87}},"32":{"start":{"line":122,"column":12},"end":{"line":122,"column":71}}},"branchMap":{"1":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":8},"end":{"line":45,"column":8}},{"start":{"line":45,"column":8},"end":{"line":45,"column":8}}]},"2":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":15},"end":{"line":47,"column":15}},{"start":{"line":47,"column":15},"end":{"line":47,"column":15}}]},"3":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":15},"end":{"line":49,"column":15}},{"start":{"line":49,"column":15},"end":{"line":49,"column":15}}]},"4":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":15},"end":{"line":51,"column":15}},{"start":{"line":51,"column":15},"end":{"line":51,"column":15}}]},"5":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":15},"end":{"line":53,"column":15}},{"start":{"line":53,"column":15},"end":{"line":53,"column":15}}]},"6":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":15},"end":{"line":55,"column":15}},{"start":{"line":55,"column":15},"end":{"line":55,"column":15}}]},"7":{"line":76,"type":"if","locations":[{"start":{"line":76,"column":8},"end":{"line":76,"column":8}},{"start":{"line":76,"column":8},"end":{"line":76,"column":8}}]},"8":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":8},"end":{"line":89,"column":8}},{"start":{"line":89,"column":8},"end":{"line":89,"column":8}}]},"9":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":12},"end":{"line":93,"column":12}},{"start":{"line":93,"column":12},"end":{"line":93,"column":12}}]},"10":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":113,"column":8}},{"start":{"line":113,"column":8},"end":{"line":113,"column":8}}]},"11":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":15},"end":{"line":115,"column":15}},{"start":{"line":115,"column":15},"end":{"line":115,"column":15}}]},"12":{"line":117,"type":"if","locations":[{"start":{"line":117,"column":15},"end":{"line":117,"column":15}},{"start":{"line":117,"column":15},"end":{"line":117,"column":15}}]},"13":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":15},"end":{"line":119,"column":15}},{"start":{"line":119,"column":15},"end":{"line":119,"column":15}}]}}},"contracts/modules/lite/ValidationModulePolicyEngine.sol":{"l":{"25":145,"38":23,"46":145,"47":39,"49":106,"59":23,"60":12,"62":11,"72":11,"80":106,"84":118,"85":118,"86":117,"87":117,"92":111,"94":6,"97":1,"108":997,"109":928,"110":928,"111":927,"112":927,"115":920,"116":2,"119":921},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/ValidationModulePolicyEngine.sol","s":{"1":145,"2":23,"3":145,"4":39,"5":106,"6":23,"7":12,"8":11,"9":11,"10":106,"11":118,"12":118,"13":117,"14":117,"15":111,"16":6,"17":1,"18":997,"19":928,"20":928,"21":927,"22":927,"23":920,"24":2,"25":921},"b":{"1":[39,106],"2":[12,11],"3":[117,1],"4":[927,1],"5":[2,918]},"f":{"1":145,"2":23,"3":145,"4":23,"5":11,"6":106,"7":118,"8":997},"fnMap":{"1":{"name":"canTransfer","line":20,"loc":{"start":{"line":20,"column":4},"end":{"line":26,"column":4}}},"2":{"name":"canTransferFrom","line":32,"loc":{"start":{"line":32,"column":4},"end":{"line":39,"column":4}}},"3":{"name":"_canTransfer","line":45,"loc":{"start":{"line":45,"column":4},"end":{"line":51,"column":4}}},"4":{"name":"_canTransferFrom","line":53,"loc":{"start":{"line":53,"column":4},"end":{"line":64,"column":4}}},"5":{"name":"_canTransferFromWithPolicyEngine","line":66,"loc":{"start":{"line":66,"column":4},"end":{"line":73,"column":4}}},"6":{"name":"_canTransferWithPolicyEngine","line":75,"loc":{"start":{"line":75,"column":4},"end":{"line":81,"column":4}}},"7":{"name":"_tryCheckPolicies","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":99,"column":4}}},"8":{"name":"_transferred","line":102,"loc":{"start":{"line":102,"column":4},"end":{"line":120,"column":4}}}},"statementMap":{"1":{"start":{"line":25,"column":8},"end":{"line":25,"column":44}},"2":{"start":{"line":38,"column":8},"end":{"line":38,"column":57}},"3":{"start":{"line":46,"column":8},"end":{"line":46,"column":1793}},"4":{"start":{"line":47,"column":12},"end":{"line":47,"column":24}},"5":{"start":{"line":49,"column":12},"end":{"line":49,"column":64}},"6":{"start":{"line":59,"column":8},"end":{"line":59,"column":2150}},"7":{"start":{"line":60,"column":12},"end":{"line":60,"column":24}},"8":{"start":{"line":62,"column":12},"end":{"line":62,"column":77}},"9":{"start":{"line":72,"column":8},"end":{"line":72,"column":100}},"10":{"start":{"line":80,"column":8},"end":{"line":80,"column":87}},"11":{"start":{"line":84,"column":8},"end":{"line":84,"column":70}},"12":{"start":{"line":85,"column":8},"end":{"line":85,"column":3092}},"13":{"start":{"line":86,"column":12},"end":{"line":86,"column":47}},"14":{"start":{"line":87,"column":12},"end":{"line":87,"column":3201}},"15":{"start":{"line":92,"column":16},"end":{"line":92,"column":27}},"16":{"start":{"line":94,"column":16},"end":{"line":94,"column":28}},"17":{"start":{"line":97,"column":12},"end":{"line":97,"column":23}},"18":{"start":{"line":108,"column":8},"end":{"line":108,"column":62}},"19":{"start":{"line":109,"column":8},"end":{"line":109,"column":70}},"20":{"start":{"line":110,"column":8},"end":{"line":110,"column":3893}},"21":{"start":{"line":111,"column":12},"end":{"line":111,"column":47}},"22":{"start":{"line":112,"column":12},"end":{"line":112,"column":4002}},"23":{"start":{"line":115,"column":12},"end":{"line":115,"column":4167}},"24":{"start":{"line":116,"column":16},"end":{"line":116,"column":29}},"25":{"start":{"line":119,"column":8},"end":{"line":119,"column":19}}},"branchMap":{"1":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":46,"column":8}},{"start":{"line":46,"column":8},"end":{"line":46,"column":8}}]},"2":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":8},"end":{"line":59,"column":8}},{"start":{"line":59,"column":8},"end":{"line":59,"column":8}}]},"3":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":8},"end":{"line":85,"column":8}},{"start":{"line":85,"column":8},"end":{"line":85,"column":8}}]},"4":{"line":110,"type":"if","locations":[{"start":{"line":110,"column":8},"end":{"line":110,"column":8}},{"start":{"line":110,"column":8},"end":{"line":110,"column":8}}]},"5":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":12},"end":{"line":115,"column":12}},{"start":{"line":115,"column":12},"end":{"line":115,"column":12}}]}}},"contracts/modules/standard/CCTCommon.sol":{"l":{"57":12,"75":12,"96":12,"99":12,"102":12,"105":12,"107":12,"110":12,"113":12,"114":12,"124":12,"134":12,"142":12,"148":12,"163":48,"173":12,"184":9,"191":13,"198":10,"204":9,"217":376,"227":48,"238":0,"328":478},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/standard/CCTCommon.sol","s":{"1":12,"2":12,"3":12,"4":12,"5":12,"6":12,"7":12,"8":12,"9":12,"10":12,"11":12,"12":12,"13":12,"14":12,"15":48,"16":12,"17":9,"18":13,"19":10,"20":9,"21":376,"22":48,"23":0,"24":478},"b":{"1":[12,2],"2":[12,0],"3":[12,0],"4":[12,0],"5":[12,0],"6":[12,0],"7":[48,0],"8":[12,0],"9":[3,3],"10":[3,3],"11":[3,3],"12":[352,24],"13":[33,15],"14":[63,3],"15":[3,3],"16":[48,12],"17":[12,12],"18":[12,3],"19":[3,3],"20":[15,6],"21":[3,3],"22":[3,3]},"f":{"1":12,"2":12,"3":12,"4":12,"5":12,"6":12,"7":48,"8":12,"9":3,"10":9,"11":13,"12":10,"13":9,"14":376,"15":48,"16":0,"17":3,"18":352,"19":33,"20":63,"21":3,"22":48,"23":12,"24":12,"25":3,"26":15,"27":3,"28":3,"29":478},"fnMap":{"1":{"name":"initialize","line":56,"loc":{"start":{"line":49,"column":4},"end":{"line":65,"column":4}}},"2":{"name":"_initialize","line":74,"loc":{"start":{"line":67,"column":4},"end":{"line":83,"column":4}}},"3":{"name":"__CMTAT_init","line":95,"loc":{"start":{"line":88,"column":4},"end":{"line":115,"column":4}}},"4":{"name":"__CMTAT_openzeppelin_init_unchained","line":122,"loc":{"start":{"line":120,"column":4},"end":{"line":125,"column":4}}},"5":{"name":"__CMTAT_modules_init_unchained","line":133,"loc":{"start":{"line":130,"column":4},"end":{"line":135,"column":4}}},"6":{"name":"__CMTAT_commonModules_init_unchained","line":140,"loc":{"start":{"line":137,"column":4},"end":{"line":153,"column":4}}},"7":{"name":"transfer","line":162,"loc":{"start":{"line":159,"column":4},"end":{"line":164,"column":4}}},"8":{"name":"transferFrom","line":172,"loc":{"start":{"line":168,"column":4},"end":{"line":174,"column":4}}},"9":{"name":"_authorizeAttachPolicyEngine","line":176,"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":88}}},"10":{"name":"decimals","line":183,"loc":{"start":{"line":183,"column":4},"end":{"line":185,"column":4}}},"11":{"name":"name","line":190,"loc":{"start":{"line":190,"column":4},"end":{"line":192,"column":4}}},"12":{"name":"symbol","line":197,"loc":{"start":{"line":197,"column":4},"end":{"line":199,"column":4}}},"13":{"name":"supportsInterface","line":201,"loc":{"start":{"line":201,"column":4},"end":{"line":207,"column":4}}},"14":{"name":"_mintOverride","line":213,"loc":{"start":{"line":213,"column":4},"end":{"line":218,"column":4}}},"15":{"name":"_burnOverride","line":223,"loc":{"start":{"line":223,"column":4},"end":{"line":228,"column":4}}},"16":{"name":"_minterTransferOverride","line":233,"loc":{"start":{"line":233,"column":4},"end":{"line":239,"column":4}}},"17":{"name":"_authorizeERC20AttributeManagement","line":247,"loc":{"start":{"line":247,"column":4},"end":{"line":247,"column":104}}},"18":{"name":"_authorizeMint","line":253,"loc":{"start":{"line":253,"column":4},"end":{"line":253,"column":84}}},"19":{"name":"_authorizeBurn","line":259,"loc":{"start":{"line":259,"column":4},"end":{"line":259,"column":84}}},"20":{"name":"_authorizeDocumentManagement","line":265,"loc":{"start":{"line":265,"column":4},"end":{"line":265,"column":103}}},"21":{"name":"_authorizeExtraInfoManagement","line":271,"loc":{"start":{"line":271,"column":4},"end":{"line":271,"column":106}}},"22":{"name":"_authorizeERC20Enforcer","line":277,"loc":{"start":{"line":277,"column":4},"end":{"line":277,"column":100}}},"23":{"name":"_authorizeForcedTransfer","line":283,"loc":{"start":{"line":283,"column":4},"end":{"line":283,"column":101}}},"24":{"name":"_authorizeSnapshots","line":289,"loc":{"start":{"line":289,"column":4},"end":{"line":289,"column":94}}},"25":{"name":"_authorizeCCIPSetAdmin","line":295,"loc":{"start":{"line":295,"column":4},"end":{"line":295,"column":87}}},"26":{"name":"_checkTokenBridge","line":306,"loc":{"start":{"line":306,"column":4},"end":{"line":306,"column":107}}},"27":{"name":"_authorizeBurnFrom","line":313,"loc":{"start":{"line":313,"column":4},"end":{"line":313,"column":94}}},"28":{"name":"_authorizeSelfBurn","line":320,"loc":{"start":{"line":320,"column":4},"end":{"line":320,"column":94}}},"29":{"name":"_update","line":323,"loc":{"start":{"line":323,"column":4},"end":{"line":329,"column":4}}}},"statementMap":{"1":{"start":{"line":57,"column":8},"end":{"line":57,"column":2274}},"2":{"start":{"line":75,"column":8},"end":{"line":75,"column":2837}},"3":{"start":{"line":96,"column":8},"end":{"line":96,"column":38}},"4":{"start":{"line":99,"column":8},"end":{"line":99,"column":33}},"5":{"start":{"line":102,"column":8},"end":{"line":102,"column":32}},"6":{"start":{"line":105,"column":8},"end":{"line":105,"column":60}},"7":{"start":{"line":107,"column":8},"end":{"line":107,"column":53}},"8":{"start":{"line":110,"column":8},"end":{"line":110,"column":84}},"9":{"start":{"line":113,"column":8},"end":{"line":113,"column":61}},"10":{"start":{"line":114,"column":8},"end":{"line":114,"column":61}},"11":{"start":{"line":124,"column":8},"end":{"line":124,"column":77}},"12":{"start":{"line":134,"column":8},"end":{"line":134,"column":90}},"13":{"start":{"line":142,"column":8},"end":{"line":142,"column":5266}},"14":{"start":{"line":148,"column":8},"end":{"line":148,"column":5465}},"15":{"start":{"line":163,"column":8},"end":{"line":163,"column":50}},"16":{"start":{"line":173,"column":8},"end":{"line":173,"column":60}},"17":{"start":{"line":184,"column":8},"end":{"line":184,"column":41}},"18":{"start":{"line":191,"column":8},"end":{"line":191,"column":37}},"19":{"start":{"line":198,"column":8},"end":{"line":198,"column":39}},"20":{"start":{"line":204,"column":8},"end":{"line":204,"column":7458}},"21":{"start":{"line":217,"column":8},"end":{"line":217,"column":52}},"22":{"start":{"line":227,"column":8},"end":{"line":227,"column":52}},"23":{"start":{"line":238,"column":8},"end":{"line":238,"column":63}},"24":{"start":{"line":328,"column":8},"end":{"line":328,"column":56}}},"branchMap":{"1":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":21},"end":{"line":56,"column":21}},{"start":{"line":56,"column":21},"end":{"line":56,"column":21}}]},"2":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":23},"end":{"line":74,"column":23}},{"start":{"line":74,"column":23},"end":{"line":74,"column":23}}]},"3":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":23},"end":{"line":95,"column":23}},{"start":{"line":95,"column":23},"end":{"line":95,"column":23}}]},"4":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":23},"end":{"line":122,"column":23}},{"start":{"line":122,"column":23},"end":{"line":122,"column":23}}]},"5":{"line":133,"type":"if","locations":[{"start":{"line":133,"column":23},"end":{"line":133,"column":23}},{"start":{"line":133,"column":23},"end":{"line":133,"column":23}}]},"6":{"line":140,"type":"if","locations":[{"start":{"line":140,"column":23},"end":{"line":140,"column":23}},{"start":{"line":140,"column":23},"end":{"line":140,"column":23}}]},"7":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":65},"end":{"line":162,"column":65}},{"start":{"line":162,"column":65},"end":{"line":162,"column":65}}]},"8":{"line":172,"type":"if","locations":[{"start":{"line":172,"column":65},"end":{"line":172,"column":65}},{"start":{"line":172,"column":65},"end":{"line":172,"column":65}}]},"9":{"line":176,"type":"if","locations":[{"start":{"line":176,"column":77},"end":{"line":176,"column":77}},{"start":{"line":176,"column":77},"end":{"line":176,"column":77}}]},"10":{"line":205,"type":"cond-expr","locations":[{"start":{"line":205,"column":12},"end":{"line":205,"column":64}},{"start":{"line":206,"column":12},"end":{"line":206,"column":69}}]},"11":{"line":247,"type":"if","locations":[{"start":{"line":247,"column":93},"end":{"line":247,"column":93}},{"start":{"line":247,"column":93},"end":{"line":247,"column":93}}]},"12":{"line":253,"type":"if","locations":[{"start":{"line":253,"column":73},"end":{"line":253,"column":73}},{"start":{"line":253,"column":73},"end":{"line":253,"column":73}}]},"13":{"line":259,"type":"if","locations":[{"start":{"line":259,"column":73},"end":{"line":259,"column":73}},{"start":{"line":259,"column":73},"end":{"line":259,"column":73}}]},"14":{"line":265,"type":"if","locations":[{"start":{"line":265,"column":92},"end":{"line":265,"column":92}},{"start":{"line":265,"column":92},"end":{"line":265,"column":92}}]},"15":{"line":271,"type":"if","locations":[{"start":{"line":271,"column":95},"end":{"line":271,"column":95}},{"start":{"line":271,"column":95},"end":{"line":271,"column":95}}]},"16":{"line":277,"type":"if","locations":[{"start":{"line":277,"column":89},"end":{"line":277,"column":89}},{"start":{"line":277,"column":89},"end":{"line":277,"column":89}}]},"17":{"line":283,"type":"if","locations":[{"start":{"line":283,"column":90},"end":{"line":283,"column":90}},{"start":{"line":283,"column":90},"end":{"line":283,"column":90}}]},"18":{"line":289,"type":"if","locations":[{"start":{"line":289,"column":83},"end":{"line":289,"column":83}},{"start":{"line":289,"column":83},"end":{"line":289,"column":83}}]},"19":{"line":295,"type":"if","locations":[{"start":{"line":295,"column":76},"end":{"line":295,"column":76}},{"start":{"line":295,"column":76},"end":{"line":295,"column":76}}]},"20":{"line":306,"type":"if","locations":[{"start":{"line":306,"column":96},"end":{"line":306,"column":96}},{"start":{"line":306,"column":96},"end":{"line":306,"column":96}}]},"21":{"line":313,"type":"if","locations":[{"start":{"line":313,"column":83},"end":{"line":313,"column":83}},{"start":{"line":313,"column":83},"end":{"line":313,"column":83}}]},"22":{"line":320,"type":"if","locations":[{"start":{"line":320,"column":83},"end":{"line":320,"column":83}},{"start":{"line":320,"column":83},"end":{"line":320,"column":83}}]}}}} \ No newline at end of file diff --git a/doc/coverage/coverage/base.css b/doc/coverage/coverage/base.css new file mode 100644 index 0000000..29737bc --- /dev/null +++ b/doc/coverage/coverage/base.css @@ -0,0 +1,213 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.medium .chart { border:1px solid #f9cd0b; } +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } +/* light gray */ +span.cline-neutral { background: #eaeaea; } + +.cbranch-no { background: yellow !important; color: #111; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/doc/coverage/coverage/coverage-final.json b/doc/coverage/coverage/coverage-final.json new file mode 100644 index 0000000..bf2d76c --- /dev/null +++ b/doc/coverage/coverage/coverage-final.json @@ -0,0 +1,20 @@ +{ +"contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol":{"l":{"34":47},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol","s":{"1":47},"b":{},"f":{"1":47},"fnMap":{"1":{"name":"constructor","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":42,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":1480}}},"branchMap":{}}, +"contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol":{"l":{"16":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol","s":{"1":1},"b":{},"f":{"1":1},"fnMap":{"1":{"name":"constructor","line":14,"loc":{"start":{"line":14,"column":4},"end":{"line":17,"column":4}}}},"statementMap":{"1":{"start":{"line":16,"column":8},"end":{"line":16,"column":29}}},"branchMap":{}}, +"contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol":{"l":{"19":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol","s":{"1":1},"b":{"1":[2,1]},"f":{"1":1,"2":2},"fnMap":{"1":{"name":"constructor","line":17,"loc":{"start":{"line":17,"column":4},"end":{"line":20,"column":4}}},"2":{"name":"_authorizeUpgrade","line":27,"loc":{"start":{"line":25,"column":4},"end":{"line":27,"column":79}}}},"statementMap":{"1":{"start":{"line":19,"column":8},"end":{"line":19,"column":29}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":49},"end":{"line":27,"column":49}},{"start":{"line":27,"column":49},"end":{"line":27,"column":49}}]}}}, +"contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol":{"l":{"34":8},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol","s":{"1":8},"b":{},"f":{"1":8},"fnMap":{"1":{"name":"constructor","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":42,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":1416}}},"branchMap":{}}, +"contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol":{"l":{"16":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol","s":{"1":1},"b":{},"f":{"1":1},"fnMap":{"1":{"name":"constructor","line":14,"loc":{"start":{"line":14,"column":4},"end":{"line":17,"column":4}}}},"statementMap":{"1":{"start":{"line":16,"column":8},"end":{"line":16,"column":29}}},"branchMap":{}}, +"contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol":{"l":{"17":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol","s":{"1":1},"b":{"1":[2,1]},"f":{"1":1,"2":2},"fnMap":{"1":{"name":"constructor","line":15,"loc":{"start":{"line":15,"column":4},"end":{"line":18,"column":4}}},"2":{"name":"_authorizeUpgrade","line":23,"loc":{"start":{"line":23,"column":4},"end":{"line":23,"column":112}}}},"statementMap":{"1":{"start":{"line":17,"column":8},"end":{"line":17,"column":29}}},"branchMap":{"1":{"line":23,"type":"if","locations":[{"start":{"line":23,"column":101},"end":{"line":23,"column":101}},{"start":{"line":23,"column":101},"end":{"line":23,"column":101}}]}}}, +"contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol":{"l":{"31":34,"32":34,"33":34,"34":34,"36":34,"37":30,"38":30,"39":30,"41":4,"42":4,"44":0,"47":34,"48":34,"49":34,"50":34,"51":34,"53":34},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol","s":{"1":34,"2":34,"3":34,"4":34,"5":34,"6":4,"7":34,"8":34},"b":{"1":[30,4],"2":[4,0]},"f":{"1":34},"fnMap":{"1":{"name":"extract","line":28,"loc":{"start":{"line":28,"column":4},"end":{"line":54,"column":4}}}},"statementMap":{"1":{"start":{"line":31,"column":8},"end":{"line":31,"column":23}},"2":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"3":{"start":{"line":33,"column":8},"end":{"line":33,"column":18}},"4":{"start":{"line":34,"column":8},"end":{"line":34,"column":22}},"5":{"start":{"line":36,"column":8},"end":{"line":36,"column":1498}},"6":{"start":{"line":40,"column":15},"end":{"line":40,"column":1711}},"7":{"start":{"line":47,"column":8},"end":{"line":47,"column":82}},"8":{"start":{"line":53,"column":8},"end":{"line":53,"column":21}}},"branchMap":{"1":{"line":36,"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":36,"column":8}},{"start":{"line":36,"column":8},"end":{"line":36,"column":8}}]},"2":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":15},"end":{"line":40,"column":15}},{"start":{"line":40,"column":15},"end":{"line":40,"column":15}}]}}}, +"contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol":{"l":{"38":69,"49":33,"50":30,"51":30,"52":30,"53":37,"54":37,"64":2,"65":2,"66":2,"67":2,"68":2,"69":2,"71":2,"78":1,"85":1,"101":35,"102":35,"104":35,"106":33,"107":33,"108":33,"109":33,"111":33,"112":35,"113":35,"114":13,"115":13,"120":2,"121":2,"122":2,"124":2,"125":2,"126":2,"127":1,"128":1,"133":21},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol","s":{"1":33,"2":30,"3":30,"4":30,"5":37,"6":37,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":1,"14":1,"15":35,"16":35,"17":35,"18":33,"19":33,"20":33,"21":33,"22":33,"23":35,"24":35,"25":13,"26":2,"27":2,"28":2,"29":2,"30":2,"31":2,"32":1,"33":21},"b":{"1":[33,0],"2":[30,3],"3":[37,0],"4":[2,1],"5":[2,0],"6":[33,2],"7":[13,22],"8":[1,1]},"f":{"1":69,"2":33,"3":2,"4":1,"5":1,"6":35},"fnMap":{"1":{"name":"_getStorage","line":37,"loc":{"start":{"line":37,"column":4},"end":{"line":41,"column":4}}},"2":{"name":"configure","line":48,"loc":{"start":{"line":48,"column":4},"end":{"line":57,"column":4}}},"3":{"name":"setRules","line":63,"loc":{"start":{"line":63,"column":4},"end":{"line":72,"column":4}}},"4":{"name":"rules","line":77,"loc":{"start":{"line":77,"column":4},"end":{"line":79,"column":4}}},"5":{"name":"rulesCount","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":86,"column":4}}},"6":{"name":"run","line":94,"loc":{"start":{"line":94,"column":4},"end":{"line":134,"column":4}}}},"statementMap":{"1":{"start":{"line":49,"column":8},"end":{"line":49,"column":2016}},"2":{"start":{"line":50,"column":12},"end":{"line":50,"column":76}},"3":{"start":{"line":51,"column":12},"end":{"line":51,"column":63}},"4":{"start":{"line":52,"column":12},"end":{"line":52,"column":2204}},"5":{"start":{"line":53,"column":16},"end":{"line":53,"column":81}},"6":{"start":{"line":54,"column":16},"end":{"line":54,"column":48}},"7":{"start":{"line":64,"column":8},"end":{"line":64,"column":59}},"8":{"start":{"line":65,"column":8},"end":{"line":65,"column":46}},"9":{"start":{"line":67,"column":8},"end":{"line":67,"column":2745}},"10":{"start":{"line":68,"column":12},"end":{"line":68,"column":83}},"11":{"start":{"line":69,"column":12},"end":{"line":69,"column":34}},"12":{"start":{"line":71,"column":8},"end":{"line":71,"column":55}},"13":{"start":{"line":78,"column":8},"end":{"line":78,"column":34}},"14":{"start":{"line":85,"column":8},"end":{"line":85,"column":41}},"15":{"start":{"line":101,"column":8},"end":{"line":101,"column":59}},"16":{"start":{"line":102,"column":8},"end":{"line":102,"column":36}},"17":{"start":{"line":104,"column":8},"end":{"line":104,"column":3910}},"18":{"start":{"line":106,"column":12},"end":{"line":106,"column":66}},"19":{"start":{"line":107,"column":12},"end":{"line":107,"column":63}},"20":{"start":{"line":108,"column":12},"end":{"line":108,"column":61}},"21":{"start":{"line":109,"column":12},"end":{"line":109,"column":65}},"22":{"start":{"line":111,"column":12},"end":{"line":111,"column":4298}},"23":{"start":{"line":112,"column":16},"end":{"line":112,"column":96}},"24":{"start":{"line":113,"column":16},"end":{"line":113,"column":4452}},"25":{"start":{"line":114,"column":20},"end":{"line":114,"column":90}},"26":{"start":{"line":120,"column":12},"end":{"line":120,"column":63}},"27":{"start":{"line":121,"column":12},"end":{"line":121,"column":61}},"28":{"start":{"line":122,"column":12},"end":{"line":122,"column":65}},"29":{"start":{"line":124,"column":12},"end":{"line":124,"column":4945}},"30":{"start":{"line":125,"column":16},"end":{"line":125,"column":83}},"31":{"start":{"line":126,"column":16},"end":{"line":126,"column":5086}},"32":{"start":{"line":127,"column":20},"end":{"line":127,"column":90}},"33":{"start":{"line":133,"column":8},"end":{"line":133,"column":50}}},"branchMap":{"1":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":68},"end":{"line":48,"column":68}},{"start":{"line":48,"column":68},"end":{"line":48,"column":68}}]},"2":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":8},"end":{"line":49,"column":8}},{"start":{"line":49,"column":8},"end":{"line":49,"column":8}}]},"3":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":16},"end":{"line":53,"column":16}},{"start":{"line":53,"column":16},"end":{"line":53,"column":16}}]},"4":{"line":63,"type":"if","locations":[{"start":{"line":63,"column":56},"end":{"line":63,"column":56}},{"start":{"line":63,"column":56},"end":{"line":63,"column":56}}]},"5":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":12},"end":{"line":68,"column":12}},{"start":{"line":68,"column":12},"end":{"line":68,"column":12}}]},"6":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":8},"end":{"line":104,"column":8}},{"start":{"line":104,"column":8},"end":{"line":104,"column":8}}]},"7":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":16},"end":{"line":113,"column":16}},{"start":{"line":113,"column":16},"end":{"line":113,"column":16}}]},"8":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":16},"end":{"line":126,"column":16}},{"start":{"line":126,"column":16},"end":{"line":126,"column":16}}]}}}, +"contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol":{"l":{"16":1,"20":0,"24":8,"28":1,"29":1,"30":1,"35":5,"45":0,"51":0,"61":0,"67":0,"81":7,"87":1,"91":1,"95":1,"101":1,"117":1,"126":3},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol","s":{"1":0,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0,"8":7,"9":1,"10":1,"11":3},"b":{"1":[1,0],"2":[7,0],"3":[1,1],"4":[1,1],"5":[1,0],"6":[1,0]},"f":{"1":1,"2":0,"3":8,"4":1,"5":5,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":7,"21":1,"22":1,"23":1,"24":1,"25":1,"26":0,"27":0,"28":0,"29":0,"30":1,"31":3},"fnMap":{"1":{"name":"setDetachShouldRevert","line":15,"loc":{"start":{"line":15,"column":4},"end":{"line":17,"column":4}}},"2":{"name":"typeAndVersion","line":19,"loc":{"start":{"line":19,"column":4},"end":{"line":21,"column":4}}},"3":{"name":"attach","line":23,"loc":{"start":{"line":23,"column":4},"end":{"line":25,"column":4}}},"4":{"name":"detach","line":27,"loc":{"start":{"line":27,"column":4},"end":{"line":32,"column":4}}},"5":{"name":"run","line":34,"loc":{"start":{"line":34,"column":4},"end":{"line":36,"column":4}}},"6":{"name":"check","line":38,"loc":{"start":{"line":38,"column":4},"end":{"line":38,"column":61}}},"7":{"name":"setExtractor","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":40,"column":67}}},"8":{"name":"setExtractors","line":42,"loc":{"start":{"line":42,"column":4},"end":{"line":42,"column":79}}},"9":{"name":"getExtractor","line":44,"loc":{"start":{"line":44,"column":4},"end":{"line":46,"column":4}}},"10":{"name":"setPolicyMapper","line":48,"loc":{"start":{"line":48,"column":4},"end":{"line":48,"column":71}}},"11":{"name":"getPolicyMapper","line":50,"loc":{"start":{"line":50,"column":4},"end":{"line":52,"column":4}}},"12":{"name":"addPolicy","line":54,"loc":{"start":{"line":54,"column":4},"end":{"line":54,"column":93}}},"13":{"name":"addPolicyAt","line":56,"loc":{"start":{"line":56,"column":4},"end":{"line":56,"column":104}}},"14":{"name":"removePolicy","line":58,"loc":{"start":{"line":58,"column":4},"end":{"line":58,"column":76}}},"15":{"name":"getPolicies","line":60,"loc":{"start":{"line":60,"column":4},"end":{"line":62,"column":4}}},"16":{"name":"setPolicyConfiguration","line":64,"loc":{"start":{"line":64,"column":4},"end":{"line":64,"column":102}}},"17":{"name":"getPolicyConfigVersion","line":66,"loc":{"start":{"line":66,"column":4},"end":{"line":68,"column":4}}},"18":{"name":"setDefaultPolicyAllow","line":70,"loc":{"start":{"line":70,"column":4},"end":{"line":70,"column":65}}},"19":{"name":"setTargetDefaultPolicyAllow","line":72,"loc":{"start":{"line":72,"column":4},"end":{"line":72,"column":80}}},"20":{"name":"initialize","line":80,"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":4}}},"21":{"name":"_authorizeAttachPolicyEngine","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":84,"column":75}}},"22":{"name":"guardedRun","line":86,"loc":{"start":{"line":86,"column":4},"end":{"line":88,"column":4}}},"23":{"name":"guardedRunWithContext","line":90,"loc":{"start":{"line":90,"column":4},"end":{"line":92,"column":4}}},"24":{"name":"guardedRunAndRevert","line":94,"loc":{"start":{"line":94,"column":4},"end":{"line":96,"column":4}}},"25":{"name":"initializeWithPolicyEngine","line":100,"loc":{"start":{"line":100,"column":4},"end":{"line":102,"column":4}}},"26":{"name":"_authorizeAttachPolicyEngine","line":104,"loc":{"start":{"line":104,"column":4},"end":{"line":104,"column":75}}},"27":{"name":"_authorizePause","line":106,"loc":{"start":{"line":106,"column":4},"end":{"line":106,"column":55}}},"28":{"name":"_authorizeDeactivate","line":108,"loc":{"start":{"line":108,"column":4},"end":{"line":108,"column":60}}},"29":{"name":"_authorizeFreeze","line":110,"loc":{"start":{"line":110,"column":4},"end":{"line":110,"column":56}}},"30":{"name":"exposedTryCheckPolicies","line":112,"loc":{"start":{"line":112,"column":4},"end":{"line":118,"column":4}}},"31":{"name":"exposedTransferred","line":120,"loc":{"start":{"line":120,"column":4},"end":{"line":127,"column":4}}}},"statementMap":{"1":{"start":{"line":20,"column":8},"end":{"line":20,"column":39}},"2":{"start":{"line":29,"column":8},"end":{"line":29,"column":987}},"3":{"start":{"line":30,"column":12},"end":{"line":30,"column":52}},"4":{"start":{"line":45,"column":8},"end":{"line":45,"column":25}},"5":{"start":{"line":51,"column":8},"end":{"line":51,"column":25}},"6":{"start":{"line":61,"column":8},"end":{"line":61,"column":31}},"7":{"start":{"line":67,"column":8},"end":{"line":67,"column":16}},"8":{"start":{"line":81,"column":8},"end":{"line":81,"column":43}},"9":{"start":{"line":101,"column":8},"end":{"line":101,"column":43}},"10":{"start":{"line":117,"column":8},"end":{"line":117,"column":56}},"11":{"start":{"line":126,"column":8},"end":{"line":126,"column":53}}},"branchMap":{"1":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":8},"end":{"line":29,"column":8}},{"start":{"line":29,"column":8},"end":{"line":29,"column":8}}]},"2":{"line":80,"type":"if","locations":[{"start":{"line":80,"column":55},"end":{"line":80,"column":55}},{"start":{"line":80,"column":55},"end":{"line":80,"column":55}}]},"3":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":35},"end":{"line":86,"column":35}},{"start":{"line":86,"column":35},"end":{"line":86,"column":35}}]},"4":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":68},"end":{"line":90,"column":68}},{"start":{"line":90,"column":68},"end":{"line":90,"column":68}}]},"5":{"line":94,"type":"if","locations":[{"start":{"line":94,"column":44},"end":{"line":94,"column":44}},{"start":{"line":94,"column":44},"end":{"line":94,"column":44}}]},"6":{"line":100,"type":"if","locations":[{"start":{"line":100,"column":71},"end":{"line":100,"column":71}},{"start":{"line":100,"column":71},"end":{"line":100,"column":71}}]}}}, +"contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol":{"l":{"21":26,"29":25,"38":23,"42":0,"51":0,"64":0,"68":0,"72":8,"88":3,"89":3,"93":14,"94":14,"95":12,"100":3,"108":12,"109":10,"110":6,"119":12,"123":0,"132":0,"145":0,"149":0,"153":6,"154":4,"155":0},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol","s":{"1":25,"2":23,"3":0,"4":0,"5":0,"6":0,"7":8,"8":3,"9":14,"10":12,"11":2,"12":10,"13":4,"14":6,"15":12,"16":0,"17":0,"18":0,"19":0,"20":6,"21":2,"22":4,"23":4,"24":0},"b":{"1":[8,17],"2":[8,0],"3":[3,0],"4":[3,0],"5":[2,10],"6":[4,6],"7":[0,0],"8":[2,4],"9":[4,0]},"f":{"1":26,"2":25,"3":23,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":8,"11":3,"12":14,"13":3,"14":12,"15":12,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":6},"fnMap":{"1":{"name":"constructor","line":20,"loc":{"start":{"line":20,"column":4},"end":{"line":22,"column":4}}},"2":{"name":"detectTransferRestriction","line":24,"loc":{"start":{"line":24,"column":4},"end":{"line":30,"column":4}}},"3":{"name":"detectTransferRestrictionFrom","line":32,"loc":{"start":{"line":32,"column":4},"end":{"line":39,"column":4}}},"4":{"name":"canTransfer","line":41,"loc":{"start":{"line":41,"column":4},"end":{"line":43,"column":4}}},"5":{"name":"canTransferFrom","line":45,"loc":{"start":{"line":45,"column":4},"end":{"line":52,"column":4}}},"6":{"name":"transferred","line":54,"loc":{"start":{"line":54,"column":4},"end":{"line":54,"column":108}}},"7":{"name":"transferred","line":56,"loc":{"start":{"line":56,"column":4},"end":{"line":61,"column":30}}},"8":{"name":"supportsInterface","line":63,"loc":{"start":{"line":63,"column":4},"end":{"line":65,"column":4}}},"9":{"name":"canReturnTransferRestrictionCode","line":67,"loc":{"start":{"line":67,"column":4},"end":{"line":69,"column":4}}},"10":{"name":"messageForTransferRestriction","line":71,"loc":{"start":{"line":71,"column":4},"end":{"line":73,"column":4}}},"11":{"name":"onlyOwner","line":87,"loc":{"start":{"line":87,"column":4},"end":{"line":90,"column":4}}},"12":{"name":"constructor","line":92,"loc":{"start":{"line":92,"column":4},"end":{"line":97,"column":4}}},"13":{"name":"setRestricted","line":99,"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":4}}},"14":{"name":"detectTransferRestriction","line":103,"loc":{"start":{"line":103,"column":4},"end":{"line":111,"column":4}}},"15":{"name":"detectTransferRestrictionFrom","line":113,"loc":{"start":{"line":113,"column":4},"end":{"line":120,"column":4}}},"16":{"name":"canTransfer","line":122,"loc":{"start":{"line":122,"column":4},"end":{"line":124,"column":4}}},"17":{"name":"canTransferFrom","line":126,"loc":{"start":{"line":126,"column":4},"end":{"line":133,"column":4}}},"18":{"name":"transferred","line":135,"loc":{"start":{"line":135,"column":4},"end":{"line":135,"column":108}}},"19":{"name":"transferred","line":137,"loc":{"start":{"line":137,"column":4},"end":{"line":142,"column":30}}},"20":{"name":"supportsInterface","line":144,"loc":{"start":{"line":144,"column":4},"end":{"line":146,"column":4}}},"21":{"name":"canReturnTransferRestrictionCode","line":148,"loc":{"start":{"line":148,"column":4},"end":{"line":150,"column":4}}},"22":{"name":"messageForTransferRestriction","line":152,"loc":{"start":{"line":152,"column":4},"end":{"line":156,"column":4}}}},"statementMap":{"1":{"start":{"line":29,"column":8},"end":{"line":29,"column":91}},"2":{"start":{"line":38,"column":8},"end":{"line":38,"column":58}},"3":{"start":{"line":42,"column":8},"end":{"line":42,"column":63}},"4":{"start":{"line":51,"column":8},"end":{"line":51,"column":44}},"5":{"start":{"line":64,"column":8},"end":{"line":64,"column":53}},"6":{"start":{"line":68,"column":8},"end":{"line":68,"column":38}},"7":{"start":{"line":72,"column":8},"end":{"line":72,"column":82}},"8":{"start":{"line":88,"column":8},"end":{"line":88,"column":49}},"9":{"start":{"line":94,"column":8},"end":{"line":94,"column":2793}},"10":{"start":{"line":108,"column":8},"end":{"line":108,"column":52}},"11":{"start":{"line":108,"column":30},"end":{"line":108,"column":52}},"12":{"start":{"line":109,"column":8},"end":{"line":109,"column":48}},"13":{"start":{"line":109,"column":28},"end":{"line":109,"column":48}},"14":{"start":{"line":110,"column":8},"end":{"line":110,"column":52}},"15":{"start":{"line":119,"column":8},"end":{"line":119,"column":58}},"16":{"start":{"line":123,"column":8},"end":{"line":123,"column":63}},"17":{"start":{"line":132,"column":8},"end":{"line":132,"column":44}},"18":{"start":{"line":145,"column":8},"end":{"line":145,"column":53}},"19":{"start":{"line":149,"column":8},"end":{"line":149,"column":63}},"20":{"start":{"line":153,"column":8},"end":{"line":153,"column":66}},"21":{"start":{"line":153,"column":37},"end":{"line":153,"column":66}},"22":{"start":{"line":154,"column":8},"end":{"line":154,"column":67}},"23":{"start":{"line":154,"column":35},"end":{"line":154,"column":67}},"24":{"start":{"line":155,"column":8},"end":{"line":155,"column":29}}},"branchMap":{"1":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":36},"end":{"line":29,"column":50}},{"start":{"line":29,"column":54},"end":{"line":29,"column":90}}]},"2":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":41},"end":{"line":72,"column":64}},{"start":{"line":72,"column":68},"end":{"line":72,"column":81}}]},"3":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":8}},{"start":{"line":88,"column":8},"end":{"line":88,"column":8}}]},"4":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":66},"end":{"line":99,"column":66}},{"start":{"line":99,"column":66},"end":{"line":99,"column":66}}]},"5":{"line":108,"type":"if","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":8}},{"start":{"line":108,"column":8},"end":{"line":108,"column":8}}]},"6":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"7":{"line":149,"type":"cond-expr","locations":[{"start":{"line":149,"column":15},"end":{"line":149,"column":37}},{"start":{"line":149,"column":42},"end":{"line":149,"column":62}}]},"8":{"line":153,"type":"if","locations":[{"start":{"line":153,"column":8},"end":{"line":153,"column":8}},{"start":{"line":153,"column":8},"end":{"line":153,"column":8}}]},"9":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":8},"end":{"line":154,"column":8}},{"start":{"line":154,"column":8},"end":{"line":154,"column":8}}]}}}, +"contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol":{"l":{"34":4,"35":4,"37":4,"38":2,"40":1,"41":1,"43":1,"46":3,"47":3,"48":3,"49":3},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol","s":{"1":4,"2":4,"3":4,"4":2,"5":3,"6":3},"b":{"1":[2,2],"2":[1,1],"3":[1,1]},"f":{"1":4},"fnMap":{"1":{"name":"extract","line":31,"loc":{"start":{"line":31,"column":4},"end":{"line":50,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":23}},"2":{"start":{"line":35,"column":8},"end":{"line":35,"column":22}},"3":{"start":{"line":37,"column":8},"end":{"line":37,"column":1615}},"4":{"start":{"line":39,"column":15},"end":{"line":39,"column":1791}},"5":{"start":{"line":46,"column":8},"end":{"line":46,"column":82}},"6":{"start":{"line":49,"column":8},"end":{"line":49,"column":21}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":8},"end":{"line":37,"column":8}},{"start":{"line":37,"column":8},"end":{"line":37,"column":8}}]},"2":{"line":37,"type":"cond-expr","locations":[{"start":{"line":37,"column":12},"end":{"line":37,"column":44}},{"start":{"line":37,"column":49},"end":{"line":37,"column":86}}]},"3":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":15},"end":{"line":39,"column":15}},{"start":{"line":39,"column":15},"end":{"line":39,"column":15}}]}}}, +"contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol":{"l":{"32":4374,"38":8,"39":8,"43":71,"52":703,"53":1,"55":702,"56":702,"59":612,"60":593,"61":1,"70":2,"71":1,"73":1,"76":1,"83":7,"84":4,"88":75,"89":74,"90":4,"93":1,"96":74,"97":74,"98":74,"103":1054,"108":3,"113":1752,"118":4,"127":11},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol","s":{"1":8,"2":8,"3":71,"4":703,"5":702,"6":702,"7":593,"8":1,"9":2,"10":1,"11":7,"12":4,"13":75,"14":74,"15":4,"16":1,"17":74,"18":74,"19":1054,"20":1752,"21":11},"b":{"1":[8,0],"2":[71,0],"3":[1,702],"4":[1,592],"5":[1,1],"6":[74,1],"7":[4,70],"8":[4,0]},"f":{"1":4374,"2":8,"3":71,"4":703,"5":2,"6":7,"7":75,"8":1054,"9":3,"10":1752,"11":4,"12":11},"fnMap":{"1":{"name":"_policyProtectedStorage","line":30,"loc":{"start":{"line":30,"column":4},"end":{"line":35,"column":4}}},"2":{"name":"__PolicyProtected_init","line":37,"loc":{"start":{"line":37,"column":4},"end":{"line":40,"column":4}}},"3":{"name":"__PolicyProtected_init_unchained","line":42,"loc":{"start":{"line":42,"column":4},"end":{"line":44,"column":4}}},"4":{"name":"runPolicy","line":51,"loc":{"start":{"line":51,"column":4},"end":{"line":63,"column":4}}},"5":{"name":"runPolicyWithContext","line":69,"loc":{"start":{"line":69,"column":4},"end":{"line":77,"column":4}}},"6":{"name":"attachPolicyEngine","line":82,"loc":{"start":{"line":82,"column":4},"end":{"line":85,"column":4}}},"7":{"name":"_attachPolicyEngine","line":87,"loc":{"start":{"line":87,"column":4},"end":{"line":99,"column":4}}},"8":{"name":"getPolicyEngine","line":102,"loc":{"start":{"line":102,"column":4},"end":{"line":104,"column":4}}},"9":{"name":"setContext","line":107,"loc":{"start":{"line":107,"column":4},"end":{"line":109,"column":4}}},"10":{"name":"getContext","line":112,"loc":{"start":{"line":112,"column":4},"end":{"line":114,"column":4}}},"11":{"name":"clearContext","line":117,"loc":{"start":{"line":117,"column":4},"end":{"line":119,"column":4}}},"12":{"name":"supportsInterface","line":124,"loc":{"start":{"line":124,"column":4},"end":{"line":128,"column":4}}}},"statementMap":{"1":{"start":{"line":38,"column":8},"end":{"line":38,"column":22}},"2":{"start":{"line":39,"column":8},"end":{"line":39,"column":53}},"3":{"start":{"line":43,"column":8},"end":{"line":43,"column":40}},"4":{"start":{"line":52,"column":8},"end":{"line":52,"column":2588}},"5":{"start":{"line":55,"column":8},"end":{"line":55,"column":43}},"6":{"start":{"line":56,"column":8},"end":{"line":56,"column":2778}},"7":{"start":{"line":60,"column":8},"end":{"line":60,"column":2965}},"8":{"start":{"line":61,"column":12},"end":{"line":61,"column":25}},"9":{"start":{"line":70,"column":8},"end":{"line":70,"column":3303}},"10":{"start":{"line":73,"column":8},"end":{"line":73,"column":3448}},"11":{"start":{"line":83,"column":8},"end":{"line":83,"column":49}},"12":{"start":{"line":84,"column":8},"end":{"line":84,"column":40}},"13":{"start":{"line":88,"column":8},"end":{"line":88,"column":75}},"14":{"start":{"line":89,"column":8},"end":{"line":89,"column":4090}},"15":{"start":{"line":90,"column":12},"end":{"line":90,"column":4175}},"16":{"start":{"line":93,"column":16},"end":{"line":93,"column":102}},"17":{"start":{"line":97,"column":8},"end":{"line":97,"column":43}},"18":{"start":{"line":98,"column":8},"end":{"line":98,"column":47}},"19":{"start":{"line":103,"column":8},"end":{"line":103,"column":62}},"20":{"start":{"line":113,"column":8},"end":{"line":113,"column":66}},"21":{"start":{"line":127,"column":8},"end":{"line":127,"column":104}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":67},"end":{"line":37,"column":67}},{"start":{"line":37,"column":67},"end":{"line":37,"column":67}}]},"2":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":77},"end":{"line":42,"column":77}},{"start":{"line":42,"column":77},"end":{"line":42,"column":77}}]},"3":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":8},"end":{"line":52,"column":8}},{"start":{"line":52,"column":8},"end":{"line":52,"column":8}}]},"4":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":60,"column":8}},{"start":{"line":60,"column":8},"end":{"line":60,"column":8}}]},"5":{"line":70,"type":"if","locations":[{"start":{"line":70,"column":8},"end":{"line":70,"column":8}},{"start":{"line":70,"column":8},"end":{"line":70,"column":8}}]},"6":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":8}},{"start":{"line":88,"column":8},"end":{"line":88,"column":8}}]},"7":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":8},"end":{"line":89,"column":8}},{"start":{"line":89,"column":8},"end":{"line":89,"column":8}}]},"8":{"line":127,"type":"cond-expr","locations":[{"start":{"line":127,"column":15},"end":{"line":127,"column":63}},{"start":{"line":127,"column":68},"end":{"line":127,"column":103}}]}}}, +"contracts/modules/demo/DemoImports.sol":{"l":{},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/demo/DemoImports.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, +"contracts/modules/lite/CCTCMTATBaseERC1404.sol":{"l":{"31":10,"35":1,"37":9,"49":233,"61":35,"72":8,"73":8,"74":1,"75":1,"76":1,"79":7,"85":6},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC1404.sol","s":{"1":10,"2":1,"3":9,"4":233,"5":35,"6":8,"7":8,"8":1,"9":1,"10":1,"11":7,"12":6},"b":{"1":[1,9],"2":[1,7],"3":[1,0]},"f":{"1":10,"2":233,"3":35,"4":8,"5":6},"fnMap":{"1":{"name":"messageForTransferRestriction","line":28,"loc":{"start":{"line":28,"column":4},"end":{"line":39,"column":4}}},"2":{"name":"canTransfer","line":44,"loc":{"start":{"line":44,"column":4},"end":{"line":50,"column":4}}},"3":{"name":"canTransferFrom","line":55,"loc":{"start":{"line":55,"column":4},"end":{"line":62,"column":4}}},"4":{"name":"_detectTransferRestriction","line":67,"loc":{"start":{"line":67,"column":4},"end":{"line":80,"column":4}}},"5":{"name":"supportsInterface","line":82,"loc":{"start":{"line":82,"column":4},"end":{"line":86,"column":4}}}},"statementMap":{"1":{"start":{"line":31,"column":8},"end":{"line":31,"column":1405}},"2":{"start":{"line":35,"column":12},"end":{"line":35,"column":74}},"3":{"start":{"line":37,"column":12},"end":{"line":37,"column":95}},"4":{"start":{"line":49,"column":8},"end":{"line":49,"column":68}},"5":{"start":{"line":61,"column":8},"end":{"line":61,"column":81}},"6":{"start":{"line":72,"column":8},"end":{"line":72,"column":80}},"7":{"start":{"line":73,"column":8},"end":{"line":73,"column":2947}},"8":{"start":{"line":74,"column":12},"end":{"line":74,"column":88}},"9":{"start":{"line":75,"column":12},"end":{"line":75,"column":3082}},"10":{"start":{"line":76,"column":16},"end":{"line":76,"column":114}},"11":{"start":{"line":79,"column":8},"end":{"line":79,"column":88}},"12":{"start":{"line":85,"column":8},"end":{"line":85,"column":70}}},"branchMap":{"1":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":8},"end":{"line":31,"column":8}},{"start":{"line":31,"column":8},"end":{"line":31,"column":8}}]},"2":{"line":73,"type":"if","locations":[{"start":{"line":73,"column":8},"end":{"line":73,"column":8}},{"start":{"line":73,"column":8},"end":{"line":73,"column":8}}]},"3":{"line":75,"type":"if","locations":[{"start":{"line":75,"column":12},"end":{"line":75,"column":12}},{"start":{"line":75,"column":12},"end":{"line":75,"column":12}}]}}}, +"contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol":{"l":{"29":119,"35":81,"45":29,"54":731,"55":716,"65":144,"66":120,"77":27,"78":18,"85":3,"92":10,"99":10,"106":12,"132":39,"167":939},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol","s":{"1":119,"2":81,"3":29,"4":731,"5":716,"6":144,"7":120,"8":27,"9":18,"10":3,"11":10,"12":10,"13":12,"14":39,"15":939},"b":{"1":[119,3],"2":[6,3],"3":[9,3],"4":[39,12],"5":[15,3],"6":[9,6],"7":[18,6],"8":[12,6]},"f":{"1":119,"2":81,"3":29,"4":731,"5":144,"6":27,"7":3,"8":10,"9":10,"10":12,"11":9,"12":39,"13":9,"14":12,"15":939},"fnMap":{"1":{"name":"approve","line":28,"loc":{"start":{"line":25,"column":4},"end":{"line":30,"column":4}}},"2":{"name":"transfer","line":31,"loc":{"start":{"line":31,"column":4},"end":{"line":36,"column":4}}},"3":{"name":"transferFrom","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":46,"column":4}}},"4":{"name":"_mintOverride","line":50,"loc":{"start":{"line":50,"column":4},"end":{"line":56,"column":4}}},"5":{"name":"_burnOverride","line":61,"loc":{"start":{"line":61,"column":4},"end":{"line":67,"column":4}}},"6":{"name":"_minterTransferOverride","line":72,"loc":{"start":{"line":72,"column":4},"end":{"line":79,"column":4}}},"7":{"name":"decimals","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":86,"column":4}}},"8":{"name":"name","line":91,"loc":{"start":{"line":91,"column":4},"end":{"line":93,"column":4}}},"9":{"name":"symbol","line":98,"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":4}}},"10":{"name":"supportsInterface","line":103,"loc":{"start":{"line":103,"column":4},"end":{"line":109,"column":4}}},"11":{"name":"_authorizeCCIPSetAdmin","line":120,"loc":{"start":{"line":120,"column":4},"end":{"line":120,"column":106}}},"12":{"name":"_checkTokenBridge","line":131,"loc":{"start":{"line":131,"column":4},"end":{"line":133,"column":4}}},"13":{"name":"_authorizeBurnFrom","line":145,"loc":{"start":{"line":140,"column":4},"end":{"line":146,"column":5}}},"14":{"name":"_authorizeSelfBurn","line":158,"loc":{"start":{"line":153,"column":4},"end":{"line":159,"column":5}}},"15":{"name":"_update","line":162,"loc":{"start":{"line":162,"column":4},"end":{"line":168,"column":4}}}},"statementMap":{"1":{"start":{"line":29,"column":8},"end":{"line":29,"column":55}},"2":{"start":{"line":35,"column":8},"end":{"line":35,"column":50}},"3":{"start":{"line":45,"column":8},"end":{"line":45,"column":60}},"4":{"start":{"line":54,"column":8},"end":{"line":54,"column":64}},"5":{"start":{"line":55,"column":8},"end":{"line":55,"column":60}},"6":{"start":{"line":65,"column":8},"end":{"line":65,"column":64}},"7":{"start":{"line":66,"column":8},"end":{"line":66,"column":60}},"8":{"start":{"line":77,"column":8},"end":{"line":77,"column":53}},"9":{"start":{"line":78,"column":8},"end":{"line":78,"column":71}},"10":{"start":{"line":85,"column":8},"end":{"line":85,"column":41}},"11":{"start":{"line":92,"column":8},"end":{"line":92,"column":37}},"12":{"start":{"line":99,"column":8},"end":{"line":99,"column":39}},"13":{"start":{"line":106,"column":8},"end":{"line":106,"column":3715}},"14":{"start":{"line":132,"column":8},"end":{"line":132,"column":68}},"15":{"start":{"line":167,"column":8},"end":{"line":167,"column":56}}},"branchMap":{"1":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":48},"end":{"line":28,"column":48}},{"start":{"line":28,"column":48},"end":{"line":28,"column":48}}]},"2":{"line":107,"type":"cond-expr","locations":[{"start":{"line":107,"column":12},"end":{"line":107,"column":64}},{"start":{"line":108,"column":12},"end":{"line":108,"column":62}}]},"3":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":76},"end":{"line":120,"column":76}},{"start":{"line":120,"column":76},"end":{"line":120,"column":76}}]},"4":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":96},"end":{"line":131,"column":96}},{"start":{"line":131,"column":96},"end":{"line":131,"column":96}}]},"5":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":8},"end":{"line":144,"column":8}},{"start":{"line":144,"column":8},"end":{"line":144,"column":8}}]},"6":{"line":145,"type":"if","locations":[{"start":{"line":145,"column":8},"end":{"line":145,"column":8}},{"start":{"line":145,"column":8},"end":{"line":145,"column":8}}]},"7":{"line":157,"type":"if","locations":[{"start":{"line":157,"column":8},"end":{"line":157,"column":8}},{"start":{"line":157,"column":8},"end":{"line":157,"column":8}}]},"8":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":8},"end":{"line":158,"column":8}},{"start":{"line":158,"column":8},"end":{"line":158,"column":8}}]}}}, +"contracts/modules/lite/CCTCMTATBasePolicyEngine.sol":{"l":{"51":51,"72":51,"95":51,"98":51,"101":51,"104":51,"107":51,"108":51,"111":51,"121":51,"132":0,"146":233,"147":233,"148":88,"150":145,"163":35,"164":35,"165":12,"167":23,"189":1012,"190":994,"199":6},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol","s":{"1":51,"2":51,"3":51,"4":51,"5":51,"6":51,"7":51,"8":51,"9":51,"10":51,"11":0,"12":233,"13":233,"14":88,"15":145,"16":35,"17":35,"18":12,"19":23,"20":1012,"21":994,"22":6},"b":{"1":[51,2],"2":[51,0],"3":[51,0],"4":[51,0],"5":[0,0],"6":[88,145],"7":[12,23],"8":[0,0],"9":[99,6],"10":[37,3],"11":[78,9],"12":[918,76],"13":[3,0]},"f":{"1":51,"2":51,"3":51,"4":51,"5":0,"6":233,"7":35,"8":0,"9":99,"10":37,"11":78,"12":1012,"13":6},"fnMap":{"1":{"name":"initialize","line":50,"loc":{"start":{"line":43,"column":4},"end":{"line":59,"column":4}}},"2":{"name":"_initialize","line":71,"loc":{"start":{"line":64,"column":4},"end":{"line":80,"column":4}}},"3":{"name":"__CMTAT_init","line":92,"loc":{"start":{"line":85,"column":4},"end":{"line":112,"column":4}}},"4":{"name":"__CMTAT_openzeppelin_init_unchained","line":119,"loc":{"start":{"line":117,"column":4},"end":{"line":122,"column":4}}},"5":{"name":"__CMTAT_modules_init_unchained","line":131,"loc":{"start":{"line":127,"column":4},"end":{"line":133,"column":4}}},"6":{"name":"canTransfer","line":141,"loc":{"start":{"line":141,"column":4},"end":{"line":152,"column":4}}},"7":{"name":"canTransferFrom","line":157,"loc":{"start":{"line":157,"column":4},"end":{"line":169,"column":4}}},"8":{"name":"_authorizeAttachPolicyEngine","line":171,"loc":{"start":{"line":171,"column":4},"end":{"line":171,"column":107}}},"9":{"name":"_authorizePause","line":177,"loc":{"start":{"line":177,"column":4},"end":{"line":177,"column":93}}},"10":{"name":"_authorizeDeactivate","line":178,"loc":{"start":{"line":178,"column":4},"end":{"line":178,"column":105}}},"11":{"name":"_authorizeFreeze","line":180,"loc":{"start":{"line":180,"column":4},"end":{"line":180,"column":102}}},"12":{"name":"_checkTransferred","line":183,"loc":{"start":{"line":183,"column":4},"end":{"line":194,"column":4}}},"13":{"name":"supportsInterface","line":196,"loc":{"start":{"line":196,"column":4},"end":{"line":202,"column":4}}}},"statementMap":{"1":{"start":{"line":51,"column":8},"end":{"line":51,"column":2292}},"2":{"start":{"line":72,"column":8},"end":{"line":72,"column":2920}},"3":{"start":{"line":95,"column":8},"end":{"line":95,"column":33}},"4":{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},"5":{"start":{"line":101,"column":8},"end":{"line":101,"column":60}},"6":{"start":{"line":104,"column":8},"end":{"line":104,"column":97}},"7":{"start":{"line":107,"column":8},"end":{"line":107,"column":61}},"8":{"start":{"line":108,"column":8},"end":{"line":108,"column":61}},"9":{"start":{"line":111,"column":8},"end":{"line":111,"column":54}},"10":{"start":{"line":121,"column":8},"end":{"line":121,"column":77}},"11":{"start":{"line":132,"column":8},"end":{"line":132,"column":97}},"12":{"start":{"line":146,"column":8},"end":{"line":146,"column":90}},"13":{"start":{"line":147,"column":8},"end":{"line":147,"column":5646}},"14":{"start":{"line":148,"column":12},"end":{"line":148,"column":24}},"15":{"start":{"line":150,"column":12},"end":{"line":150,"column":76}},"16":{"start":{"line":163,"column":8},"end":{"line":163,"column":90}},"17":{"start":{"line":164,"column":8},"end":{"line":164,"column":6165}},"18":{"start":{"line":165,"column":12},"end":{"line":165,"column":24}},"19":{"start":{"line":167,"column":12},"end":{"line":167,"column":89}},"20":{"start":{"line":189,"column":8},"end":{"line":189,"column":66}},"21":{"start":{"line":190,"column":8},"end":{"line":190,"column":7278}},"22":{"start":{"line":199,"column":8},"end":{"line":199,"column":7669}}},"branchMap":{"1":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":21},"end":{"line":50,"column":21}},{"start":{"line":50,"column":21},"end":{"line":50,"column":21}}]},"2":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":23},"end":{"line":71,"column":23}},{"start":{"line":71,"column":23},"end":{"line":71,"column":23}}]},"3":{"line":92,"type":"if","locations":[{"start":{"line":92,"column":23},"end":{"line":92,"column":23}},{"start":{"line":92,"column":23},"end":{"line":92,"column":23}}]},"4":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":23},"end":{"line":119,"column":23}},{"start":{"line":119,"column":23},"end":{"line":119,"column":23}}]},"5":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":23},"end":{"line":131,"column":23}},{"start":{"line":131,"column":23},"end":{"line":131,"column":23}}]},"6":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":8},"end":{"line":147,"column":8}},{"start":{"line":147,"column":8},"end":{"line":147,"column":8}}]},"7":{"line":164,"type":"if","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":8}},{"start":{"line":164,"column":8},"end":{"line":164,"column":8}}]},"8":{"line":171,"type":"if","locations":[{"start":{"line":171,"column":77},"end":{"line":171,"column":77}},{"start":{"line":171,"column":77},"end":{"line":171,"column":77}}]},"9":{"line":177,"type":"if","locations":[{"start":{"line":177,"column":70},"end":{"line":177,"column":70}},{"start":{"line":177,"column":70},"end":{"line":177,"column":70}}]},"10":{"line":178,"type":"if","locations":[{"start":{"line":178,"column":75},"end":{"line":178,"column":75}},{"start":{"line":178,"column":75},"end":{"line":178,"column":75}}]},"11":{"line":180,"type":"if","locations":[{"start":{"line":180,"column":77},"end":{"line":180,"column":77}},{"start":{"line":180,"column":77},"end":{"line":180,"column":77}}]},"12":{"line":190,"type":"if","locations":[{"start":{"line":190,"column":8},"end":{"line":190,"column":8}},{"start":{"line":190,"column":8},"end":{"line":190,"column":8}}]},"13":{"line":200,"type":"cond-expr","locations":[{"start":{"line":200,"column":12},"end":{"line":200,"column":64}},{"start":{"line":201,"column":12},"end":{"line":201,"column":68}}]}}}, +"contracts/modules/lite/PolicyValidationModuleERC1404.sol":{"l":{"45":9,"46":2,"48":1,"50":1,"52":1,"54":2,"56":1,"58":1,"75":6,"76":6,"77":5,"79":1,"89":3,"90":1,"92":2,"93":2,"94":1,"96":1,"113":7,"114":1,"116":1,"118":1,"120":2,"122":2},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/PolicyValidationModuleERC1404.sol","s":{"1":9,"2":2,"3":7,"4":1,"5":6,"6":1,"7":5,"8":1,"9":4,"10":2,"11":2,"12":1,"13":1,"14":6,"15":6,"16":5,"17":1,"18":3,"19":1,"20":2,"21":2,"22":1,"23":1,"24":7,"25":1,"26":6,"27":1,"28":5,"29":1,"30":4,"31":2,"32":2},"b":{"1":[2,7],"2":[1,6],"3":[1,5],"4":[1,4],"5":[2,2],"6":[1,1],"7":[5,1],"8":[1,2],"9":[1,1],"10":[1,6],"11":[1,5],"12":[1,4],"13":[2,2]},"f":{"1":9,"2":6,"3":3,"4":7},"fnMap":{"1":{"name":"messageForTransferRestriction","line":42,"loc":{"start":{"line":42,"column":4},"end":{"line":60,"column":4}}},"2":{"name":"detectTransferRestriction","line":70,"loc":{"start":{"line":70,"column":4},"end":{"line":81,"column":4}}},"3":{"name":"detectTransferRestrictionFrom","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":99,"column":4}}},"4":{"name":"_detectTransferRestriction","line":108,"loc":{"start":{"line":108,"column":4},"end":{"line":124,"column":4}}}},"statementMap":{"1":{"start":{"line":45,"column":8},"end":{"line":45,"column":1876}},"2":{"start":{"line":46,"column":12},"end":{"line":46,"column":35}},"3":{"start":{"line":47,"column":15},"end":{"line":47,"column":2007}},"4":{"start":{"line":48,"column":12},"end":{"line":48,"column":48}},"5":{"start":{"line":49,"column":15},"end":{"line":49,"column":2164}},"6":{"start":{"line":50,"column":12},"end":{"line":50,"column":53}},"7":{"start":{"line":51,"column":15},"end":{"line":51,"column":2331}},"8":{"start":{"line":52,"column":12},"end":{"line":52,"column":53}},"9":{"start":{"line":53,"column":15},"end":{"line":53,"column":2498}},"10":{"start":{"line":54,"column":12},"end":{"line":54,"column":51}},"11":{"start":{"line":55,"column":15},"end":{"line":55,"column":2661}},"12":{"start":{"line":56,"column":12},"end":{"line":56,"column":56}},"13":{"start":{"line":58,"column":12},"end":{"line":58,"column":36}},"14":{"start":{"line":75,"column":8},"end":{"line":75,"column":70}},"15":{"start":{"line":76,"column":8},"end":{"line":76,"column":3513}},"16":{"start":{"line":77,"column":12},"end":{"line":77,"column":29}},"17":{"start":{"line":79,"column":12},"end":{"line":79,"column":71}},"18":{"start":{"line":89,"column":8},"end":{"line":89,"column":3940}},"19":{"start":{"line":90,"column":12},"end":{"line":90,"column":92}},"20":{"start":{"line":92,"column":12},"end":{"line":92,"column":74}},"21":{"start":{"line":93,"column":12},"end":{"line":93,"column":4168}},"22":{"start":{"line":94,"column":16},"end":{"line":94,"column":33}},"23":{"start":{"line":96,"column":16},"end":{"line":96,"column":75}},"24":{"start":{"line":113,"column":8},"end":{"line":113,"column":4844}},"25":{"start":{"line":114,"column":12},"end":{"line":114,"column":89}},"26":{"start":{"line":115,"column":15},"end":{"line":115,"column":4971}},"27":{"start":{"line":116,"column":12},"end":{"line":116,"column":84}},"28":{"start":{"line":117,"column":15},"end":{"line":117,"column":5088}},"29":{"start":{"line":118,"column":12},"end":{"line":118,"column":89}},"30":{"start":{"line":119,"column":15},"end":{"line":119,"column":5216}},"31":{"start":{"line":120,"column":12},"end":{"line":120,"column":87}},"32":{"start":{"line":122,"column":12},"end":{"line":122,"column":71}}},"branchMap":{"1":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":8},"end":{"line":45,"column":8}},{"start":{"line":45,"column":8},"end":{"line":45,"column":8}}]},"2":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":15},"end":{"line":47,"column":15}},{"start":{"line":47,"column":15},"end":{"line":47,"column":15}}]},"3":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":15},"end":{"line":49,"column":15}},{"start":{"line":49,"column":15},"end":{"line":49,"column":15}}]},"4":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":15},"end":{"line":51,"column":15}},{"start":{"line":51,"column":15},"end":{"line":51,"column":15}}]},"5":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":15},"end":{"line":53,"column":15}},{"start":{"line":53,"column":15},"end":{"line":53,"column":15}}]},"6":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":15},"end":{"line":55,"column":15}},{"start":{"line":55,"column":15},"end":{"line":55,"column":15}}]},"7":{"line":76,"type":"if","locations":[{"start":{"line":76,"column":8},"end":{"line":76,"column":8}},{"start":{"line":76,"column":8},"end":{"line":76,"column":8}}]},"8":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":8},"end":{"line":89,"column":8}},{"start":{"line":89,"column":8},"end":{"line":89,"column":8}}]},"9":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":12},"end":{"line":93,"column":12}},{"start":{"line":93,"column":12},"end":{"line":93,"column":12}}]},"10":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":113,"column":8}},{"start":{"line":113,"column":8},"end":{"line":113,"column":8}}]},"11":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":15},"end":{"line":115,"column":15}},{"start":{"line":115,"column":15},"end":{"line":115,"column":15}}]},"12":{"line":117,"type":"if","locations":[{"start":{"line":117,"column":15},"end":{"line":117,"column":15}},{"start":{"line":117,"column":15},"end":{"line":117,"column":15}}]},"13":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":15},"end":{"line":119,"column":15}},{"start":{"line":119,"column":15},"end":{"line":119,"column":15}}]}}}, +"contracts/modules/lite/ValidationModulePolicyEngine.sol":{"l":{"25":145,"38":23,"46":145,"47":39,"49":106,"59":23,"60":12,"62":11,"72":11,"80":106,"84":118,"85":118,"86":117,"87":117,"92":111,"94":6,"97":1,"108":997,"109":928,"110":928,"111":927,"112":927,"115":920,"116":2,"119":921},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/ValidationModulePolicyEngine.sol","s":{"1":145,"2":23,"3":145,"4":39,"5":106,"6":23,"7":12,"8":11,"9":11,"10":106,"11":118,"12":118,"13":117,"14":117,"15":111,"16":6,"17":1,"18":997,"19":928,"20":928,"21":927,"22":927,"23":920,"24":2,"25":921},"b":{"1":[39,106],"2":[12,11],"3":[117,1],"4":[927,1],"5":[2,918]},"f":{"1":145,"2":23,"3":145,"4":23,"5":11,"6":106,"7":118,"8":997},"fnMap":{"1":{"name":"canTransfer","line":20,"loc":{"start":{"line":20,"column":4},"end":{"line":26,"column":4}}},"2":{"name":"canTransferFrom","line":32,"loc":{"start":{"line":32,"column":4},"end":{"line":39,"column":4}}},"3":{"name":"_canTransfer","line":45,"loc":{"start":{"line":45,"column":4},"end":{"line":51,"column":4}}},"4":{"name":"_canTransferFrom","line":53,"loc":{"start":{"line":53,"column":4},"end":{"line":64,"column":4}}},"5":{"name":"_canTransferFromWithPolicyEngine","line":66,"loc":{"start":{"line":66,"column":4},"end":{"line":73,"column":4}}},"6":{"name":"_canTransferWithPolicyEngine","line":75,"loc":{"start":{"line":75,"column":4},"end":{"line":81,"column":4}}},"7":{"name":"_tryCheckPolicies","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":99,"column":4}}},"8":{"name":"_transferred","line":102,"loc":{"start":{"line":102,"column":4},"end":{"line":120,"column":4}}}},"statementMap":{"1":{"start":{"line":25,"column":8},"end":{"line":25,"column":44}},"2":{"start":{"line":38,"column":8},"end":{"line":38,"column":57}},"3":{"start":{"line":46,"column":8},"end":{"line":46,"column":1793}},"4":{"start":{"line":47,"column":12},"end":{"line":47,"column":24}},"5":{"start":{"line":49,"column":12},"end":{"line":49,"column":64}},"6":{"start":{"line":59,"column":8},"end":{"line":59,"column":2150}},"7":{"start":{"line":60,"column":12},"end":{"line":60,"column":24}},"8":{"start":{"line":62,"column":12},"end":{"line":62,"column":77}},"9":{"start":{"line":72,"column":8},"end":{"line":72,"column":100}},"10":{"start":{"line":80,"column":8},"end":{"line":80,"column":87}},"11":{"start":{"line":84,"column":8},"end":{"line":84,"column":70}},"12":{"start":{"line":85,"column":8},"end":{"line":85,"column":3092}},"13":{"start":{"line":86,"column":12},"end":{"line":86,"column":47}},"14":{"start":{"line":87,"column":12},"end":{"line":87,"column":3201}},"15":{"start":{"line":92,"column":16},"end":{"line":92,"column":27}},"16":{"start":{"line":94,"column":16},"end":{"line":94,"column":28}},"17":{"start":{"line":97,"column":12},"end":{"line":97,"column":23}},"18":{"start":{"line":108,"column":8},"end":{"line":108,"column":62}},"19":{"start":{"line":109,"column":8},"end":{"line":109,"column":70}},"20":{"start":{"line":110,"column":8},"end":{"line":110,"column":3893}},"21":{"start":{"line":111,"column":12},"end":{"line":111,"column":47}},"22":{"start":{"line":112,"column":12},"end":{"line":112,"column":4002}},"23":{"start":{"line":115,"column":12},"end":{"line":115,"column":4167}},"24":{"start":{"line":116,"column":16},"end":{"line":116,"column":29}},"25":{"start":{"line":119,"column":8},"end":{"line":119,"column":19}}},"branchMap":{"1":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":46,"column":8}},{"start":{"line":46,"column":8},"end":{"line":46,"column":8}}]},"2":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":8},"end":{"line":59,"column":8}},{"start":{"line":59,"column":8},"end":{"line":59,"column":8}}]},"3":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":8},"end":{"line":85,"column":8}},{"start":{"line":85,"column":8},"end":{"line":85,"column":8}}]},"4":{"line":110,"type":"if","locations":[{"start":{"line":110,"column":8},"end":{"line":110,"column":8}},{"start":{"line":110,"column":8},"end":{"line":110,"column":8}}]},"5":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":12},"end":{"line":115,"column":12}},{"start":{"line":115,"column":12},"end":{"line":115,"column":12}}]}}}, +"contracts/modules/standard/CCTCommon.sol":{"l":{"57":12,"75":12,"96":12,"99":12,"102":12,"105":12,"107":12,"110":12,"113":12,"114":12,"124":12,"134":12,"142":12,"148":12,"163":48,"173":12,"184":9,"191":13,"198":10,"204":9,"217":376,"227":48,"238":0,"328":478},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/standard/CCTCommon.sol","s":{"1":12,"2":12,"3":12,"4":12,"5":12,"6":12,"7":12,"8":12,"9":12,"10":12,"11":12,"12":12,"13":12,"14":12,"15":48,"16":12,"17":9,"18":13,"19":10,"20":9,"21":376,"22":48,"23":0,"24":478},"b":{"1":[12,2],"2":[12,0],"3":[12,0],"4":[12,0],"5":[12,0],"6":[12,0],"7":[48,0],"8":[12,0],"9":[3,3],"10":[3,3],"11":[3,3],"12":[352,24],"13":[33,15],"14":[63,3],"15":[3,3],"16":[48,12],"17":[12,12],"18":[12,3],"19":[3,3],"20":[15,6],"21":[3,3],"22":[3,3]},"f":{"1":12,"2":12,"3":12,"4":12,"5":12,"6":12,"7":48,"8":12,"9":3,"10":9,"11":13,"12":10,"13":9,"14":376,"15":48,"16":0,"17":3,"18":352,"19":33,"20":63,"21":3,"22":48,"23":12,"24":12,"25":3,"26":15,"27":3,"28":3,"29":478},"fnMap":{"1":{"name":"initialize","line":56,"loc":{"start":{"line":49,"column":4},"end":{"line":65,"column":4}}},"2":{"name":"_initialize","line":74,"loc":{"start":{"line":67,"column":4},"end":{"line":83,"column":4}}},"3":{"name":"__CMTAT_init","line":95,"loc":{"start":{"line":88,"column":4},"end":{"line":115,"column":4}}},"4":{"name":"__CMTAT_openzeppelin_init_unchained","line":122,"loc":{"start":{"line":120,"column":4},"end":{"line":125,"column":4}}},"5":{"name":"__CMTAT_modules_init_unchained","line":133,"loc":{"start":{"line":130,"column":4},"end":{"line":135,"column":4}}},"6":{"name":"__CMTAT_commonModules_init_unchained","line":140,"loc":{"start":{"line":137,"column":4},"end":{"line":153,"column":4}}},"7":{"name":"transfer","line":162,"loc":{"start":{"line":159,"column":4},"end":{"line":164,"column":4}}},"8":{"name":"transferFrom","line":172,"loc":{"start":{"line":168,"column":4},"end":{"line":174,"column":4}}},"9":{"name":"_authorizeAttachPolicyEngine","line":176,"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":88}}},"10":{"name":"decimals","line":183,"loc":{"start":{"line":183,"column":4},"end":{"line":185,"column":4}}},"11":{"name":"name","line":190,"loc":{"start":{"line":190,"column":4},"end":{"line":192,"column":4}}},"12":{"name":"symbol","line":197,"loc":{"start":{"line":197,"column":4},"end":{"line":199,"column":4}}},"13":{"name":"supportsInterface","line":201,"loc":{"start":{"line":201,"column":4},"end":{"line":207,"column":4}}},"14":{"name":"_mintOverride","line":213,"loc":{"start":{"line":213,"column":4},"end":{"line":218,"column":4}}},"15":{"name":"_burnOverride","line":223,"loc":{"start":{"line":223,"column":4},"end":{"line":228,"column":4}}},"16":{"name":"_minterTransferOverride","line":233,"loc":{"start":{"line":233,"column":4},"end":{"line":239,"column":4}}},"17":{"name":"_authorizeERC20AttributeManagement","line":247,"loc":{"start":{"line":247,"column":4},"end":{"line":247,"column":104}}},"18":{"name":"_authorizeMint","line":253,"loc":{"start":{"line":253,"column":4},"end":{"line":253,"column":84}}},"19":{"name":"_authorizeBurn","line":259,"loc":{"start":{"line":259,"column":4},"end":{"line":259,"column":84}}},"20":{"name":"_authorizeDocumentManagement","line":265,"loc":{"start":{"line":265,"column":4},"end":{"line":265,"column":103}}},"21":{"name":"_authorizeExtraInfoManagement","line":271,"loc":{"start":{"line":271,"column":4},"end":{"line":271,"column":106}}},"22":{"name":"_authorizeERC20Enforcer","line":277,"loc":{"start":{"line":277,"column":4},"end":{"line":277,"column":100}}},"23":{"name":"_authorizeForcedTransfer","line":283,"loc":{"start":{"line":283,"column":4},"end":{"line":283,"column":101}}},"24":{"name":"_authorizeSnapshots","line":289,"loc":{"start":{"line":289,"column":4},"end":{"line":289,"column":94}}},"25":{"name":"_authorizeCCIPSetAdmin","line":295,"loc":{"start":{"line":295,"column":4},"end":{"line":295,"column":87}}},"26":{"name":"_checkTokenBridge","line":306,"loc":{"start":{"line":306,"column":4},"end":{"line":306,"column":107}}},"27":{"name":"_authorizeBurnFrom","line":313,"loc":{"start":{"line":313,"column":4},"end":{"line":313,"column":94}}},"28":{"name":"_authorizeSelfBurn","line":320,"loc":{"start":{"line":320,"column":4},"end":{"line":320,"column":94}}},"29":{"name":"_update","line":323,"loc":{"start":{"line":323,"column":4},"end":{"line":329,"column":4}}}},"statementMap":{"1":{"start":{"line":57,"column":8},"end":{"line":57,"column":2274}},"2":{"start":{"line":75,"column":8},"end":{"line":75,"column":2837}},"3":{"start":{"line":96,"column":8},"end":{"line":96,"column":38}},"4":{"start":{"line":99,"column":8},"end":{"line":99,"column":33}},"5":{"start":{"line":102,"column":8},"end":{"line":102,"column":32}},"6":{"start":{"line":105,"column":8},"end":{"line":105,"column":60}},"7":{"start":{"line":107,"column":8},"end":{"line":107,"column":53}},"8":{"start":{"line":110,"column":8},"end":{"line":110,"column":84}},"9":{"start":{"line":113,"column":8},"end":{"line":113,"column":61}},"10":{"start":{"line":114,"column":8},"end":{"line":114,"column":61}},"11":{"start":{"line":124,"column":8},"end":{"line":124,"column":77}},"12":{"start":{"line":134,"column":8},"end":{"line":134,"column":90}},"13":{"start":{"line":142,"column":8},"end":{"line":142,"column":5266}},"14":{"start":{"line":148,"column":8},"end":{"line":148,"column":5465}},"15":{"start":{"line":163,"column":8},"end":{"line":163,"column":50}},"16":{"start":{"line":173,"column":8},"end":{"line":173,"column":60}},"17":{"start":{"line":184,"column":8},"end":{"line":184,"column":41}},"18":{"start":{"line":191,"column":8},"end":{"line":191,"column":37}},"19":{"start":{"line":198,"column":8},"end":{"line":198,"column":39}},"20":{"start":{"line":204,"column":8},"end":{"line":204,"column":7458}},"21":{"start":{"line":217,"column":8},"end":{"line":217,"column":52}},"22":{"start":{"line":227,"column":8},"end":{"line":227,"column":52}},"23":{"start":{"line":238,"column":8},"end":{"line":238,"column":63}},"24":{"start":{"line":328,"column":8},"end":{"line":328,"column":56}}},"branchMap":{"1":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":21},"end":{"line":56,"column":21}},{"start":{"line":56,"column":21},"end":{"line":56,"column":21}}]},"2":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":23},"end":{"line":74,"column":23}},{"start":{"line":74,"column":23},"end":{"line":74,"column":23}}]},"3":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":23},"end":{"line":95,"column":23}},{"start":{"line":95,"column":23},"end":{"line":95,"column":23}}]},"4":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":23},"end":{"line":122,"column":23}},{"start":{"line":122,"column":23},"end":{"line":122,"column":23}}]},"5":{"line":133,"type":"if","locations":[{"start":{"line":133,"column":23},"end":{"line":133,"column":23}},{"start":{"line":133,"column":23},"end":{"line":133,"column":23}}]},"6":{"line":140,"type":"if","locations":[{"start":{"line":140,"column":23},"end":{"line":140,"column":23}},{"start":{"line":140,"column":23},"end":{"line":140,"column":23}}]},"7":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":65},"end":{"line":162,"column":65}},{"start":{"line":162,"column":65},"end":{"line":162,"column":65}}]},"8":{"line":172,"type":"if","locations":[{"start":{"line":172,"column":65},"end":{"line":172,"column":65}},{"start":{"line":172,"column":65},"end":{"line":172,"column":65}}]},"9":{"line":176,"type":"if","locations":[{"start":{"line":176,"column":77},"end":{"line":176,"column":77}},{"start":{"line":176,"column":77},"end":{"line":176,"column":77}}]},"10":{"line":205,"type":"cond-expr","locations":[{"start":{"line":205,"column":12},"end":{"line":205,"column":64}},{"start":{"line":206,"column":12},"end":{"line":206,"column":69}}]},"11":{"line":247,"type":"if","locations":[{"start":{"line":247,"column":93},"end":{"line":247,"column":93}},{"start":{"line":247,"column":93},"end":{"line":247,"column":93}}]},"12":{"line":253,"type":"if","locations":[{"start":{"line":253,"column":73},"end":{"line":253,"column":73}},{"start":{"line":253,"column":73},"end":{"line":253,"column":73}}]},"13":{"line":259,"type":"if","locations":[{"start":{"line":259,"column":73},"end":{"line":259,"column":73}},{"start":{"line":259,"column":73},"end":{"line":259,"column":73}}]},"14":{"line":265,"type":"if","locations":[{"start":{"line":265,"column":92},"end":{"line":265,"column":92}},{"start":{"line":265,"column":92},"end":{"line":265,"column":92}}]},"15":{"line":271,"type":"if","locations":[{"start":{"line":271,"column":95},"end":{"line":271,"column":95}},{"start":{"line":271,"column":95},"end":{"line":271,"column":95}}]},"16":{"line":277,"type":"if","locations":[{"start":{"line":277,"column":89},"end":{"line":277,"column":89}},{"start":{"line":277,"column":89},"end":{"line":277,"column":89}}]},"17":{"line":283,"type":"if","locations":[{"start":{"line":283,"column":90},"end":{"line":283,"column":90}},{"start":{"line":283,"column":90},"end":{"line":283,"column":90}}]},"18":{"line":289,"type":"if","locations":[{"start":{"line":289,"column":83},"end":{"line":289,"column":83}},{"start":{"line":289,"column":83},"end":{"line":289,"column":83}}]},"19":{"line":295,"type":"if","locations":[{"start":{"line":295,"column":76},"end":{"line":295,"column":76}},{"start":{"line":295,"column":76},"end":{"line":295,"column":76}}]},"20":{"line":306,"type":"if","locations":[{"start":{"line":306,"column":96},"end":{"line":306,"column":96}},{"start":{"line":306,"column":96},"end":{"line":306,"column":96}}]},"21":{"line":313,"type":"if","locations":[{"start":{"line":313,"column":83},"end":{"line":313,"column":83}},{"start":{"line":313,"column":83},"end":{"line":313,"column":83}}]},"22":{"line":320,"type":"if","locations":[{"start":{"line":320,"column":83},"end":{"line":320,"column":83}},{"start":{"line":320,"column":83},"end":{"line":320,"column":83}}]}}}} diff --git a/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html b/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html new file mode 100644 index 0000000..a086b16 --- /dev/null +++ b/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html @@ -0,0 +1,194 @@ + + + + Code coverage report for deployment/lite/ComplianceTokenCMTATLiteStandalone.sol + + + + + + + +
+
+

+ all files / deployment/lite/ ComplianceTokenCMTATLiteStandalone.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +47× +  +  +  +  +  +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {CCTCMTATBaseERC20CrossChain} from "../../modules/lite/CCTCMTATBaseERC20CrossChain.sol";
+import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol";
+import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol";
+import {IERC1643} from "CMTAT/interfaces/tokenization/draft-IERC1643.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATLite
+ * @author Chainlink
+ * @notice Standalone Compliance Token contract with Chainlink ACE policy validation on CMTA transfers
+ */
+contract ComplianceTokenCMTATLiteStandalone is CCTCMTATBaseERC20CrossChain {
+    /**
+     * @notice Contract version for standalone deployment
+     * @param admin address of the admin of contract (Access Control)
+     * @param ERC20Attributes_ ERC20 name, symbol and decimals
+     * @param extraInformationAttributes_ tokenId, terms, information
+     * @param policyEngine_ address of the policy engine
+     * @param snapshotEngine_ address of the snapshot engine
+     * @param documentEngine_ address of the document engine
+     */
+    constructor(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine_,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) {
+        // Initialize the contract to avoid front-running
+        initialize(
+            admin,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine_,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html b/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html new file mode 100644 index 0000000..6d90695 --- /dev/null +++ b/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html @@ -0,0 +1,149 @@ + + + + Code coverage report for deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol + + + + + + + +
+
+

+ all files / deployment/lite/ ComplianceTokenCMTATLiteUUPSUpgradeable.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 2/2 +
+
+ 100% + Functions + 2/2 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  +  +  +  +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
+import {CCTCMTATBaseERC20CrossChain} from "../../modules/lite/CCTCMTATBaseERC20CrossChain.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATLiteUUPSUpgradeable
+ * @author Chainlink
+ * @notice UUPS upgradeable lite ComplianceToken contract with Chainlink ACE policy validation on CMTA transfers
+ */
+contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC20CrossChain, UUPSUpgradeable {
+    bytes32 public constant PROXY_UPGRADE_ROLE = keccak256("PROXY_UPGRADE_ROLE");
+ 
+    /// @custom:oz-upgrades-unsafe-allow constructor
+    constructor() {
+        // Disable the possibility to initialize the implementation
+        _disableInitializers();
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    function _authorizeUpgrade(
+        address newImplementation
+    ) internal virtual override(UUPSUpgradeable) onlyRole(PROXY_UPGRADE_ROLE) {}
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html b/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html new file mode 100644 index 0000000..dd80672 --- /dev/null +++ b/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html @@ -0,0 +1,119 @@ + + + + Code coverage report for deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol + + + + + + + +
+
+

+ all files / deployment/lite/ ComplianceTokenCMTATLiteUpgradeable.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {CCTCMTATBaseERC20CrossChain} from "../../modules/lite/CCTCMTATBaseERC20CrossChain.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATLite
+ * @author Chainlink
+ * @notice Standalone upgradeable lite Compliance Token contract with Chainlink ACE policy validation on CMTA transfers
+ */
+contract ComplianceTokenCMTATLiteUpgradeable is CCTCMTATBaseERC20CrossChain {
+    /// @custom:oz-upgrades-unsafe-allow constructor
+    constructor() {
+        // Disable the possibility to initialize the implementation
+        _disableInitializers();
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/deployment/lite/index.html b/doc/coverage/coverage/deployment/lite/index.html new file mode 100644 index 0000000..7a4c60e --- /dev/null +++ b/doc/coverage/coverage/deployment/lite/index.html @@ -0,0 +1,119 @@ + + + + Code coverage report for deployment/lite/ + + + + + + + +
+
+

+ all files deployment/lite/ +

+
+
+ 100% + Statements + 3/3 +
+
+ 100% + Branches + 2/2 +
+
+ 100% + Functions + 4/4 +
+
+ 100% + Lines + 3/3 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ComplianceTokenCMTATLiteStandalone.sol
100%1/1100%0/0100%1/1100%1/1
ComplianceTokenCMTATLiteUUPSUpgradeable.sol
100%1/1100%2/2100%2/2100%1/1
ComplianceTokenCMTATLiteUpgradeable.sol
100%1/1100%0/0100%1/1100%1/1
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATStandalone.sol.html b/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATStandalone.sol.html new file mode 100644 index 0000000..d9d698e --- /dev/null +++ b/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATStandalone.sol.html @@ -0,0 +1,194 @@ + + + + Code coverage report for deployment/standard/ComplianceTokenCMTATStandalone.sol + + + + + + + +
+
+

+ all files / deployment/standard/ ComplianceTokenCMTATStandalone.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +8× +  +  +  +  +  +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {CCTCommon} from "../../modules/standard/CCTCommon.sol";
+import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol";
+import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol";
+import {IERC1643} from "CMTAT/interfaces/engine/IDocumentEngine.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATStandalone
+ * @author Chainlink
+ * @notice Standalone ComplianceToken contract with Chainlink ACE policy validation on state-changing operations
+ */
+contract ComplianceTokenCMTATStandalone is CCTCommon {
+    /**
+     * @notice Contract version for standalone deployment
+     * @param admin_ address of the admin/owner
+     * @param ERC20Attributes_ ERC20 name, symbol and decimals
+     * @param extraInformationAttributes_ tokenId, terms, information
+     * @param policyEngine_ address of the policy engine
+     * @param snapshotEngine_ address of the snapshot engine
+     * @param documentEngine_ address of the document engine
+     */
+    constructor(
+        address admin_,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine_,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) {
+        // Initialize the contract to avoid front-running
+        initialize(
+            admin_,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine_,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html b/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html new file mode 100644 index 0000000..7d0310b --- /dev/null +++ b/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html @@ -0,0 +1,137 @@ + + + + Code coverage report for deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol + + + + + + + +
+
+

+ all files / deployment/standard/ ComplianceTokenCMTATUUPSUpgradeable.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 2/2 +
+
+ 100% + Functions + 2/2 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  +  +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
+import {CCTCommon} from "../../modules/standard/CCTCommon.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATUUPSUpgradeable
+ * @author Chainlink
+ * @notice UUPS upgradeable ComplianceToken contract with Chainlink ACE policy validation on state-changing operations
+ */
+contract ComplianceTokenCMTATUUPSUpgradeable is CCTCommon, UUPSUpgradeable {
+    /// @custom:oz-upgrades-unsafe-allow constructor
+    constructor() {
+        // Disable the possibility to initialize the implementation
+        _disableInitializers();
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyOwner {}
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html b/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html new file mode 100644 index 0000000..e74e663 --- /dev/null +++ b/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html @@ -0,0 +1,119 @@ + + + + Code coverage report for deployment/standard/ComplianceTokenCMTATUpgradeable.sol + + + + + + + +
+
+

+ all files / deployment/standard/ ComplianceTokenCMTATUpgradeable.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {CCTCommon} from "../../modules/standard/CCTCommon.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATUpgradeable
+ * @author Chainlink
+ * @notice Upgradeable ComplianceToken contract with Chainlink ACE policy validation on state-changing operations
+ */
+contract ComplianceTokenCMTATUpgradeable is CCTCommon {
+    /// @custom:oz-upgrades-unsafe-allow constructor
+    constructor() {
+        // Disable the possibility to initialize the implementation
+        _disableInitializers();
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/deployment/standard/index.html b/doc/coverage/coverage/deployment/standard/index.html new file mode 100644 index 0000000..1027076 --- /dev/null +++ b/doc/coverage/coverage/deployment/standard/index.html @@ -0,0 +1,119 @@ + + + + Code coverage report for deployment/standard/ + + + + + + + +
+
+

+ all files deployment/standard/ +

+
+
+ 100% + Statements + 3/3 +
+
+ 100% + Branches + 2/2 +
+
+ 100% + Functions + 4/4 +
+
+ 100% + Lines + 3/3 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ComplianceTokenCMTATStandalone.sol
100%1/1100%0/0100%1/1100%1/1
ComplianceTokenCMTATUUPSUpgradeable.sol
100%1/1100%2/2100%2/2100%1/1
ComplianceTokenCMTATUpgradeable.sol
100%1/1100%0/0100%1/1100%1/1
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/index.html b/doc/coverage/coverage/index.html new file mode 100644 index 0000000..dca997d --- /dev/null +++ b/doc/coverage/coverage/index.html @@ -0,0 +1,184 @@ + + + + Code coverage report for All files + + + + + + + +
+
+

+ / +

+
+
+ 93.31% + Statements + 223/239 +
+
+ 83.82% + Branches + 171/204 +
+
+ 78.06% + Functions + 121/155 +
+
+ 93.58% + Lines + 248/265 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
deployment/lite/
100%3/3100%2/2100%4/4100%3/3
deployment/standard/
100%3/3100%2/2100%4/4100%3/3
modules/chainlink-ace/custom/
100%41/4180%16/20100%7/798.15%53/54
modules/chainlink-ace/mocks/
60%21/3566.67%20/3041.51%22/5367.44%29/43
modules/chainlink-ace/modified/
100%27/2786.36%19/22100%13/13100%40/40
modules/demo/
100%0/0100%0/0100%0/0100%0/0
modules/lite/
99.06%105/10689.29%75/8495.56%43/4598.98%97/98
modules/standard/
95.83%23/2484.09%37/4496.55%28/2995.83%23/24
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/base.css b/doc/coverage/coverage/lcov-report/base.css new file mode 100644 index 0000000..29737bc --- /dev/null +++ b/doc/coverage/coverage/lcov-report/base.css @@ -0,0 +1,213 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.medium .chart { border:1px solid #f9cd0b; } +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } +/* light gray */ +span.cline-neutral { background: #eaeaea; } + +.cbranch-no { background: yellow !important; color: #111; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html b/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html new file mode 100644 index 0000000..a086b16 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html @@ -0,0 +1,194 @@ + + + + Code coverage report for deployment/lite/ComplianceTokenCMTATLiteStandalone.sol + + + + + + + +
+
+

+ all files / deployment/lite/ ComplianceTokenCMTATLiteStandalone.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +47× +  +  +  +  +  +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {CCTCMTATBaseERC20CrossChain} from "../../modules/lite/CCTCMTATBaseERC20CrossChain.sol";
+import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol";
+import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol";
+import {IERC1643} from "CMTAT/interfaces/tokenization/draft-IERC1643.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATLite
+ * @author Chainlink
+ * @notice Standalone Compliance Token contract with Chainlink ACE policy validation on CMTA transfers
+ */
+contract ComplianceTokenCMTATLiteStandalone is CCTCMTATBaseERC20CrossChain {
+    /**
+     * @notice Contract version for standalone deployment
+     * @param admin address of the admin of contract (Access Control)
+     * @param ERC20Attributes_ ERC20 name, symbol and decimals
+     * @param extraInformationAttributes_ tokenId, terms, information
+     * @param policyEngine_ address of the policy engine
+     * @param snapshotEngine_ address of the snapshot engine
+     * @param documentEngine_ address of the document engine
+     */
+    constructor(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine_,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) {
+        // Initialize the contract to avoid front-running
+        initialize(
+            admin,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine_,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html b/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html new file mode 100644 index 0000000..6d90695 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html @@ -0,0 +1,149 @@ + + + + Code coverage report for deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol + + + + + + + +
+
+

+ all files / deployment/lite/ ComplianceTokenCMTATLiteUUPSUpgradeable.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 2/2 +
+
+ 100% + Functions + 2/2 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  +  +  +  +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
+import {CCTCMTATBaseERC20CrossChain} from "../../modules/lite/CCTCMTATBaseERC20CrossChain.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATLiteUUPSUpgradeable
+ * @author Chainlink
+ * @notice UUPS upgradeable lite ComplianceToken contract with Chainlink ACE policy validation on CMTA transfers
+ */
+contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC20CrossChain, UUPSUpgradeable {
+    bytes32 public constant PROXY_UPGRADE_ROLE = keccak256("PROXY_UPGRADE_ROLE");
+ 
+    /// @custom:oz-upgrades-unsafe-allow constructor
+    constructor() {
+        // Disable the possibility to initialize the implementation
+        _disableInitializers();
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    function _authorizeUpgrade(
+        address newImplementation
+    ) internal virtual override(UUPSUpgradeable) onlyRole(PROXY_UPGRADE_ROLE) {}
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html b/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html new file mode 100644 index 0000000..dd80672 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html @@ -0,0 +1,119 @@ + + + + Code coverage report for deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol + + + + + + + +
+
+

+ all files / deployment/lite/ ComplianceTokenCMTATLiteUpgradeable.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {CCTCMTATBaseERC20CrossChain} from "../../modules/lite/CCTCMTATBaseERC20CrossChain.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATLite
+ * @author Chainlink
+ * @notice Standalone upgradeable lite Compliance Token contract with Chainlink ACE policy validation on CMTA transfers
+ */
+contract ComplianceTokenCMTATLiteUpgradeable is CCTCMTATBaseERC20CrossChain {
+    /// @custom:oz-upgrades-unsafe-allow constructor
+    constructor() {
+        // Disable the possibility to initialize the implementation
+        _disableInitializers();
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/deployment/lite/index.html b/doc/coverage/coverage/lcov-report/deployment/lite/index.html new file mode 100644 index 0000000..7a4c60e --- /dev/null +++ b/doc/coverage/coverage/lcov-report/deployment/lite/index.html @@ -0,0 +1,119 @@ + + + + Code coverage report for deployment/lite/ + + + + + + + +
+
+

+ all files deployment/lite/ +

+
+
+ 100% + Statements + 3/3 +
+
+ 100% + Branches + 2/2 +
+
+ 100% + Functions + 4/4 +
+
+ 100% + Lines + 3/3 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ComplianceTokenCMTATLiteStandalone.sol
100%1/1100%0/0100%1/1100%1/1
ComplianceTokenCMTATLiteUUPSUpgradeable.sol
100%1/1100%2/2100%2/2100%1/1
ComplianceTokenCMTATLiteUpgradeable.sol
100%1/1100%0/0100%1/1100%1/1
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATStandalone.sol.html b/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATStandalone.sol.html new file mode 100644 index 0000000..d9d698e --- /dev/null +++ b/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATStandalone.sol.html @@ -0,0 +1,194 @@ + + + + Code coverage report for deployment/standard/ComplianceTokenCMTATStandalone.sol + + + + + + + +
+
+

+ all files / deployment/standard/ ComplianceTokenCMTATStandalone.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +8× +  +  +  +  +  +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {CCTCommon} from "../../modules/standard/CCTCommon.sol";
+import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol";
+import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol";
+import {IERC1643} from "CMTAT/interfaces/engine/IDocumentEngine.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATStandalone
+ * @author Chainlink
+ * @notice Standalone ComplianceToken contract with Chainlink ACE policy validation on state-changing operations
+ */
+contract ComplianceTokenCMTATStandalone is CCTCommon {
+    /**
+     * @notice Contract version for standalone deployment
+     * @param admin_ address of the admin/owner
+     * @param ERC20Attributes_ ERC20 name, symbol and decimals
+     * @param extraInformationAttributes_ tokenId, terms, information
+     * @param policyEngine_ address of the policy engine
+     * @param snapshotEngine_ address of the snapshot engine
+     * @param documentEngine_ address of the document engine
+     */
+    constructor(
+        address admin_,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine_,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) {
+        // Initialize the contract to avoid front-running
+        initialize(
+            admin_,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine_,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html b/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html new file mode 100644 index 0000000..7d0310b --- /dev/null +++ b/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html @@ -0,0 +1,137 @@ + + + + Code coverage report for deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol + + + + + + + +
+
+

+ all files / deployment/standard/ ComplianceTokenCMTATUUPSUpgradeable.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 2/2 +
+
+ 100% + Functions + 2/2 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  +  +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
+import {CCTCommon} from "../../modules/standard/CCTCommon.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATUUPSUpgradeable
+ * @author Chainlink
+ * @notice UUPS upgradeable ComplianceToken contract with Chainlink ACE policy validation on state-changing operations
+ */
+contract ComplianceTokenCMTATUUPSUpgradeable is CCTCommon, UUPSUpgradeable {
+    /// @custom:oz-upgrades-unsafe-allow constructor
+    constructor() {
+        // Disable the possibility to initialize the implementation
+        _disableInitializers();
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyOwner {}
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html b/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html new file mode 100644 index 0000000..e74e663 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html @@ -0,0 +1,119 @@ + + + + Code coverage report for deployment/standard/ComplianceTokenCMTATUpgradeable.sol + + + + + + + +
+
+

+ all files / deployment/standard/ ComplianceTokenCMTATUpgradeable.sol +

+
+
+ 100% + Statements + 1/1 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 1/1 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {CCTCommon} from "../../modules/standard/CCTCommon.sol";
+ 
+/**
+ * @title ComplianceTokenCMTATUpgradeable
+ * @author Chainlink
+ * @notice Upgradeable ComplianceToken contract with Chainlink ACE policy validation on state-changing operations
+ */
+contract ComplianceTokenCMTATUpgradeable is CCTCommon {
+    /// @custom:oz-upgrades-unsafe-allow constructor
+    constructor() {
+        // Disable the possibility to initialize the implementation
+        _disableInitializers();
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/deployment/standard/index.html b/doc/coverage/coverage/lcov-report/deployment/standard/index.html new file mode 100644 index 0000000..1027076 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/deployment/standard/index.html @@ -0,0 +1,119 @@ + + + + Code coverage report for deployment/standard/ + + + + + + + +
+
+

+ all files deployment/standard/ +

+
+
+ 100% + Statements + 3/3 +
+
+ 100% + Branches + 2/2 +
+
+ 100% + Functions + 4/4 +
+
+ 100% + Lines + 3/3 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ComplianceTokenCMTATStandalone.sol
100%1/1100%0/0100%1/1100%1/1
ComplianceTokenCMTATUUPSUpgradeable.sol
100%1/1100%2/2100%2/2100%1/1
ComplianceTokenCMTATUpgradeable.sol
100%1/1100%0/0100%1/1100%1/1
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/index.html b/doc/coverage/coverage/lcov-report/index.html new file mode 100644 index 0000000..dca997d --- /dev/null +++ b/doc/coverage/coverage/lcov-report/index.html @@ -0,0 +1,184 @@ + + + + Code coverage report for All files + + + + + + + +
+
+

+ / +

+
+
+ 93.31% + Statements + 223/239 +
+
+ 83.82% + Branches + 171/204 +
+
+ 78.06% + Functions + 121/155 +
+
+ 93.58% + Lines + 248/265 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
deployment/lite/
100%3/3100%2/2100%4/4100%3/3
deployment/standard/
100%3/3100%2/2100%4/4100%3/3
modules/chainlink-ace/custom/
100%41/4180%16/20100%7/798.15%53/54
modules/chainlink-ace/mocks/
60%21/3566.67%20/3041.51%22/5367.44%29/43
modules/chainlink-ace/modified/
100%27/2786.36%19/22100%13/13100%40/40
modules/demo/
100%0/0100%0/0100%0/0100%0/0
modules/lite/
99.06%105/10689.29%75/8495.56%43/4598.98%97/98
modules/standard/
95.83%23/2484.09%37/4496.55%28/2995.83%23/24
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html new file mode 100644 index 0000000..abe097e --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html @@ -0,0 +1,230 @@ + + + + Code coverage report for modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/custom/ ERC20TransferFromExtractor.sol +

+
+
+ 100% + Statements + 8/8 +
+
+ 75% + Branches + 3/4 +
+
+ 100% + Functions + 1/1 +
+
+ 94.12% + Lines + 16/17 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +34× +34× +34× +34× +  +34× +30× +30× +30× +  +4× +4× +  +  +  +  +34× +34× +34× +34× +34× +  +34× +  +  + 
// SPDX-License-Identifier: BUSL-1.1
+pragma solidity ^0.8.20;
+ 
+import {IExtractor} from "@chainlink/policy-management/interfaces/IExtractor.sol";
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+ 
+/**
+ * @title ERC20TransferFromExtractor
+ * @notice Extends the standard ERC20TransferExtractor by also extracting the
+ *         spender address, enabling policies to validate transferFrom approvals.
+ * @dev Handles:
+ *      - transfer(address to, uint256 amount):
+ *          spender = sender, from = sender, to = decoded, amount = decoded
+ *      - transferFrom(address from, address to, uint256 amount):
+ *          spender = sender, from = decoded, to = decoded, amount = decoded
+ *
+ *      Returns 4 parameters: [spender, from, to, amount]
+ */
+contract ERC20TransferFromExtractor is IExtractor {
+    string public constant override typeAndVersion = "ERC20TransferFromExtractor 1.0.0";
+ 
+    bytes32 public constant PARAM_SPENDER = keccak256("spender");
+    bytes32 public constant PARAM_FROM = keccak256("from");
+    bytes32 public constant PARAM_TO = keccak256("to");
+    bytes32 public constant PARAM_AMOUNT = keccak256("amount");
+ 
+    function extract(
+        IPolicyEngine.Payload calldata payload
+    ) external pure override returns (IPolicyEngine.Parameter[] memory) {
+        address spender;
+        address from;
+        address to;
+        uint256 amount;
+ 
+        if (payload.selector == IERC20.transfer.selector) {
+            spender = payload.sender;
+            from = payload.sender;
+            (to, amount) = abi.decode(payload.data, (address, uint256));
+        } else Eif (payload.selector == IERC20.transferFrom.selector) {
+            spender = payload.sender;
+            (from, to, amount) = abi.decode(payload.data, (address, address, uint256));
+        } else {
+            revert IPolicyEngine.UnsupportedSelector(payload.selector);
+        }
+ 
+        IPolicyEngine.Parameter[] memory result = new IPolicyEngine.Parameter[](4);
+        result[0] = IPolicyEngine.Parameter(PARAM_SPENDER, abi.encode(spender));
+        result[1] = IPolicyEngine.Parameter(PARAM_FROM, abi.encode(from));
+        result[2] = IPolicyEngine.Parameter(PARAM_TO, abi.encode(to));
+        result[3] = IPolicyEngine.Parameter(PARAM_AMOUNT, abi.encode(amount));
+ 
+        return result;
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html new file mode 100644 index 0000000..f45a1cc --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html @@ -0,0 +1,470 @@ + + + + Code coverage report for modules/chainlink-ace/custom/TransferValidationPolicy.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/custom/ TransferValidationPolicy.sol +

+
+
+ 100% + Statements + 33/33 +
+
+ 81.25% + Branches + 13/16 +
+
+ 100% + Functions + 6/6 +
+
+ 100% + Lines + 37/37 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +69× +  +  +  +  +  +  +  +  +  +  +33× +30× +30× +30× +37× +37× +  +  +  +  +  +  +  +  +  +2× +2× +2× +2× +2× +2× +  +2× +  +  +  +  +  +  +1× +  +  +  +  +  +  +1× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +35× +35× +  +35× +  +33× +33× +33× +33× +  +33× +35× +35× +13× +13× +  +  +  +  +2× +2× +2× +  +2× +2× +2× +1× +1× +  +  +  +  +21× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {Policy} from "@chainlink/policy-management/core/Policy.sol";
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+import {IRule} from "../../../../submodules/RuleEngine/src/interfaces/IRule.sol";
+ 
+/**
+ * @title TransferValidationPolicy
+ * @notice A policy that validates ERC-20 transfers by running an array of IRule
+ *         contracts, mimicking CMTAT's _canTransferWithRuleEngine() behavior.
+ * @dev Works with both ERC20TransferExtractor (3 params) and
+ *      ERC20TransferFromExtractor (4 params):
+ *
+ *      3 parameters: [from, to, amount]
+ *        → uses detectTransferRestriction(from, to, amount)
+ *
+ *      4 parameters: [spender, from, to, amount]
+ *        → uses detectTransferRestrictionFrom(spender, from, to, amount)
+ *
+ *      Each IRule is checked in order. If any rule returns a non-zero code
+ *      the policy reverts with PolicyRejected containing the rule's message.
+ */
+contract TransferValidationPolicy is Policy {
+    string public constant override typeAndVersion = "TransferValidationPolicy 1.0.0";
+    event RulesUpdated(uint256 previousCount, uint256 newCount);
+ 
+    /// @custom:storage-location erc7201:cmta.TransferValidationPolicy
+    struct TransferValidationStorage {
+        IRule[] rules;
+    }
+ 
+    // keccak256(abi.encode(uint256(keccak256("cmta.TransferValidationPolicy")) - 1)) & ~bytes32(uint256(0xff))
+    bytes32 private constant STORAGE_LOCATION = 0xd90ded5881f9295c61e86b2e3b551acbb5fe06f9f79d0cec87ddc5bb60d48e00;
+ 
+    function _getStorage() private pure returns (TransferValidationStorage storage $) {
+        assembly {
+            $.slot := STORAGE_LOCATION
+        }
+    }
+ 
+    /**
+     * @inheritdoc Policy
+     * @dev Decodes an array of IRule addresses to set as initial rules.
+     *      Pass empty bytes if no initial rules are needed.
+     */
+    function configure(bytes calldata parameters) internal override EonlyInitializing {
+        if (parameters.length > 0) {
+            address[] memory ruleAddrs = abi.decode(parameters, (address[]));
+            TransferValidationStorage storage $ = _getStorage();
+            for (uint256 i = 0; i < ruleAddrs.length; ++i) {
+                Erequire(ruleAddrs[i] != address(0), "Rule address cannot be zero");
+                $.rules.push(IRule(ruleAddrs[i]));
+            }
+        }
+    }
+ 
+    /**
+     * @notice Replaces all rules with a new set.
+     * @param rules_ The new array of IRule contracts.
+     */
+    function setRules(IRule[] calldata rules_) external onlyOwner {
+        TransferValidationStorage storage $ = _getStorage();
+        uint256 previousCount = $.rules.length;
+        delete $.rules;
+        for (uint256 i = 0; i < rules_.length; ++i) {
+            Erequire(address(rules_[i]) != address(0), "Rule address cannot be zero");
+            $.rules.push(rules_[i]);
+        }
+        emit RulesUpdated(previousCount, rules_.length);
+    }
+ 
+    /**
+     * @notice Returns the current rules.
+     */
+    function rules() external view returns (IRule[] memory) {
+        return _getStorage().rules;
+    }
+ 
+    /**
+     * @notice Returns the number of rules.
+     */
+    function rulesCount() external view returns (uint256) {
+        return _getStorage().rules.length;
+    }
+ 
+    /**
+     * @inheritdoc Policy
+     * @dev Supports both 3-param (transfer) and 4-param (transferFrom) layouts.
+     *      With 4 parameters, uses detectTransferRestrictionFrom to also validate
+     *      the spender.
+     */
+    function run(
+        address /* caller */,
+        address /* subject */,
+        bytes4 /* selector */,
+        bytes[] calldata parameters,
+        bytes calldata /* context */
+    ) public view override returns (IPolicyEngine.PolicyResult) {
+        TransferValidationStorage storage $ = _getStorage();
+        uint256 len = $.rules.length;
+ 
+        if (parameters.length >= 4) {
+            // ERC20TransferFromExtractor layout: [spender, from, to, amount]
+            address spender = abi.decode(parameters[0], (address));
+            address from = abi.decode(parameters[1], (address));
+            address to = abi.decode(parameters[2], (address));
+            uint256 amount = abi.decode(parameters[3], (uint256));
+ 
+            for (uint256 i = 0; i < len; ++i) {
+                uint8 code = $.rules[i].detectTransferRestrictionFrom(spender, from, to, amount);
+                if (code != 0) {
+                    string memory message = $.rules[i].messageForTransferRestriction(code);
+                    revert IPolicyEngine.PolicyRejected(message);
+                }
+            }
+        } else {
+            // ERC20TransferExtractor layout: [from, to, amount]
+            address from = abi.decode(parameters[0], (address));
+            address to = abi.decode(parameters[1], (address));
+            uint256 amount = abi.decode(parameters[2], (uint256));
+ 
+            for (uint256 i = 0; i < len; ++i) {
+                uint8 code = $.rules[i].detectTransferRestriction(from, to, amount);
+                if (code != 0) {
+                    string memory message = $.rules[i].messageForTransferRestriction(code);
+                    revert IPolicyEngine.PolicyRejected(message);
+                }
+            }
+        }
+ 
+        return IPolicyEngine.PolicyResult.Continue;
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/index.html b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/index.html new file mode 100644 index 0000000..6426d9f --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/index.html @@ -0,0 +1,106 @@ + + + + Code coverage report for modules/chainlink-ace/custom/ + + + + + + + +
+
+

+ all files modules/chainlink-ace/custom/ +

+
+
+ 100% + Statements + 41/41 +
+
+ 80% + Branches + 16/20 +
+
+ 100% + Functions + 7/7 +
+
+ 98.15% + Lines + 53/54 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ERC20TransferFromExtractor.sol
100%8/875%3/4100%1/194.12%16/17
TransferValidationPolicy.sol
100%33/3381.25%13/16100%6/6100%37/37
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html new file mode 100644 index 0000000..c9afb4c --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html @@ -0,0 +1,449 @@ + + + + Code coverage report for modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/mocks/ PolicyProtectedUpgradeableMocks.sol +

+
+
+ 54.55% + Statements + 6/11 +
+
+ 66.67% + Branches + 8/12 +
+
+ 38.71% + Functions + 12/31 +
+
+ 72.22% + Lines + 13/18 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  +  +  +  +  +  +8× +  +  +  +1× +1× +1× +  +  +  +  +5× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +7× +  +  +  +  +  +1× +  +  +  +1× +  +  +  +1× +  +  +  +  +  +1× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  +  +  +  +  +  +  +3× +  +  + 
// SPDX-License-Identifier: BUSL-1.1
+pragma solidity ^0.8.20;
+ 
+import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+import {PolicyProtectedUpgradeable} from "../modified/PolicyProtectedUpgradeable.sol";
+import {ValidationModulePolicyEngine} from "../../lite/ValidationModulePolicyEngine.sol";
+ 
+contract MockPolicyEngine is IPolicyEngine {
+    Payload public lastPayload;
+    uint256 public attachCalls;
+    uint256 public detachCalls;
+    bool public detachShouldRevert;
+ 
+    function setDetachShouldRevert(bool value) external {
+        detachShouldRevert = value;
+    }
+ 
+    function typeAndVersion() external pure override returns (string memory) {
+        return "MockPolicyEngine 1.0.0";
+    }
+ 
+    function attach() external override {
+        attachCalls++;
+    }
+ 
+    function detach() external override {
+        detachCalls++;
+        Eif (detachShouldRevert) {
+            revert("MockPolicyEngine: detach failed");
+        }
+    }
+ 
+    function run(Payload calldata payload) external override {
+        lastPayload = payload;
+    }
+ 
+    function check(Payload calldata) external pure override {}
+ 
+    function setExtractor(bytes4, address) external pure override {}
+ 
+    function setExtractors(bytes4[] calldata, address) external pure override {}
+ 
+    function getExtractor(bytes4) external pure override returns (address) {
+        return address(0);
+    }
+ 
+    function setPolicyMapper(address, address) external pure override {}
+ 
+    function getPolicyMapper(address) external pure override returns (address) {
+        return address(0);
+    }
+ 
+    function addPolicy(address, bytes4, address, bytes32[] calldata) external pure override {}
+ 
+    function addPolicyAt(address, bytes4, address, bytes32[] calldata, uint256) external pure override {}
+ 
+    function removePolicy(address, bytes4, address) external pure override {}
+ 
+    function getPolicies(address, bytes4) external pure override returns (address[] memory) {
+        return new address[](0);
+    }
+ 
+    function setPolicyConfiguration(address, uint256, bytes4, bytes calldata) external pure override {}
+ 
+    function getPolicyConfigVersion(address) external pure override returns (uint256) {
+        return 0;
+    }
+ 
+    function setDefaultPolicyAllow(bool) external pure override {}
+ 
+    function setTargetDefaultPolicyAllow(address, bool) external pure override {}
+}
+ 
+contract PolicyProtectedUpgradeableHarness is Initializable, PolicyProtectedUpgradeable {
+    uint256 public counter;
+ 
+    error ForcedRevert();
+ 
+    function initialize(address policyEngine) external Einitializer {
+        __PolicyProtected_init(policyEngine);
+    }
+ 
+    function _authorizeAttachPolicyEngine(address) internal pure override {}
+ 
+    function guardedRun() external runPolicy {
+        counter += 1;
+    }
+ 
+    function guardedRunWithContext(bytes calldata context) external runPolicyWithContext(context) {
+        counter += 1;
+    }
+ 
+    function guardedRunAndRevert() external ErunPolicy {
+        revert ForcedRevert();
+    }
+}
+ 
+contract ValidationModulePolicyEngineHarness is Initializable, ValidationModulePolicyEngine {
+    function initializeWithPolicyEngine(address policyEngine) external Einitializer {
+        __PolicyProtected_init(policyEngine);
+    }
+ 
+    function _authorizeAttachPolicyEngine(address) internal pure override {}
+ 
+    function _authorizePause() internal pure override {}
+ 
+    function _authorizeDeactivate() internal pure override {}
+ 
+    function _authorizeFreeze() internal pure override {}
+ 
+    function exposedTryCheckPolicies(
+        bytes4 selector,
+        address sender,
+        bytes calldata data
+    ) external view returns (bool) {
+        return _tryCheckPolicies(selector, sender, data);
+    }
+ 
+    function exposedTransferred(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) external returns (bool) {
+        return _transferred(spender, from, to, value);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html new file mode 100644 index 0000000..f6eef52 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html @@ -0,0 +1,536 @@ + + + + Code coverage report for modules/chainlink-ace/mocks/TransferRuleMocks.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/mocks/ TransferRuleMocks.sol +

+
+
+ 62.5% + Statements + 15/24 +
+
+ 66.67% + Branches + 12/18 +
+
+ 45.45% + Functions + 10/22 +
+
+ 64% + Lines + 16/25 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +26× +  +  +  +  +  +  +  +25× +  +  +  +  +  +  +  +  +23× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +8× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +3× +3× +  +  +  +14× +14× +12× +  +  +  +  +3× +  +  +  +  +  +  +  +12× +10× +6× +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6× +4× +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {IRule} from "../../../../submodules/RuleEngine/src/interfaces/IRule.sol";
+ 
+/**
+ * @dev WARNING: Mock rule contracts for tests/examples only.
+ *      Not designed, reviewed, or hardened for production deployments.
+ */
+ 
+/**
+ * @title MaxAmountRule
+ * @notice Rejects transfers where the amount exceeds a configurable maximum.
+ */
+contract MaxAmountRule is IRule {
+    uint256 public immutable maxAmount;
+    uint8 constant AMOUNT_TOO_HIGH = 13;
+ 
+    constructor(uint256 maxAmount_) {
+        maxAmount = maxAmount_;
+    }
+ 
+    function detectTransferRestriction(
+        address /* from */,
+        address /* to */,
+        uint256 amount
+    ) public view override returns (uint8) {
+        return amount > maxAmount ? AMOUNT_TOO_HIGH : uint8(REJECTED_CODE_BASE.TRANSFER_OK);
+    }
+ 
+    function detectTransferRestrictionFrom(
+        address /* spender */,
+        address from,
+        address to,
+        uint256 amount
+    ) public view override returns (uint8) {
+        return detectTransferRestriction(from, to, amount);
+    }
+ 
+    function canTransfer(address from, address to, uint256 amount) public view override returns (bool) {
+        return detectTransferRestriction(from, to, amount) == 0;
+    }
+ 
+    function canTransferFrom(
+        address /* spender */,
+        address from,
+        address to,
+        uint256 amount
+    ) external view override returns (bool) {
+        return canTransfer(from, to, amount);
+    }
+ 
+    function transferred(address /* from */, address /* to */, uint256 /* value */) external pure override {}
+ 
+    function transferred(
+        address /* spender */,
+        address /* from */,
+        address /* to */,
+        uint256 /* value */
+    ) external pure override {}
+ 
+    function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
+        return interfaceId == type(IRule).interfaceId;
+    }
+ 
+    function canReturnTransferRestrictionCode(uint8 code) public pure override returns (bool) {
+        return code == AMOUNT_TOO_HIGH;
+    }
+ 
+    function messageForTransferRestriction(uint8 code) external pure override returns (string memory) {
+        return code == AMOUNT_TOO_HIGH ? "Amount exceeds maximum" : E"Unknown code";
+    }
+}
+ 
+/**
+ * @title RestrictedAddressRule
+ * @notice Rejects transfers involving addresses on a restricted list.
+ */
+contract RestrictedAddressRule is IRule {
+    uint8 constant FROM_RESTRICTED = 14;
+    uint8 constant TO_RESTRICTED = 15;
+ 
+    mapping(address => bool) public restricted;
+    address public immutable owner;
+ 
+    modifier onlyOwner() {
+        Erequire(msg.sender == owner, "only owner");
+        _;
+    }
+ 
+    constructor(address[] memory restricted_) {
+        owner = msg.sender;
+        for (uint256 i = 0; i < restricted_.length; ++i) {
+            restricted[restricted_[i]] = true;
+        }
+    }
+ 
+    function setRestricted(address account, bool status) external EonlyOwner {
+        restricted[account] = status;
+    }
+ 
+    function detectTransferRestriction(
+        address from,
+        address to,
+        uint256 /* amount */
+    ) public view override returns (uint8) {
+        if (restricted[from]) return FROM_RESTRICTED;
+        if (restricted[to]) return TO_RESTRICTED;
+        return uint8(REJECTED_CODE_BASE.TRANSFER_OK);
+    }
+ 
+    function detectTransferRestrictionFrom(
+        address /* spender */,
+        address from,
+        address to,
+        uint256 amount
+    ) public view override returns (uint8) {
+        return detectTransferRestriction(from, to, amount);
+    }
+ 
+    function canTransfer(address from, address to, uint256 amount) public view override returns (bool) {
+        return detectTransferRestriction(from, to, amount) == 0;
+    }
+ 
+    function canTransferFrom(
+        address /* spender */,
+        address from,
+        address to,
+        uint256 amount
+    ) external view override returns (bool) {
+        return canTransfer(from, to, amount);
+    }
+ 
+    function transferred(address /* from */, address /* to */, uint256 /* value */) external pure override {}
+ 
+    function transferred(
+        address /* spender */,
+        address /* from */,
+        address /* to */,
+        uint256 /* value */
+    ) external pure override {}
+ 
+    function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
+        return interfaceId == type(IRule).interfaceId;
+    }
+ 
+    function canReturnTransferRestrictionCode(uint8 code) public pure override returns (bool) {
+        return code == FROM_RESTRICTED || code == TO_RESTRICTED;
+    }
+ 
+    function messageForTransferRestriction(uint8 code) external pure override returns (string memory) {
+        if (code == FROM_RESTRICTED) return "Sender is restricted";
+        Eif (code == TO_RESTRICTED) return "Recipient is restricted";
+        return "Unknown code";
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/index.html b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/index.html new file mode 100644 index 0000000..ca94830 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/index.html @@ -0,0 +1,106 @@ + + + + Code coverage report for modules/chainlink-ace/mocks/ + + + + + + + +
+
+

+ all files modules/chainlink-ace/mocks/ +

+
+
+ 60% + Statements + 21/35 +
+
+ 66.67% + Branches + 20/30 +
+
+ 41.51% + Functions + 22/53 +
+
+ 67.44% + Lines + 29/43 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
PolicyProtectedUpgradeableMocks.sol
54.55%6/1166.67%8/1238.71%12/3172.22%13/18
TransferRuleMocks.sol
62.5%15/2466.67%12/1845.45%10/2264%16/25
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/MintBurnExtractor.sol.html b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/MintBurnExtractor.sol.html new file mode 100644 index 0000000..afcabb0 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/MintBurnExtractor.sol.html @@ -0,0 +1,218 @@ + + + + Code coverage report for modules/chainlink-ace/modified/MintBurnExtractor.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/modified/ MintBurnExtractor.sol +

+
+
+ 100% + Statements + 6/6 +
+
+ 100% + Branches + 6/6 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 11/11 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4× +4× +  +4× +2× +  +1× +1× +  +1× +  +  +3× +3× +3× +3× +  +  + 
// SPDX-License-Identifier: BUSL-1.1
+pragma solidity ^0.8.20;
+ 
+import {IExtractor} from "@chainlink/policy-management/interfaces/IExtractor.sol";
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+ 
+/**
+ * @title MintBurnExtractor
+ * @notice Extracts parameters from CMTAT mint and burn function calls.
+ * @dev Mirrors ComplianceTokenMintBurnExtractor from @chainlink/ace but avoids
+ *      the cross-package relative import of ComplianceTokenERC20 which is
+ *      incompatible with Hardhat's module resolution. Selectors are inlined.
+ *      Handles:
+ *        - mint(address account, uint256 amount)       → 0x40c10f19
+ *        - burnFrom(address account, uint256 amount)   → 0x79cc6790
+ *        - burn(uint256 amount)                        → 0x42966c68
+ */
+contract MintBurnExtractor is IExtractor {
+    string public constant override typeAndVersion = "MintBurnExtractor 1.0.0";
+ 
+    bytes32 public constant PARAM_ACCOUNT = keccak256("account");
+    bytes32 public constant PARAM_AMOUNT = keccak256("amount");
+ 
+    // mint(address,uint256)
+    bytes4 private constant MINT_SELECTOR = bytes4(keccak256("mint(address,uint256)"));
+    // burnFrom(address,uint256)
+    bytes4 private constant BURN_FROM_SELECTOR = bytes4(keccak256("burnFrom(address,uint256)"));
+    // burn(uint256)
+    bytes4 private constant BURN_SELECTOR = bytes4(keccak256("burn(uint256)"));
+ 
+    function extract(
+        IPolicyEngine.Payload calldata payload
+    ) external pure override returns (IPolicyEngine.Parameter[] memory) {
+        address account;
+        uint256 amount;
+ 
+        if (payload.selector == MINT_SELECTOR || payload.selector == BURN_FROM_SELECTOR) {
+            (account, amount) = abi.decode(payload.data, (address, uint256));
+        } else if (payload.selector == BURN_SELECTOR) {
+            account = payload.sender;
+            (amount) = abi.decode(payload.data, (uint256));
+        } else {
+            revert IPolicyEngine.UnsupportedSelector(payload.selector);
+        }
+ 
+        IPolicyEngine.Parameter[] memory result = new IPolicyEngine.Parameter[](2);
+        result[0] = IPolicyEngine.Parameter(PARAM_ACCOUNT, abi.encode(account));
+        result[1] = IPolicyEngine.Parameter(PARAM_AMOUNT, abi.encode(amount));
+        return result;
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html new file mode 100644 index 0000000..39f703a --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html @@ -0,0 +1,452 @@ + + + + Code coverage report for modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/modified/ PolicyProtectedUpgradeable.sol +

+
+
+ 100% + Statements + 21/21 +
+
+ 81.25% + Branches + 13/16 +
+
+ 100% + Functions + 12/12 +
+
+ 100% + Lines + 29/29 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4374× +  +  +  +  +  +8× +8× +  +  +  +71× +  +  +  +  +  +  +  +  +703× +1× +  +702× +702× +  +  +612× +593× +1× +  +  +  +  +  +  +  +  +2× +1× +  +1× +  +  +1× +  +  +  +  +  +  +7× +4× +  +  +  +75× +74× +4× +  +  +1× +  +  +74× +74× +74× +  +  +  +  +1054× +  +  +  +  +3× +  +  +  +  +1752× +  +  +  +  +4× +  +  +  +  +  +  +  +  +11× +  +  + 
// SPDX-License-Identifier: BUSL-1.1
+pragma solidity ^0.8.20;
+ 
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+import {IPolicyProtected} from "@chainlink/policy-management/interfaces/IPolicyProtected.sol";
+import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
+import {ERC165Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol";
+import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
+ 
+/**
+ * @title PolicyProtectedUpgradeable.sol
+ * @dev Modified implementation for attaching a policy engine to an upgradeable smart contract. Uses ERC-7201 storage
+ *      to not conflict with other storage slots of extending contracts. Provides modifiers to be attached to methods
+ *      of the extending contract to run the policy engine before executing the method. Access control for attaching and detaching the policy engine
+ *      is implemented in the extending contract.
+ */
+abstract contract PolicyProtectedUpgradeable is Initializable, ERC165Upgradeable, IPolicyProtected {
+    /// @custom:storage-location erc7201:chainlink.ace.PolicyProtected
+    struct PolicyProtectedStorage {
+        IPolicyEngine policyEngine;
+        mapping(address sender => bytes context) senderContext; // use transient storage eventually
+    }
+ 
+    // keccak256(abi.encode(uint256(keccak256("chainlink.ace.PolicyProtected")) - 1)) &
+    // ~bytes32(uint256(0xff))
+    // solhint-disable-next-line const-name-snakecase
+    bytes32 private constant policyProtectedStorageLocation =
+        0x5970a53874f73819f13c80052b0c1b19d6ce68b29b2ad28a7413019c8a409000;
+ 
+    function _policyProtectedStorage() private pure returns (PolicyProtectedStorage storage $) {
+        // solhint-disable-next-line no-inline-assembly
+        assembly {
+            $.slot := policyProtectedStorageLocation
+        }
+    }
+ 
+    function __PolicyProtected_init(address policyEngine) internal EonlyInitializing {
+        __ERC165_init();
+        __PolicyProtected_init_unchained(policyEngine);
+    }
+ 
+    function __PolicyProtected_init_unchained(address policyEngine) internal EonlyInitializing {
+        _attachPolicyEngine(policyEngine);
+    }
+    /**
+     * @dev Modifier to run the policy engine on the current method.
+     * @notice Context is cleared only after successful execution of the guarded function.
+     *         If the guarded function reverts, this cleanup path is not reached and previously stored context remains.
+     */
+ 
+    modifier runPolicy() {
+        if (address(_policyProtectedStorage().policyEngine) == address(0)) {
+            revert IPolicyEngine.PolicyEngineUndefined();
+        }
+        bytes memory context = getContext();
+        _policyProtectedStorage().policyEngine.run(
+            IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})
+        );
+        _;
+        if (context.length > 0) {
+            clearContext();
+        }
+    }
+ 
+    /**
+     * @dev Modifier to run the policy engine on the current method with the provided context.
+     * @param context Additional information or authorization to perform the operation.
+     */
+    modifier runPolicyWithContext(bytes calldata context) {
+        if (address(_policyProtectedStorage().policyEngine) == address(0)) {
+            revert IPolicyEngine.PolicyEngineUndefined();
+        }
+        _policyProtectedStorage().policyEngine.run(
+            IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})
+        );
+        _;
+    }
+ 
+    function _authorizeAttachPolicyEngine(address policyEngine) internal virtual;
+ 
+    /// @inheritdoc IPolicyProtected
+    function attachPolicyEngine(address policyEngine) external virtual override {
+        _authorizeAttachPolicyEngine(policyEngine);
+        _attachPolicyEngine(policyEngine);
+    }
+ 
+    function _attachPolicyEngine(address policyEngine) internal {
+        require(policyEngine != address(0), "Policy engine is zero address");
+        if (address(_policyProtectedStorage().policyEngine) != address(0)) {
+            try _policyProtectedStorage().policyEngine.detach() {
+                // Detachment succeeded
+            } catch (bytes memory reason) {
+                emit PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine), reason);
+            }
+        }
+        _policyProtectedStorage().policyEngine = IPolicyEngine(policyEngine);
+        IPolicyEngine(policyEngine).attach();
+        emit PolicyEngineAttached(policyEngine);
+    }
+ 
+    /// @inheritdoc IPolicyProtected
+    function getPolicyEngine() public view virtual override returns (address) {
+        return address(_policyProtectedStorage().policyEngine);
+    }
+ 
+    /// @inheritdoc IPolicyProtected
+    function setContext(bytes calldata context) public override {
+        _policyProtectedStorage().senderContext[msg.sender] = context;
+    }
+ 
+    /// @inheritdoc IPolicyProtected
+    function getContext() public view override returns (bytes memory) {
+        return _policyProtectedStorage().senderContext[msg.sender];
+    }
+ 
+    /// @inheritdoc IPolicyProtected
+    function clearContext() public override {
+        delete _policyProtectedStorage().senderContext[msg.sender];
+    }
+ 
+    /**
+     * @dev See {IERC165-supportsInterface}.
+     */
+    function supportsInterface(
+        bytes4 interfaceId
+    ) public view virtual override(ERC165Upgradeable, IERC165) returns (bool) {
+        return interfaceId == type(IPolicyProtected).interfaceId || super.supportsInterface(interfaceId);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/index.html b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/index.html new file mode 100644 index 0000000..f39a8f8 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/index.html @@ -0,0 +1,106 @@ + + + + Code coverage report for modules/chainlink-ace/modified/ + + + + + + + +
+
+

+ all files modules/chainlink-ace/modified/ +

+
+
+ 100% + Statements + 27/27 +
+
+ 86.36% + Branches + 19/22 +
+
+ 100% + Functions + 13/13 +
+
+ 100% + Lines + 40/40 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
MintBurnExtractor.sol
100%6/6100%6/6100%1/1100%11/11
PolicyProtectedUpgradeable.sol
100%21/2181.25%13/16100%12/12100%29/29
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/demo/DemoImports.sol.html b/doc/coverage/coverage/lcov-report/modules/demo/DemoImports.sol.html new file mode 100644 index 0000000..877b11a --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/demo/DemoImports.sol.html @@ -0,0 +1,110 @@ + + + + Code coverage report for modules/demo/DemoImports.sol + + + + + + + +
+
+

+ all files / modules/demo/ DemoImports.sol +

+
+
+ 100% + Statements + 0/0 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 0/0 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+// This import ensures Hardhat compiles MockV3Aggregator so it is available
+// as an artifact for deployment scripts.
+ 
+import {MockV3Aggregator} from "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol";
+import {PolicyEngine} from "@chainlink/policy-management/core/PolicyEngine.sol";
+import {PausePolicy} from "@chainlink/policy-management/policies/PausePolicy.sol";
+import {RoleBasedAccessControlPolicy} from "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol";
+import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMintPolicy.sol";
+import {ERC20TransferExtractor} from "@chainlink/policy-management/extractors/ERC20TransferExtractor.sol";
+import {SnapshotEngineMock} from "CMTAT/mocks/SnapshotEngineMock.sol";
+import {DocumentEngineMock} from "CMTAT/mocks/DocumentEngineMock.sol";
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/demo/index.html b/doc/coverage/coverage/lcov-report/modules/demo/index.html new file mode 100644 index 0000000..8b4a3cf --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/demo/index.html @@ -0,0 +1,93 @@ + + + + Code coverage report for modules/demo/ + + + + + + + +
+
+

+ all files modules/demo/ +

+
+
+ 100% + Statements + 0/0 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 0/0 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
DemoImports.sol
100%0/0100%0/0100%0/0100%0/0
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC1404.sol.html b/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC1404.sol.html new file mode 100644 index 0000000..7e72df8 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC1404.sol.html @@ -0,0 +1,326 @@ + + + + Code coverage report for modules/lite/CCTCMTATBaseERC1404.sol + + + + + + + +
+
+

+ all files / modules/lite/ CCTCMTATBaseERC1404.sol +

+
+
+ 100% + Statements + 12/12 +
+
+ 83.33% + Branches + 5/6 +
+
+ 100% + Functions + 5/5 +
+
+ 100% + Lines + 12/12 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +10× +  +  +  +1× +  +9× +  +  +  +  +  +  +  +  +  +  +  +233× +  +  +  +  +  +  +  +  +  +  +  +35× +  +  +  +  +  +  +  +  +  +  +8× +8× +1× +1× +1× +  +  +7× +  +  +  +  +  +6× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {CCTCMTATBasePolicyEngine} from "./CCTCMTATBasePolicyEngine.sol";
+import {PolicyValidationModuleERC1404, IERC1404, IERC1404Extend} from "./PolicyValidationModuleERC1404.sol";
+import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol";
+import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol";
+import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
+import {
+    ERC20EnforcementModule,
+    ERC20EnforcementModuleInternal
+} from "CMTAT/modules/wrapper/extensions/ERC20EnforcementModule.sol";
+ 
+abstract contract CCTCMTATBaseERC1404 is CCTCMTATBasePolicyEngine, PolicyValidationModuleERC1404 {
+    /**
+     * @dev ERC20EnforcementModule error text
+     */
+    string internal constant TEXT_TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE =
+        "AddrFrom:insufficientActiveBalance";
+    /*//////////////////////////////////////////////////////////////
+                            PUBLIC/EXTERNAL FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+ 
+    /**
+     * @inheritdoc PolicyValidationModuleERC1404
+     */
+    function messageForTransferRestriction(
+        uint8 restrictionCode
+    ) public view virtual override(PolicyValidationModuleERC1404) returns (string memory message) {
+        if (
+            restrictionCode ==
+            uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE)
+        ) {
+            return TEXT_TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE;
+        } else {
+            return PolicyValidationModuleERC1404.messageForTransferRestriction(restrictionCode);
+        }
+    }
+ 
+    /**
+     * @inheritdoc ValidationModulePolicyEngine
+     */
+    function canTransfer(
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(CCTCMTATBasePolicyEngine, ValidationModuleCore) returns (bool) {
+        return CCTCMTATBasePolicyEngine.canTransfer(from, to, value);
+    }
+ 
+    /**
+     * @inheritdoc ValidationModulePolicyEngine
+     */
+    function canTransferFrom(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(CCTCMTATBasePolicyEngine, ValidationModuleCore) returns (bool) {
+        return CCTCMTATBasePolicyEngine.canTransferFrom(spender, from, to, value);
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    function _detectTransferRestriction(
+        address from,
+        address to,
+        uint256 value
+    ) internal view virtual override(PolicyValidationModuleERC1404) returns (uint8 code) {
+        uint256 frozenTokensLocal = ERC20EnforcementModule.getFrozenTokens(from);
+        if (frozenTokensLocal > 0) {
+            uint256 activeBalance = ERC20Upgradeable.balanceOf(from) - frozenTokensLocal;
+            Eif (value > activeBalance) {
+                return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE);
+            }
+        }
+        return PolicyValidationModuleERC1404._detectTransferRestriction(from, to, value);
+    }
+ 
+    function supportsInterface(
+        bytes4 interfaceId
+    ) public view virtual override(CCTCMTATBasePolicyEngine) returns (bool) {
+        return CCTCMTATBasePolicyEngine.supportsInterface(interfaceId);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html b/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html new file mode 100644 index 0000000..8b4c61c --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html @@ -0,0 +1,572 @@ + + + + Code coverage report for modules/lite/CCTCMTATBaseERC20CrossChain.sol + + + + + + + +
+
+

+ all files / modules/lite/ CCTCMTATBaseERC20CrossChain.sol +

+
+
+ 100% + Statements + 15/15 +
+
+ 100% + Branches + 16/16 +
+
+ 100% + Functions + 15/15 +
+
+ 100% + Lines + 15/15 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +119× +  +  +  +  +  +81× +  +  +  +  +  +  +  +  +  +29× +  +  +  +  +  +  +  +  +731× +716× +  +  +  +  +  +  +  +  +  +144× +120× +  +  +  +  +  +  +  +  +  +  +27× +18× +  +  +  +  +  +  +3× +  +  +  +  +  +  +10× +  +  +  +  +  +  +10× +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +39× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +939× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {ERC20CrossChainModule} from "CMTAT/modules/wrapper/options/ERC20CrossChainModule.sol";
+import {CCIPModule} from "CMTAT/modules/wrapper/options/CCIPModule.sol";
+import {CCTCMTATBaseERC1404} from "./CCTCMTATBaseERC1404.sol";
+import {CMTATBaseCommon} from "CMTAT/modules/0_CMTATBaseCommon.sol";
+import {
+    ERC20MintModule,
+    ERC20MintModuleInternal
+} from "CMTAT/modules/wrapper/core/ERC20MintModule.sol";
+import {
+    ERC20BurnModule,
+    ERC20BurnModuleInternal
+} from "CMTAT/modules/wrapper/core/ERC20BurnModule.sol";
+import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
+import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
+ 
+abstract contract CCTCMTATBaseERC20CrossChain is ERC20CrossChainModule, CCIPModule, CCTCMTATBaseERC1404 {
+    /* ============  State Functions ============ */
+    /**
+     * @dev revert if the contract is in pause state
+     */
+    function approve(
+        address spender,
+        uint256 value
+    ) public virtual override(ERC20Upgradeable) whenNotPaused returns (bool) {
+        return ERC20Upgradeable.approve(spender, value);
+    }
+    function transfer(
+        address to,
+        uint256 value
+    ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (bool) {
+        return CMTATBaseCommon.transfer(to, value);
+    }
+    /*
+     * @inheritdoc ERC20BaseModule
+     */
+    function transferFrom(
+        address from,
+        address to,
+        uint256 value
+    ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (bool) {
+        return CMTATBaseCommon.transferFrom(from, to, value);
+    }
+    /**
+     * @dev Check if the mint is valid
+     */
+    function _mintOverride(
+        address account,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) {
+        _checkTransferred(address(0), address(0), account, value);
+        ERC20MintModuleInternal._mintOverride(account, value);
+    }
+ 
+    /**
+     * @dev Check if the burn is valid
+     */
+    function _burnOverride(
+        address account,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20BurnModuleInternal) {
+        _checkTransferred(address(0), account, address(0), value);
+        ERC20BurnModuleInternal._burnOverride(account, value);
+    }
+ 
+    /**
+     * @dev Check if a minter transfer is valid
+     */
+    function _minterTransferOverride(
+        address from,
+        address to,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) {
+        _checkTransferred(address(0), from, to, value);
+        ERC20MintModuleInternal._minterTransferOverride(from, to, value);
+    }
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function decimals() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (uint8) {
+        return CMTATBaseCommon.decimals();
+    }
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function name() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) {
+        return CMTATBaseCommon.name();
+    }
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function symbol() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) {
+        return CMTATBaseCommon.symbol();
+    }
+ 
+    /* ============ View functions ============ */
+    function supportsInterface(
+        bytes4 _interfaceId
+    ) public view virtual override(ERC20CrossChainModule, CCTCMTATBaseERC1404) returns (bool) {
+        return
+            ERC20CrossChainModule.supportsInterface(_interfaceId) ||
+            CCTCMTATBaseERC1404.supportsInterface(_interfaceId);
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /* ==== Access Control ==== */
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `DEFAULT_ADMIN_ROLE`.
+     */
+    function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) onlyRole(DEFAULT_ADMIN_ROLE) {}
+ 
+    /**
+     * @dev
+     * A cross-chain bridge could call the OpenZeppelin function `renounceRole` to lose their privileges (CROSS_CHAIN_ROLE)
+     * While it is not intended,this has no other effect than depriving the bridge of burn/mint tokens
+     * An attacker could use this to disrupt minting/burning if they can get the bridge to execute calls.
+     * However, in this case, the bridge should still be considered compromised and not used again.
+     * @custom:access-control
+     * - the caller must have the `CROSS_CHAIN_ROLE`.
+     */
+    function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) whenNotPaused {
+        AccessControlUpgradeable._checkRole(CROSS_CHAIN_ROLE, caller);
+    }
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `BURNER_FROM_ROLE`.
+     * - We don't allow token holder to burn their own tokens if they don't have this role.
+     */
+    function _authorizeBurnFrom()
+        internal
+        virtual
+        override(ERC20CrossChainModule)
+        onlyRole(BURNER_FROM_ROLE)
+        whenNotPaused
+    {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `BURNER_SELF_ROLE`.
+     * - We don't allow token holder to burn their own tokens if they don't have this role.
+     */
+    function _authorizeSelfBurn()
+        internal
+        virtual
+        override(ERC20CrossChainModule)
+        onlyRole(BURNER_SELF_ROLE)
+        whenNotPaused
+    {}
+ 
+    /* ==== ERC-20 OpenZeppelin ==== */
+    function _update(
+        address from,
+        address to,
+        uint256 amount
+    ) internal virtual override(ERC20Upgradeable, CMTATBaseCommon) {
+        return CMTATBaseCommon._update(from, to, amount);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBasePolicyEngine.sol.html b/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBasePolicyEngine.sol.html new file mode 100644 index 0000000..cf81183 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBasePolicyEngine.sol.html @@ -0,0 +1,674 @@ + + + + Code coverage report for modules/lite/CCTCMTATBasePolicyEngine.sol + + + + + + + +
+
+

+ all files / modules/lite/ CCTCMTATBasePolicyEngine.sol +

+
+
+ 95.45% + Statements + 21/22 +
+
+ 69.23% + Branches + 18/26 +
+
+ 84.62% + Functions + 11/13 +
+
+ 95.45% + Lines + 21/22 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +51× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +51× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +51× +  +  +51× +  +  +51× +  +  +51× +  +  +51× +51× +  +  +51× +  +  +  +  +  +  +  +  +  +51× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +233× +233× +88× +  +145× +  +  +  +  +  +  +  +  +  +  +  +  +35× +35× +12× +  +23× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1012× +994× +  +  +  +  +  +  +  +  +6× +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {
+    CMTATBaseCommon,
+    CMTATBaseAccessControl
+} from "CMTAT/modules/1_CMTATBaseAccessControl.sol";
+import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol";
+import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol";
+import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol";
+import {IERC1643} from "CMTAT/interfaces/tokenization/draft-IERC1643.sol";
+import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol";
+import {PauseModule} from "CMTAT/modules/wrapper/core/PauseModule.sol";
+import {EnforcementModule} from "CMTAT/modules/wrapper/core/EnforcementModule.sol";
+import {IERC7943FungibleTransferError} from "CMTAT/interfaces/tokenization/draft-IERC7943.sol";
+// Extensions
+import {
+    ERC20EnforcementModule,
+    ERC20EnforcementModuleInternal
+} from "CMTAT/modules/wrapper/extensions/ERC20EnforcementModule.sol";
+ 
+abstract contract CCTCMTATBasePolicyEngine is
+    CMTATBaseAccessControl,
+    ValidationModulePolicyEngine,
+    IERC7943FungibleTransferError
+{
+    /*//////////////////////////////////////////////////////////////
+                         INITIALIZER FUNCTION
+    //////////////////////////////////////////////////////////////*/
+    /**
+     * @notice
+     * initialize the proxy contract
+     * The calls to this function will revert if the contract was deployed without a proxy
+     * @param admin address of the admin of contract (Access Control)
+     * @param ERC20Attributes_ ERC20 name, symbol and decimals
+     * @param extraInformationAttributes_ tokenId, terms, information
+     * @param policyEngine_ address of the policy engine
+     * @dev
+     * If you override the public function initialize,
+     * call inside directly the internal function, not the public one which is protected by the initializer modifier
+     */
+    function initialize(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine_,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) public virtual initializer {
+        _initialize(
+            admin,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine_,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+ 
+    /**
+     * @dev don't call the initializer modifer
+     */
+    function _initialize(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine_,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) internal virtual EonlyInitializing {
+        __CMTAT_init(
+            admin,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine_,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+ 
+    /**
+     * @dev calls the different initialize functions from the different modules
+     */
+    function __CMTAT_init(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine_,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) internal virtual EonlyInitializing {
+        /* OpenZeppelin library */
+        // OZ init_unchained functions are called firstly due to inheritance
+        __Context_init_unchained();
+ 
+        // AccessControlUpgradeable inherits from ERC165Upgradeable
+        __ERC165_init_unchained();
+ 
+        // Openzeppelin
+        __CMTAT_openzeppelin_init_unchained(ERC20Attributes_);
+ 
+        /* Wrapper modules */
+        __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_);
+ 
+        /* Engine modules */
+        __SnapshotEngineModule_init_unchained(snapshotEngine_);
+        __DocumentEngineModule_init_unchained(documentEngine_);
+ 
+        /* Chainlink-ACE policy module */
+        __PolicyProtected_init_unchained(policyEngine_);
+    }
+ 
+    /*
+     * @dev OpenZeppelin
+     */
+    function __CMTAT_openzeppelin_init_unchained(
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_
+    ) internal virtual EonlyInitializing {
+        // Note that the Openzeppelin functions name() and symbol() are overriden in ERC20BaseModule
+        __ERC20_init_unchained(ERC20Attributes_.name, ERC20Attributes_.symbol);
+    }
+ 
+    /*
+     * @dev CMTAT wrapper modules
+     */
+    function __CMTAT_modules_init_unchained(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_
+    ) internal virtual onlyInitializing {
+        __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_);
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            PUBLIC/EXTERNAL FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /**
+     * @inheritdoc ValidationModulePolicyEngine
+     */
+    function canTransfer(
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(ValidationModulePolicyEngine) returns (bool) {
+        (bool isValid, ) = ERC20EnforcementModuleInternal._checkActiveBalance(from, value);
+        if (!isValid) {
+            return false;
+        } else {
+            return ValidationModulePolicyEngine.canTransfer(from, to, value);
+        }
+    }
+ 
+    /**
+     * @inheritdoc ValidationModulePolicyEngine
+     */
+    function canTransferFrom(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(ValidationModulePolicyEngine) returns (bool) {
+        (bool isValid, ) = ERC20EnforcementModuleInternal._checkActiveBalance(from, value);
+        if (!isValid) {
+            return false;
+        } else {
+            return ValidationModulePolicyEngine.canTransferFrom(spender, from, to, value);
+        }
+    }
+ 
+    function _authorizeAttachPolicyEngine(address) internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {}
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /* ==== Access Control ==== */
+    function _authorizePause() internal virtual override(PauseModule) onlyRole(PAUSER_ROLE) {}
+    function _authorizeDeactivate() internal virtual override(PauseModule) onlyRole(DEFAULT_ADMIN_ROLE) {}
+ 
+    function _authorizeFreeze() internal virtual override(EnforcementModule) onlyRole(ENFORCER_ROLE) {}
+ 
+    /* ==== Transfer/mint/burn restriction ==== */
+    function _checkTransferred(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon) {
+        CMTATBaseCommon._checkTransferred(spender, from, to, value);
+        require(
+            ValidationModulePolicyEngine._transferred(spender, from, to, value),
+            ERC7943CannotTransfer(from, to, value)
+        );
+    }
+ 
+    function supportsInterface(
+        bytes4 interfaceId
+    ) public view virtual override(CMTATBaseAccessControl, PolicyProtectedUpgradeable) returns (bool) {
+        return
+            CMTATBaseAccessControl.supportsInterface(interfaceId) ||
+            PolicyProtectedUpgradeable.supportsInterface(interfaceId);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/lite/PolicyValidationModuleERC1404.sol.html b/doc/coverage/coverage/lcov-report/modules/lite/PolicyValidationModuleERC1404.sol.html new file mode 100644 index 0000000..f4a71d2 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/lite/PolicyValidationModuleERC1404.sol.html @@ -0,0 +1,440 @@ + + + + Code coverage report for modules/lite/PolicyValidationModuleERC1404.sol + + + + + + + +
+
+

+ all files / modules/lite/ PolicyValidationModuleERC1404.sol +

+
+
+ 100% + Statements + 32/32 +
+
+ 100% + Branches + 26/26 +
+
+ 100% + Functions + 4/4 +
+
+ 100% + Lines + 24/24 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +9× +2× +  +1× +  +1× +  +1× +  +2× +  +1× +  +1× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6× +6× +5× +  +1× +  +  +  +  +  +  +  +  +  +3× +1× +  +2× +2× +1× +  +1× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +7× +1× +  +1× +  +1× +  +2× +  +2× +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+/* ==== Tokenization === */
+import {IERC1404, IERC1404Extend} from "CMTAT/interfaces/tokenization/draft-IERC1404.sol";
+import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol";
+ 
+/**
+ * @dev Validation module (ERC-1404)
+ *
+ * Useful to restrict and validate transfers
+ */
+abstract contract PolicyValidationModuleERC1404 is ValidationModuleCore, IERC1404Extend {
+    /* ============ State Variables ============ */
+    string constant TEXT_TRANSFER_OK = "NoRestriction";
+    string constant TEXT_UNKNOWN_CODE = "UnknownCode";
+ 
+    /* EnforcementModule */
+    string internal constant TEXT_TRANSFER_REJECTED_FROM_FROZEN = "AddrFromIsFrozen";
+ 
+    string internal constant TEXT_TRANSFER_REJECTED_TO_FROZEN = "AddrToIsFrozen";
+ 
+    string internal constant TEXT_TRANSFER_REJECTED_SPENDER_FROZEN = "AddrSpenderIsFrozen";
+ 
+    /* PauseModule */
+    string internal constant TEXT_TRANSFER_REJECTED_PAUSED = "EnforcedPause";
+ 
+    /* Contract deactivated */
+    string internal constant TEXT_TRANSFER_REJECTED_DEACTIVATED = "ContractDeactivated";
+ 
+    /*//////////////////////////////////////////////////////////////
+                            PUBLIC/EXTERNAL FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /**
+     * @notice returns the human readable explanation
+     * corresponding to the error code returned by detectTransferRestriction
+     * @param restrictionCode The error code returned by detectTransferRestriction
+     * @return message The human readable explanation corresponding to the error code returned by detectTransferRestriction
+     * @dev see {ERC-1404}
+     */
+    function messageForTransferRestriction(
+        uint8 restrictionCode
+    ) public view virtual override(IERC1404) returns (string memory message) {
+        if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) {
+            return TEXT_TRANSFER_OK;
+        } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_PAUSED)) {
+            return TEXT_TRANSFER_REJECTED_PAUSED;
+        } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_DEACTIVATED)) {
+            return TEXT_TRANSFER_REJECTED_DEACTIVATED;
+        } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_FROZEN)) {
+            return TEXT_TRANSFER_REJECTED_FROM_FROZEN;
+        } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_TO_FROZEN)) {
+            return TEXT_TRANSFER_REJECTED_TO_FROZEN;
+        } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_SPENDER_FROZEN)) {
+            return TEXT_TRANSFER_REJECTED_SPENDER_FROZEN;
+        } else {
+            return TEXT_UNKNOWN_CODE;
+        }
+    }
+ 
+    /**
+     * @notice check if value token can be transferred from `from` to `to`
+     * @param from address The address which you want to send tokens from
+     * @param to address The address which you want to transfer to
+     * @param value uint256 the amount of tokens to be transferred
+     * @return code of the rejection reason
+     * @dev see {ERC-1404}
+     */
+    function detectTransferRestriction(
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(IERC1404) returns (uint8 code) {
+        uint8 codeReturn = _detectTransferRestriction(from, to, value);
+        if (codeReturn != uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) {
+            return codeReturn;
+        } else {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK);
+        }
+    }
+ 
+    function detectTransferRestrictionFrom(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(IERC1404Extend) returns (uint8 code) {
+        if (isFrozen(spender)) {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_SPENDER_FROZEN);
+        } else {
+            uint8 codeReturn = _detectTransferRestriction(from, to, value);
+            if (codeReturn != uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) {
+                return codeReturn;
+            } else {
+                return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK);
+            }
+        }
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+ 
+    /**
+     * @dev override this function to add further restriction
+     */
+    function _detectTransferRestriction(
+        address from,
+        address to,
+        uint256 /* value */
+    ) internal view virtual returns (uint8 code) {
+        if (deactivated()) {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_DEACTIVATED);
+        } else if (paused()) {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_PAUSED);
+        } else if (isFrozen(from)) {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_FROZEN);
+        } else if (isFrozen(to)) {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_TO_FROZEN);
+        } else {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK);
+        }
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/lite/ValidationModulePolicyEngine.sol.html b/doc/coverage/coverage/lcov-report/modules/lite/ValidationModulePolicyEngine.sol.html new file mode 100644 index 0000000..946b9d3 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/lite/ValidationModulePolicyEngine.sol.html @@ -0,0 +1,428 @@ + + + + Code coverage report for modules/lite/ValidationModulePolicyEngine.sol + + + + + + + +
+
+

+ all files / modules/lite/ ValidationModulePolicyEngine.sol +

+
+
+ 100% + Statements + 25/25 +
+
+ 100% + Branches + 10/10 +
+
+ 100% + Functions + 8/8 +
+
+ 100% + Lines + 25/25 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +145× +  +  +  +  +  +  +  +  +  +  +  +  +23× +  +  +  +  +  +  +  +145× +39× +  +106× +  +  +  +  +  +  +  +  +  +23× +12× +  +11× +  +  +  +  +  +  +  +  +  +11× +  +  +  +  +  +  +  +106× +  +  +  +118× +118× +117× +117× +  +  +  +  +111× +  +6× +  +  +1× +  +  +  +  +  +  +  +  +  +  +997× +928× +928× +927× +927× +  +  +920× +2× +  +  +921× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol";
+import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol";
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+ 
+abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedUpgradeable {
+    /*//////////////////////////////////////////////////////////////
+                            PUBLIC/EXTERNAL FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+ 
+    /* ============ View functions ============ */
+    /**
+     * @inheritdoc ValidationModuleCore
+     * @dev call the ruleEngine if set
+     */
+    function canTransfer(
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(ValidationModuleCore) returns (bool) {
+        return _canTransfer(from, to, value);
+    }
+ 
+    /**
+     * @inheritdoc ValidationModuleCore
+     * @dev call the ruleEngine if set
+     */
+    function canTransferFrom(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(ValidationModuleCore) returns (bool) {
+        return _canTransferFrom(spender, from, to, value);
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /* ============ View functions ============ */
+    function _canTransfer(address from, address to, uint256 value) internal view virtual returns (bool) {
+        if (!ValidationModuleCore.canTransfer(from, to, value)) {
+            return false;
+        } else {
+            return _canTransferWithPolicyEngine(from, to, value);
+        }
+    }
+ 
+    function _canTransferFrom(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) internal view virtual returns (bool) {
+        if (!ValidationModuleCore.canTransferFrom(spender, from, to, value)) {
+            return false;
+        } else {
+            return _canTransferFromWithPolicyEngine(spender, from, to, value);
+        }
+    }
+ 
+    function _canTransferFromWithPolicyEngine(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) internal view virtual returns (bool) {
+        return _tryCheckPolicies(IERC20.transferFrom.selector, spender, abi.encode(from, to, value));
+    }
+ 
+    function _canTransferWithPolicyEngine(
+        address from,
+        address to,
+        uint256 value
+    ) internal view virtual returns (bool) {
+        return _tryCheckPolicies(IERC20.transfer.selector, from, abi.encode(to, value));
+    }
+ 
+    function _tryCheckPolicies(bytes4 selector, address sender, bytes memory data) internal view returns (bool) {
+        IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine());
+        if (address(policyEngine_) != address(0)) {
+            bytes memory context = getContext();
+            try
+                policyEngine_.check(
+                    IPolicyEngine.Payload({selector: selector, sender: sender, data: data, context: context})
+                )
+            {
+                return true;
+            } catch {
+                return false;
+            }
+        } else {
+            return true;
+        }
+    }
+ 
+    /* ============ State functions ============ */
+    function _transferred(
+        address spender,
+        address from,
+        address to,
+        uint256 /* value */
+    ) internal virtual returns (bool) {
+        _canTransferGenericByModuleAndRevert(spender, from, to);
+        IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine());
+        if (address(policyEngine_) != address(0)) {
+            bytes memory context = getContext();
+            policyEngine_.run(
+                IPolicyEngine.Payload({selector: msg.sig, sender: _msgSender(), data: msg.data[4:], context: context})
+            );
+            if (context.length > 0) {
+                clearContext();
+            }
+        }
+        return true;
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/lite/index.html b/doc/coverage/coverage/lcov-report/modules/lite/index.html new file mode 100644 index 0000000..b5c4260 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/lite/index.html @@ -0,0 +1,145 @@ + + + + Code coverage report for modules/lite/ + + + + + + + +
+
+

+ all files modules/lite/ +

+
+
+ 99.06% + Statements + 105/106 +
+
+ 89.29% + Branches + 75/84 +
+
+ 95.56% + Functions + 43/45 +
+
+ 98.98% + Lines + 97/98 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
CCTCMTATBaseERC1404.sol
100%12/1283.33%5/6100%5/5100%12/12
CCTCMTATBaseERC20CrossChain.sol
100%15/15100%16/16100%15/15100%15/15
CCTCMTATBasePolicyEngine.sol
95.45%21/2269.23%18/2684.62%11/1395.45%21/22
PolicyValidationModuleERC1404.sol
100%32/32100%26/26100%4/4100%24/24
ValidationModulePolicyEngine.sol
100%25/25100%10/10100%8/8100%25/25
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/standard/CCTCommon.sol.html b/doc/coverage/coverage/lcov-report/modules/standard/CCTCommon.sol.html new file mode 100644 index 0000000..cc6db7a --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/standard/CCTCommon.sol.html @@ -0,0 +1,1055 @@ + + + + Code coverage report for modules/standard/CCTCommon.sol + + + + + + + +
+
+

+ all files / modules/standard/ CCTCommon.sol +

+
+
+ 95.83% + Statements + 23/24 +
+
+ 84.09% + Branches + 37/44 +
+
+ 96.55% + Functions + 28/29 +
+
+ 95.83% + Lines + 23/24 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +12× +  +  +12× +  +  +12× +  +  +12× +  +12× +  +  +12× +  +  +12× +12× +  +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +12× +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +48× +  +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +9× +  +  +  +  +  +  +13× +  +  +  +  +  +  +10× +  +  +  +  +  +9× +  +  +  +  +  +  +  +  +  +  +  +  +376× +  +  +  +  +  +  +  +  +  +48× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +478× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+/* ==== OpenZeppelin === */
+import {IERC165} from "@openzeppelin/contracts/interfaces/IERC165.sol";
+import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
+import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
+ 
+/* ==== CMTAT === */
+import {CMTATBaseCommon} from "CMTAT/modules/0_CMTATBaseCommon.sol";
+/* = Base = */
+/* = Core = */
+import {
+    ERC20BurnModule,
+    ERC20BurnModuleInternal
+} from "CMTAT/modules/wrapper/core/ERC20BurnModule.sol";
+import {
+    ERC20MintModule,
+    ERC20MintModuleInternal
+} from "CMTAT/modules/wrapper/core/ERC20MintModule.sol";
+import {ERC20BaseModule} from "CMTAT/modules/wrapper/core/ERC20BaseModule.sol";
+/* = Option & Extension = */
+import {ERC20CrossChainModule} from "CMTAT/modules/wrapper/options/ERC20CrossChainModule.sol";
+import {CCIPModule} from "CMTAT/modules/wrapper/options/CCIPModule.sol";
+import {ExtraInformationModule} from "CMTAT/modules/wrapper/extensions/ExtraInformationModule.sol";
+import {
+    ERC20EnforcementModule,
+    ERC20EnforcementModuleInternal
+} from "CMTAT/modules/wrapper/extensions/ERC20EnforcementModule.sol";
+import {
+    DocumentEngineModule,
+    IERC1643
+} from "CMTAT/modules/wrapper/extensions/DocumentEngineModule.sol";
+import {SnapshotEngineModule} from "CMTAT/modules/wrapper/extensions/SnapshotEngineModule.sol";
+/* = Interface = */
+import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol";
+import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol";
+/* ==== Chainlink ACE === */
+import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol";
+ 
+abstract contract CCTCommon is
+    OwnableUpgradeable,
+    ERC20CrossChainModule,
+    PolicyProtectedUpgradeable,
+    CMTATBaseCommon,
+    CCIPModule
+{
+    function initialize(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) public virtual initializer {
+        _initialize(
+            admin,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+ 
+    function _initialize(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) internal virtual EonlyInitializing {
+        __CMTAT_init(
+            admin,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+ 
+    /**
+     * @dev calls the different initialize functions from the different modules
+     */
+    function __CMTAT_init(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationAttributes_,
+        address policyEngine,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) internal virtual EonlyInitializing {
+        __Ownable_init_unchained(admin);
+        /* OpenZeppelin library */
+        // OZ init_unchained functions are called firstly due to inheritance
+        __Context_init_unchained();
+ 
+        // AccessControlUpgradeable inherits from ERC165Upgradeable
+        __ERC165_init_unchained();
+ 
+        // Openzeppelin
+        __CMTAT_openzeppelin_init_unchained(ERC20Attributes_);
+ 
+        __PolicyProtected_init_unchained(policyEngine);
+ 
+        /* Wrapper modules */
+        __CMTAT_modules_init_unchained(ERC20Attributes_, ExtraInformationAttributes_);
+ 
+        /* Engine modules */
+        __SnapshotEngineModule_init_unchained(snapshotEngine_);
+        __DocumentEngineModule_init_unchained(documentEngine_);
+    }
+ 
+    /*
+     * @dev OpenZeppelin
+     */
+    function __CMTAT_openzeppelin_init_unchained(
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_
+    ) internal virtual EonlyInitializing {
+        // Note that the Openzeppelin functions name() and symbol() are overriden in ERC20BaseModule
+        __ERC20_init_unchained(ERC20Attributes_.name, ERC20Attributes_.symbol);
+    }
+ 
+    /*
+     * @dev CMTAT wrapper modules
+     */
+    function __CMTAT_modules_init_unchained(
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_
+    ) internal virtual EonlyInitializing {
+        __CMTAT_commonModules_init_unchained(ERC20Attributes_, extraInformationAttributes_);
+    }
+ 
+    function __CMTAT_commonModules_init_unchained(
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationModuleAttributes_
+    ) internal virtual EonlyInitializing {
+        // Core
+        __ERC20BaseModule_init_unchained(
+            ERC20Attributes_.decimalsIrrevocable,
+            ERC20Attributes_.name,
+            ERC20Attributes_.symbol
+        );
+        /* Extensions */
+        __ExtraInformationModule_init_unchained(
+            ExtraInformationModuleAttributes_.tokenId,
+            ExtraInformationModuleAttributes_.terms,
+            ExtraInformationModuleAttributes_.information
+        );
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                        PUBLIC/EXTERNAL FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /* ============  State Functions ============ */
+    function transfer(
+        address to,
+        uint256 value
+    ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) ErunPolicy returns (bool) {
+        return CMTATBaseCommon.transfer(to, value);
+    }
+    /*
+     * @inheritdoc ERC20BaseModule
+     */
+    function transferFrom(
+        address from,
+        address to,
+        uint256 value
+    ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) ErunPolicy returns (bool) {
+        return CMTATBaseCommon.transferFrom(from, to, value);
+    }
+ 
+    function _authorizeAttachPolicyEngine(address) internal virtual override onlyOwner {}
+ 
+    /* ============ View functions ============ */
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function decimals() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (uint8) {
+        return CMTATBaseCommon.decimals();
+    }
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function name() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) {
+        return CMTATBaseCommon.name();
+    }
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function symbol() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) {
+        return CMTATBaseCommon.symbol();
+    }
+ 
+    function supportsInterface(
+        bytes4 _interfaceId
+    ) public view virtual override(IERC165, ERC20CrossChainModule, PolicyProtectedUpgradeable) returns (bool) {
+        return
+            ERC20CrossChainModule.supportsInterface(_interfaceId) ||
+            PolicyProtectedUpgradeable.supportsInterface(_interfaceId);
+    }
+ 
+    /* ==== Mint and Burn Operations ==== */
+    /**
+     * @dev Check if the mint is valid
+     */
+    function _mintOverride(
+        address account,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) {
+        CMTATBaseCommon._mintOverride(account, value);
+    }
+ 
+    /**
+     * @dev Check if the burn is valid
+     */
+    function _burnOverride(
+        address account,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20BurnModuleInternal) {
+        CMTATBaseCommon._burnOverride(account, value);
+    }
+ 
+    /**
+     * @dev Check if a minter transfer is valid
+     */
+    function _minterTransferOverride(
+        address from,
+        address to,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) {
+        CMTATBaseCommon._minterTransferOverride(from, to, value);
+    }
+ 
+    /* ==== Access Control Functions ==== */
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `DEFAULT_ADMIN_ROLE`.
+     */
+    function _authorizeERC20AttributeManagement() internal virtual override(ERC20BaseModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `MINTER_ROLE`.
+     */
+    function _authorizeMint() internal virtual override(ERC20MintModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - The caller must have the `BURNER_ROLE`.
+     */
+    function _authorizeBurn() internal virtual override(ERC20BurnModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `DOCUMENT_ROLE`.
+     */
+    function _authorizeDocumentManagement() internal virtual override(DocumentEngineModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `EXTRA_INFORMATION_ROLE`.
+     */
+    function _authorizeExtraInfoManagement() internal virtual override(ExtraInformationModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `ERC20ENFORCER_ROLE`.
+     */
+    function _authorizeERC20Enforcer() internal virtual override(ERC20EnforcementModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `DEFAULT_ADMIN_ROLE`.
+     */
+    function _authorizeForcedTransfer() internal virtual override(ERC20EnforcementModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `SNAPSHOOTER_ROLE`.
+     */
+    function _authorizeSnapshots() internal virtual override(SnapshotEngineModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `DEFAULT_ADMIN_ROLE`.
+     */
+    function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) runPolicy {}
+ 
+    /**
+     * @dev
+     * A cross-chain bridge could call the OpenZeppelin function `renounceRole` to lose their privileges (CROSS_CHAIN_ROLE)
+     * While it is not intended,this has no other effect than depriving the bridge of burn/mint tokens
+     * An attacker could use this to disrupt minting/burning if they can get the bridge to execute calls.
+     * However, in this case, the bridge should still be considered compromised and not used again.
+     * @custom:access-control
+     * - the caller must have the `CROSS_CHAIN_ROLE`.
+     */
+    function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `BURNER_FROM_ROLE`.
+     * - We don't allow token holder to burn their own tokens if they don't have this role.
+     */
+    function _authorizeBurnFrom() internal virtual override(ERC20CrossChainModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `BURNER_ROLE`.
+     * - We don't allow token holder to burn their own tokens if they don't have this role.
+     */
+    function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) runPolicy {}
+ 
+    /* ==== ERC-20 OpenZeppelin ==== */
+    function _update(
+        address from,
+        address to,
+        uint256 amount
+    ) internal virtual override(ERC20Upgradeable, CMTATBaseCommon) {
+        return CMTATBaseCommon._update(from, to, amount);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/modules/standard/index.html b/doc/coverage/coverage/lcov-report/modules/standard/index.html new file mode 100644 index 0000000..d4afee4 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/modules/standard/index.html @@ -0,0 +1,93 @@ + + + + Code coverage report for modules/standard/ + + + + + + + +
+
+

+ all files modules/standard/ +

+
+
+ 95.83% + Statements + 23/24 +
+
+ 84.09% + Branches + 37/44 +
+
+ 96.55% + Functions + 28/29 +
+
+ 95.83% + Lines + 23/24 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
CCTCommon.sol
95.83%23/2484.09%37/4496.55%28/2995.83%23/24
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/lcov-report/prettify.css b/doc/coverage/coverage/lcov-report/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/doc/coverage/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/doc/coverage/coverage/lcov-report/prettify.js b/doc/coverage/coverage/lcov-report/prettify.js new file mode 100644 index 0000000..ef51e03 --- /dev/null +++ b/doc/coverage/coverage/lcov-report/prettify.js @@ -0,0 +1 @@ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/doc/coverage/coverage/lcov-report/sort-arrow-sprite.png b/doc/coverage/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..03f704a609c6fd0dbfdac63466a7d7c958b5cbf3 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function (a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function (a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function () { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i =0 ; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function () { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(cols); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/doc/coverage/coverage/lcov.info b/doc/coverage/coverage/lcov.info new file mode 100644 index 0000000..5c7c8fa --- /dev/null +++ b/doc/coverage/coverage/lcov.info @@ -0,0 +1,950 @@ +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol +FN:25,constructor +FNF:1 +FNH:1 +FNDA:47,constructor +DA:34,47 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol +FN:14,constructor +FNF:1 +FNH:1 +FNDA:1,constructor +DA:16,1 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol +FN:17,constructor +FN:27,_authorizeUpgrade +FNF:2 +FNH:2 +FNDA:1,constructor +FNDA:2,_authorizeUpgrade +DA:19,1 +LF:1 +LH:1 +BRDA:27,1,0,2 +BRDA:27,1,1,1 +BRF:2 +BRH:2 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol +FN:25,constructor +FNF:1 +FNH:1 +FNDA:8,constructor +DA:34,8 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol +FN:14,constructor +FNF:1 +FNH:1 +FNDA:1,constructor +DA:16,1 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol +FN:15,constructor +FN:23,_authorizeUpgrade +FNF:2 +FNH:2 +FNDA:1,constructor +FNDA:2,_authorizeUpgrade +DA:17,1 +LF:1 +LH:1 +BRDA:23,1,0,2 +BRDA:23,1,1,1 +BRF:2 +BRH:2 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol +FN:28,extract +FNF:1 +FNH:1 +FNDA:34,extract +DA:31,34 +DA:32,34 +DA:33,34 +DA:34,34 +DA:36,34 +DA:37,30 +DA:38,30 +DA:39,30 +DA:41,4 +DA:42,4 +DA:44,0 +DA:47,34 +DA:48,34 +DA:49,34 +DA:50,34 +DA:51,34 +DA:53,34 +LF:17 +LH:16 +BRDA:36,1,0,30 +BRDA:36,1,1,4 +BRDA:40,2,0,4 +BRDA:40,2,1,0 +BRF:4 +BRH:3 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol +FN:37,_getStorage +FN:48,configure +FN:63,setRules +FN:77,rules +FN:84,rulesCount +FN:94,run +FNF:6 +FNH:6 +FNDA:69,_getStorage +FNDA:33,configure +FNDA:2,setRules +FNDA:1,rules +FNDA:1,rulesCount +FNDA:35,run +DA:38,69 +DA:49,33 +DA:50,30 +DA:51,30 +DA:52,30 +DA:53,37 +DA:54,37 +DA:64,2 +DA:65,2 +DA:66,2 +DA:67,2 +DA:68,2 +DA:69,2 +DA:71,2 +DA:78,1 +DA:85,1 +DA:101,35 +DA:102,35 +DA:104,35 +DA:106,33 +DA:107,33 +DA:108,33 +DA:109,33 +DA:111,33 +DA:112,35 +DA:113,35 +DA:114,13 +DA:115,13 +DA:120,2 +DA:121,2 +DA:122,2 +DA:124,2 +DA:125,2 +DA:126,2 +DA:127,1 +DA:128,1 +DA:133,21 +LF:37 +LH:37 +BRDA:48,1,0,33 +BRDA:48,1,1,0 +BRDA:49,2,0,30 +BRDA:49,2,1,3 +BRDA:53,3,0,37 +BRDA:53,3,1,0 +BRDA:63,4,0,2 +BRDA:63,4,1,1 +BRDA:68,5,0,2 +BRDA:68,5,1,0 +BRDA:104,6,0,33 +BRDA:104,6,1,2 +BRDA:113,7,0,13 +BRDA:113,7,1,22 +BRDA:126,8,0,1 +BRDA:126,8,1,1 +BRF:16 +BRH:13 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol +FN:15,setDetachShouldRevert +FN:19,typeAndVersion +FN:23,attach +FN:27,detach +FN:34,run +FN:38,check +FN:40,setExtractor +FN:42,setExtractors +FN:44,getExtractor +FN:48,setPolicyMapper +FN:50,getPolicyMapper +FN:54,addPolicy +FN:56,addPolicyAt +FN:58,removePolicy +FN:60,getPolicies +FN:64,setPolicyConfiguration +FN:66,getPolicyConfigVersion +FN:70,setDefaultPolicyAllow +FN:72,setTargetDefaultPolicyAllow +FN:80,initialize +FN:84,_authorizeAttachPolicyEngine +FN:86,guardedRun +FN:90,guardedRunWithContext +FN:94,guardedRunAndRevert +FN:100,initializeWithPolicyEngine +FN:104,_authorizeAttachPolicyEngine +FN:106,_authorizePause +FN:108,_authorizeDeactivate +FN:110,_authorizeFreeze +FN:112,exposedTryCheckPolicies +FN:120,exposedTransferred +FNF:31 +FNH:12 +FNDA:1,setDetachShouldRevert +FNDA:0,typeAndVersion +FNDA:8,attach +FNDA:1,detach +FNDA:5,run +FNDA:0,check +FNDA:0,setExtractor +FNDA:0,setExtractors +FNDA:0,getExtractor +FNDA:0,setPolicyMapper +FNDA:0,getPolicyMapper +FNDA:0,addPolicy +FNDA:0,addPolicyAt +FNDA:0,removePolicy +FNDA:0,getPolicies +FNDA:0,setPolicyConfiguration +FNDA:0,getPolicyConfigVersion +FNDA:0,setDefaultPolicyAllow +FNDA:0,setTargetDefaultPolicyAllow +FNDA:7,initialize +FNDA:1,_authorizeAttachPolicyEngine +FNDA:1,guardedRun +FNDA:1,guardedRunWithContext +FNDA:1,guardedRunAndRevert +FNDA:1,initializeWithPolicyEngine +FNDA:0,_authorizeAttachPolicyEngine +FNDA:0,_authorizePause +FNDA:0,_authorizeDeactivate +FNDA:0,_authorizeFreeze +FNDA:1,exposedTryCheckPolicies +FNDA:3,exposedTransferred +DA:16,1 +DA:20,0 +DA:24,8 +DA:28,1 +DA:29,1 +DA:30,1 +DA:35,5 +DA:45,0 +DA:51,0 +DA:61,0 +DA:67,0 +DA:81,7 +DA:87,1 +DA:91,1 +DA:95,1 +DA:101,1 +DA:117,1 +DA:126,3 +LF:18 +LH:13 +BRDA:29,1,0,1 +BRDA:29,1,1,0 +BRDA:80,2,0,7 +BRDA:80,2,1,0 +BRDA:86,3,0,1 +BRDA:86,3,1,1 +BRDA:90,4,0,1 +BRDA:90,4,1,1 +BRDA:94,5,0,1 +BRDA:94,5,1,0 +BRDA:100,6,0,1 +BRDA:100,6,1,0 +BRF:12 +BRH:8 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol +FN:20,constructor +FN:24,detectTransferRestriction +FN:32,detectTransferRestrictionFrom +FN:41,canTransfer +FN:45,canTransferFrom +FN:54,transferred +FN:56,transferred +FN:63,supportsInterface +FN:67,canReturnTransferRestrictionCode +FN:71,messageForTransferRestriction +FN:87,onlyOwner +FN:92,constructor +FN:99,setRestricted +FN:103,detectTransferRestriction +FN:113,detectTransferRestrictionFrom +FN:122,canTransfer +FN:126,canTransferFrom +FN:135,transferred +FN:137,transferred +FN:144,supportsInterface +FN:148,canReturnTransferRestrictionCode +FN:152,messageForTransferRestriction +FNF:22 +FNH:10 +FNDA:26,constructor +FNDA:25,detectTransferRestriction +FNDA:23,detectTransferRestrictionFrom +FNDA:0,canTransfer +FNDA:0,canTransferFrom +FNDA:0,transferred +FNDA:0,transferred +FNDA:0,supportsInterface +FNDA:0,canReturnTransferRestrictionCode +FNDA:8,messageForTransferRestriction +FNDA:3,onlyOwner +FNDA:14,constructor +FNDA:3,setRestricted +FNDA:12,detectTransferRestriction +FNDA:12,detectTransferRestrictionFrom +FNDA:0,canTransfer +FNDA:0,canTransferFrom +FNDA:0,transferred +FNDA:0,transferred +FNDA:0,supportsInterface +FNDA:0,canReturnTransferRestrictionCode +FNDA:6,messageForTransferRestriction +DA:21,26 +DA:29,25 +DA:38,23 +DA:42,0 +DA:51,0 +DA:64,0 +DA:68,0 +DA:72,8 +DA:88,3 +DA:89,3 +DA:93,14 +DA:94,14 +DA:95,12 +DA:100,3 +DA:108,12 +DA:109,10 +DA:110,6 +DA:119,12 +DA:123,0 +DA:132,0 +DA:145,0 +DA:149,0 +DA:153,6 +DA:154,4 +DA:155,0 +LF:25 +LH:16 +BRDA:29,1,0,8 +BRDA:29,1,1,17 +BRDA:72,2,0,8 +BRDA:72,2,1,0 +BRDA:88,3,0,3 +BRDA:88,3,1,0 +BRDA:99,4,0,3 +BRDA:99,4,1,0 +BRDA:108,5,0,2 +BRDA:108,5,1,10 +BRDA:109,6,0,4 +BRDA:109,6,1,6 +BRDA:149,7,0,0 +BRDA:149,7,1,0 +BRDA:153,8,0,2 +BRDA:153,8,1,4 +BRDA:154,9,0,4 +BRDA:154,9,1,0 +BRF:18 +BRH:12 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol +FN:31,extract +FNF:1 +FNH:1 +FNDA:4,extract +DA:34,4 +DA:35,4 +DA:37,4 +DA:38,2 +DA:40,1 +DA:41,1 +DA:43,1 +DA:46,3 +DA:47,3 +DA:48,3 +DA:49,3 +LF:11 +LH:11 +BRDA:37,1,0,2 +BRDA:37,1,1,2 +BRDA:37,2,0,1 +BRDA:37,2,1,1 +BRDA:39,3,0,1 +BRDA:39,3,1,1 +BRF:6 +BRH:6 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol +FN:30,_policyProtectedStorage +FN:37,__PolicyProtected_init +FN:42,__PolicyProtected_init_unchained +FN:51,runPolicy +FN:69,runPolicyWithContext +FN:82,attachPolicyEngine +FN:87,_attachPolicyEngine +FN:102,getPolicyEngine +FN:107,setContext +FN:112,getContext +FN:117,clearContext +FN:124,supportsInterface +FNF:12 +FNH:12 +FNDA:4374,_policyProtectedStorage +FNDA:8,__PolicyProtected_init +FNDA:71,__PolicyProtected_init_unchained +FNDA:703,runPolicy +FNDA:2,runPolicyWithContext +FNDA:7,attachPolicyEngine +FNDA:75,_attachPolicyEngine +FNDA:1054,getPolicyEngine +FNDA:3,setContext +FNDA:1752,getContext +FNDA:4,clearContext +FNDA:11,supportsInterface +DA:32,4374 +DA:38,8 +DA:39,8 +DA:43,71 +DA:52,703 +DA:53,1 +DA:55,702 +DA:56,702 +DA:59,612 +DA:60,593 +DA:61,1 +DA:70,2 +DA:71,1 +DA:73,1 +DA:76,1 +DA:83,7 +DA:84,4 +DA:88,75 +DA:89,74 +DA:90,4 +DA:93,1 +DA:96,74 +DA:97,74 +DA:98,74 +DA:103,1054 +DA:108,3 +DA:113,1752 +DA:118,4 +DA:127,11 +LF:29 +LH:29 +BRDA:37,1,0,8 +BRDA:37,1,1,0 +BRDA:42,2,0,71 +BRDA:42,2,1,0 +BRDA:52,3,0,1 +BRDA:52,3,1,702 +BRDA:60,4,0,1 +BRDA:60,4,1,592 +BRDA:70,5,0,1 +BRDA:70,5,1,1 +BRDA:88,6,0,74 +BRDA:88,6,1,1 +BRDA:89,7,0,4 +BRDA:89,7,1,70 +BRDA:127,8,0,4 +BRDA:127,8,1,0 +BRF:16 +BRH:13 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/demo/DemoImports.sol +FNF:0 +FNH:0 +LF:0 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC1404.sol +FN:28,messageForTransferRestriction +FN:44,canTransfer +FN:55,canTransferFrom +FN:67,_detectTransferRestriction +FN:82,supportsInterface +FNF:5 +FNH:5 +FNDA:10,messageForTransferRestriction +FNDA:233,canTransfer +FNDA:35,canTransferFrom +FNDA:8,_detectTransferRestriction +FNDA:6,supportsInterface +DA:31,10 +DA:35,1 +DA:37,9 +DA:49,233 +DA:61,35 +DA:72,8 +DA:73,8 +DA:74,1 +DA:75,1 +DA:76,1 +DA:79,7 +DA:85,6 +LF:12 +LH:12 +BRDA:31,1,0,1 +BRDA:31,1,1,9 +BRDA:73,2,0,1 +BRDA:73,2,1,7 +BRDA:75,3,0,1 +BRDA:75,3,1,0 +BRF:6 +BRH:5 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol +FN:28,approve +FN:31,transfer +FN:40,transferFrom +FN:50,_mintOverride +FN:61,_burnOverride +FN:72,_minterTransferOverride +FN:84,decimals +FN:91,name +FN:98,symbol +FN:103,supportsInterface +FN:120,_authorizeCCIPSetAdmin +FN:131,_checkTokenBridge +FN:145,_authorizeBurnFrom +FN:158,_authorizeSelfBurn +FN:162,_update +FNF:15 +FNH:15 +FNDA:119,approve +FNDA:81,transfer +FNDA:29,transferFrom +FNDA:731,_mintOverride +FNDA:144,_burnOverride +FNDA:27,_minterTransferOverride +FNDA:3,decimals +FNDA:10,name +FNDA:10,symbol +FNDA:12,supportsInterface +FNDA:9,_authorizeCCIPSetAdmin +FNDA:39,_checkTokenBridge +FNDA:9,_authorizeBurnFrom +FNDA:12,_authorizeSelfBurn +FNDA:939,_update +DA:29,119 +DA:35,81 +DA:45,29 +DA:54,731 +DA:55,716 +DA:65,144 +DA:66,120 +DA:77,27 +DA:78,18 +DA:85,3 +DA:92,10 +DA:99,10 +DA:106,12 +DA:132,39 +DA:167,939 +LF:15 +LH:15 +BRDA:28,1,0,119 +BRDA:28,1,1,3 +BRDA:107,2,0,6 +BRDA:107,2,1,3 +BRDA:120,3,0,9 +BRDA:120,3,1,3 +BRDA:131,4,0,39 +BRDA:131,4,1,12 +BRDA:144,5,0,15 +BRDA:144,5,1,3 +BRDA:145,6,0,9 +BRDA:145,6,1,6 +BRDA:157,7,0,18 +BRDA:157,7,1,6 +BRDA:158,8,0,12 +BRDA:158,8,1,6 +BRF:16 +BRH:16 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +FN:50,initialize +FN:71,_initialize +FN:92,__CMTAT_init +FN:119,__CMTAT_openzeppelin_init_unchained +FN:131,__CMTAT_modules_init_unchained +FN:141,canTransfer +FN:157,canTransferFrom +FN:171,_authorizeAttachPolicyEngine +FN:177,_authorizePause +FN:178,_authorizeDeactivate +FN:180,_authorizeFreeze +FN:183,_checkTransferred +FN:196,supportsInterface +FNF:13 +FNH:11 +FNDA:51,initialize +FNDA:51,_initialize +FNDA:51,__CMTAT_init +FNDA:51,__CMTAT_openzeppelin_init_unchained +FNDA:0,__CMTAT_modules_init_unchained +FNDA:233,canTransfer +FNDA:35,canTransferFrom +FNDA:0,_authorizeAttachPolicyEngine +FNDA:99,_authorizePause +FNDA:37,_authorizeDeactivate +FNDA:78,_authorizeFreeze +FNDA:1012,_checkTransferred +FNDA:6,supportsInterface +DA:51,51 +DA:72,51 +DA:95,51 +DA:98,51 +DA:101,51 +DA:104,51 +DA:107,51 +DA:108,51 +DA:111,51 +DA:121,51 +DA:132,0 +DA:146,233 +DA:147,233 +DA:148,88 +DA:150,145 +DA:163,35 +DA:164,35 +DA:165,12 +DA:167,23 +DA:189,1012 +DA:190,994 +DA:199,6 +LF:22 +LH:21 +BRDA:50,1,0,51 +BRDA:50,1,1,2 +BRDA:71,2,0,51 +BRDA:71,2,1,0 +BRDA:92,3,0,51 +BRDA:92,3,1,0 +BRDA:119,4,0,51 +BRDA:119,4,1,0 +BRDA:131,5,0,0 +BRDA:131,5,1,0 +BRDA:147,6,0,88 +BRDA:147,6,1,145 +BRDA:164,7,0,12 +BRDA:164,7,1,23 +BRDA:171,8,0,0 +BRDA:171,8,1,0 +BRDA:177,9,0,99 +BRDA:177,9,1,6 +BRDA:178,10,0,37 +BRDA:178,10,1,3 +BRDA:180,11,0,78 +BRDA:180,11,1,9 +BRDA:190,12,0,918 +BRDA:190,12,1,76 +BRDA:200,13,0,3 +BRDA:200,13,1,0 +BRF:26 +BRH:18 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/PolicyValidationModuleERC1404.sol +FN:42,messageForTransferRestriction +FN:70,detectTransferRestriction +FN:83,detectTransferRestrictionFrom +FN:108,_detectTransferRestriction +FNF:4 +FNH:4 +FNDA:9,messageForTransferRestriction +FNDA:6,detectTransferRestriction +FNDA:3,detectTransferRestrictionFrom +FNDA:7,_detectTransferRestriction +DA:45,9 +DA:46,2 +DA:48,1 +DA:50,1 +DA:52,1 +DA:54,2 +DA:56,1 +DA:58,1 +DA:75,6 +DA:76,6 +DA:77,5 +DA:79,1 +DA:89,3 +DA:90,1 +DA:92,2 +DA:93,2 +DA:94,1 +DA:96,1 +DA:113,7 +DA:114,1 +DA:116,1 +DA:118,1 +DA:120,2 +DA:122,2 +LF:24 +LH:24 +BRDA:45,1,0,2 +BRDA:45,1,1,7 +BRDA:47,2,0,1 +BRDA:47,2,1,6 +BRDA:49,3,0,1 +BRDA:49,3,1,5 +BRDA:51,4,0,1 +BRDA:51,4,1,4 +BRDA:53,5,0,2 +BRDA:53,5,1,2 +BRDA:55,6,0,1 +BRDA:55,6,1,1 +BRDA:76,7,0,5 +BRDA:76,7,1,1 +BRDA:89,8,0,1 +BRDA:89,8,1,2 +BRDA:93,9,0,1 +BRDA:93,9,1,1 +BRDA:113,10,0,1 +BRDA:113,10,1,6 +BRDA:115,11,0,1 +BRDA:115,11,1,5 +BRDA:117,12,0,1 +BRDA:117,12,1,4 +BRDA:119,13,0,2 +BRDA:119,13,1,2 +BRF:26 +BRH:26 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/ValidationModulePolicyEngine.sol +FN:20,canTransfer +FN:32,canTransferFrom +FN:45,_canTransfer +FN:53,_canTransferFrom +FN:66,_canTransferFromWithPolicyEngine +FN:75,_canTransferWithPolicyEngine +FN:83,_tryCheckPolicies +FN:102,_transferred +FNF:8 +FNH:8 +FNDA:145,canTransfer +FNDA:23,canTransferFrom +FNDA:145,_canTransfer +FNDA:23,_canTransferFrom +FNDA:11,_canTransferFromWithPolicyEngine +FNDA:106,_canTransferWithPolicyEngine +FNDA:118,_tryCheckPolicies +FNDA:997,_transferred +DA:25,145 +DA:38,23 +DA:46,145 +DA:47,39 +DA:49,106 +DA:59,23 +DA:60,12 +DA:62,11 +DA:72,11 +DA:80,106 +DA:84,118 +DA:85,118 +DA:86,117 +DA:87,117 +DA:92,111 +DA:94,6 +DA:97,1 +DA:108,997 +DA:109,928 +DA:110,928 +DA:111,927 +DA:112,927 +DA:115,920 +DA:116,2 +DA:119,921 +LF:25 +LH:25 +BRDA:46,1,0,39 +BRDA:46,1,1,106 +BRDA:59,2,0,12 +BRDA:59,2,1,11 +BRDA:85,3,0,117 +BRDA:85,3,1,1 +BRDA:110,4,0,927 +BRDA:110,4,1,1 +BRDA:115,5,0,2 +BRDA:115,5,1,918 +BRF:10 +BRH:10 +end_of_record +TN: +SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/standard/CCTCommon.sol +FN:56,initialize +FN:74,_initialize +FN:95,__CMTAT_init +FN:122,__CMTAT_openzeppelin_init_unchained +FN:133,__CMTAT_modules_init_unchained +FN:140,__CMTAT_commonModules_init_unchained +FN:162,transfer +FN:172,transferFrom +FN:176,_authorizeAttachPolicyEngine +FN:183,decimals +FN:190,name +FN:197,symbol +FN:201,supportsInterface +FN:213,_mintOverride +FN:223,_burnOverride +FN:233,_minterTransferOverride +FN:247,_authorizeERC20AttributeManagement +FN:253,_authorizeMint +FN:259,_authorizeBurn +FN:265,_authorizeDocumentManagement +FN:271,_authorizeExtraInfoManagement +FN:277,_authorizeERC20Enforcer +FN:283,_authorizeForcedTransfer +FN:289,_authorizeSnapshots +FN:295,_authorizeCCIPSetAdmin +FN:306,_checkTokenBridge +FN:313,_authorizeBurnFrom +FN:320,_authorizeSelfBurn +FN:323,_update +FNF:29 +FNH:28 +FNDA:12,initialize +FNDA:12,_initialize +FNDA:12,__CMTAT_init +FNDA:12,__CMTAT_openzeppelin_init_unchained +FNDA:12,__CMTAT_modules_init_unchained +FNDA:12,__CMTAT_commonModules_init_unchained +FNDA:48,transfer +FNDA:12,transferFrom +FNDA:3,_authorizeAttachPolicyEngine +FNDA:9,decimals +FNDA:13,name +FNDA:10,symbol +FNDA:9,supportsInterface +FNDA:376,_mintOverride +FNDA:48,_burnOverride +FNDA:0,_minterTransferOverride +FNDA:3,_authorizeERC20AttributeManagement +FNDA:352,_authorizeMint +FNDA:33,_authorizeBurn +FNDA:63,_authorizeDocumentManagement +FNDA:3,_authorizeExtraInfoManagement +FNDA:48,_authorizeERC20Enforcer +FNDA:12,_authorizeForcedTransfer +FNDA:12,_authorizeSnapshots +FNDA:3,_authorizeCCIPSetAdmin +FNDA:15,_checkTokenBridge +FNDA:3,_authorizeBurnFrom +FNDA:3,_authorizeSelfBurn +FNDA:478,_update +DA:57,12 +DA:75,12 +DA:96,12 +DA:99,12 +DA:102,12 +DA:105,12 +DA:107,12 +DA:110,12 +DA:113,12 +DA:114,12 +DA:124,12 +DA:134,12 +DA:142,12 +DA:148,12 +DA:163,48 +DA:173,12 +DA:184,9 +DA:191,13 +DA:198,10 +DA:204,9 +DA:217,376 +DA:227,48 +DA:238,0 +DA:328,478 +LF:24 +LH:23 +BRDA:56,1,0,12 +BRDA:56,1,1,2 +BRDA:74,2,0,12 +BRDA:74,2,1,0 +BRDA:95,3,0,12 +BRDA:95,3,1,0 +BRDA:122,4,0,12 +BRDA:122,4,1,0 +BRDA:133,5,0,12 +BRDA:133,5,1,0 +BRDA:140,6,0,12 +BRDA:140,6,1,0 +BRDA:162,7,0,48 +BRDA:162,7,1,0 +BRDA:172,8,0,12 +BRDA:172,8,1,0 +BRDA:176,9,0,3 +BRDA:176,9,1,3 +BRDA:205,10,0,3 +BRDA:205,10,1,3 +BRDA:247,11,0,3 +BRDA:247,11,1,3 +BRDA:253,12,0,352 +BRDA:253,12,1,24 +BRDA:259,13,0,33 +BRDA:259,13,1,15 +BRDA:265,14,0,63 +BRDA:265,14,1,3 +BRDA:271,15,0,3 +BRDA:271,15,1,3 +BRDA:277,16,0,48 +BRDA:277,16,1,12 +BRDA:283,17,0,12 +BRDA:283,17,1,12 +BRDA:289,18,0,12 +BRDA:289,18,1,3 +BRDA:295,19,0,3 +BRDA:295,19,1,3 +BRDA:306,20,0,15 +BRDA:306,20,1,6 +BRDA:313,21,0,3 +BRDA:313,21,1,3 +BRDA:320,22,0,3 +BRDA:320,22,1,3 +BRF:44 +BRH:37 +end_of_record diff --git a/doc/coverage/coverage/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html b/doc/coverage/coverage/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html new file mode 100644 index 0000000..abe097e --- /dev/null +++ b/doc/coverage/coverage/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html @@ -0,0 +1,230 @@ + + + + Code coverage report for modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/custom/ ERC20TransferFromExtractor.sol +

+
+
+ 100% + Statements + 8/8 +
+
+ 75% + Branches + 3/4 +
+
+ 100% + Functions + 1/1 +
+
+ 94.12% + Lines + 16/17 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +34× +34× +34× +34× +  +34× +30× +30× +30× +  +4× +4× +  +  +  +  +34× +34× +34× +34× +34× +  +34× +  +  + 
// SPDX-License-Identifier: BUSL-1.1
+pragma solidity ^0.8.20;
+ 
+import {IExtractor} from "@chainlink/policy-management/interfaces/IExtractor.sol";
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+ 
+/**
+ * @title ERC20TransferFromExtractor
+ * @notice Extends the standard ERC20TransferExtractor by also extracting the
+ *         spender address, enabling policies to validate transferFrom approvals.
+ * @dev Handles:
+ *      - transfer(address to, uint256 amount):
+ *          spender = sender, from = sender, to = decoded, amount = decoded
+ *      - transferFrom(address from, address to, uint256 amount):
+ *          spender = sender, from = decoded, to = decoded, amount = decoded
+ *
+ *      Returns 4 parameters: [spender, from, to, amount]
+ */
+contract ERC20TransferFromExtractor is IExtractor {
+    string public constant override typeAndVersion = "ERC20TransferFromExtractor 1.0.0";
+ 
+    bytes32 public constant PARAM_SPENDER = keccak256("spender");
+    bytes32 public constant PARAM_FROM = keccak256("from");
+    bytes32 public constant PARAM_TO = keccak256("to");
+    bytes32 public constant PARAM_AMOUNT = keccak256("amount");
+ 
+    function extract(
+        IPolicyEngine.Payload calldata payload
+    ) external pure override returns (IPolicyEngine.Parameter[] memory) {
+        address spender;
+        address from;
+        address to;
+        uint256 amount;
+ 
+        if (payload.selector == IERC20.transfer.selector) {
+            spender = payload.sender;
+            from = payload.sender;
+            (to, amount) = abi.decode(payload.data, (address, uint256));
+        } else Eif (payload.selector == IERC20.transferFrom.selector) {
+            spender = payload.sender;
+            (from, to, amount) = abi.decode(payload.data, (address, address, uint256));
+        } else {
+            revert IPolicyEngine.UnsupportedSelector(payload.selector);
+        }
+ 
+        IPolicyEngine.Parameter[] memory result = new IPolicyEngine.Parameter[](4);
+        result[0] = IPolicyEngine.Parameter(PARAM_SPENDER, abi.encode(spender));
+        result[1] = IPolicyEngine.Parameter(PARAM_FROM, abi.encode(from));
+        result[2] = IPolicyEngine.Parameter(PARAM_TO, abi.encode(to));
+        result[3] = IPolicyEngine.Parameter(PARAM_AMOUNT, abi.encode(amount));
+ 
+        return result;
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html b/doc/coverage/coverage/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html new file mode 100644 index 0000000..f45a1cc --- /dev/null +++ b/doc/coverage/coverage/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html @@ -0,0 +1,470 @@ + + + + Code coverage report for modules/chainlink-ace/custom/TransferValidationPolicy.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/custom/ TransferValidationPolicy.sol +

+
+
+ 100% + Statements + 33/33 +
+
+ 81.25% + Branches + 13/16 +
+
+ 100% + Functions + 6/6 +
+
+ 100% + Lines + 37/37 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +69× +  +  +  +  +  +  +  +  +  +  +33× +30× +30× +30× +37× +37× +  +  +  +  +  +  +  +  +  +2× +2× +2× +2× +2× +2× +  +2× +  +  +  +  +  +  +1× +  +  +  +  +  +  +1× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +35× +35× +  +35× +  +33× +33× +33× +33× +  +33× +35× +35× +13× +13× +  +  +  +  +2× +2× +2× +  +2× +2× +2× +1× +1× +  +  +  +  +21× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {Policy} from "@chainlink/policy-management/core/Policy.sol";
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+import {IRule} from "../../../../submodules/RuleEngine/src/interfaces/IRule.sol";
+ 
+/**
+ * @title TransferValidationPolicy
+ * @notice A policy that validates ERC-20 transfers by running an array of IRule
+ *         contracts, mimicking CMTAT's _canTransferWithRuleEngine() behavior.
+ * @dev Works with both ERC20TransferExtractor (3 params) and
+ *      ERC20TransferFromExtractor (4 params):
+ *
+ *      3 parameters: [from, to, amount]
+ *        → uses detectTransferRestriction(from, to, amount)
+ *
+ *      4 parameters: [spender, from, to, amount]
+ *        → uses detectTransferRestrictionFrom(spender, from, to, amount)
+ *
+ *      Each IRule is checked in order. If any rule returns a non-zero code
+ *      the policy reverts with PolicyRejected containing the rule's message.
+ */
+contract TransferValidationPolicy is Policy {
+    string public constant override typeAndVersion = "TransferValidationPolicy 1.0.0";
+    event RulesUpdated(uint256 previousCount, uint256 newCount);
+ 
+    /// @custom:storage-location erc7201:cmta.TransferValidationPolicy
+    struct TransferValidationStorage {
+        IRule[] rules;
+    }
+ 
+    // keccak256(abi.encode(uint256(keccak256("cmta.TransferValidationPolicy")) - 1)) & ~bytes32(uint256(0xff))
+    bytes32 private constant STORAGE_LOCATION = 0xd90ded5881f9295c61e86b2e3b551acbb5fe06f9f79d0cec87ddc5bb60d48e00;
+ 
+    function _getStorage() private pure returns (TransferValidationStorage storage $) {
+        assembly {
+            $.slot := STORAGE_LOCATION
+        }
+    }
+ 
+    /**
+     * @inheritdoc Policy
+     * @dev Decodes an array of IRule addresses to set as initial rules.
+     *      Pass empty bytes if no initial rules are needed.
+     */
+    function configure(bytes calldata parameters) internal override EonlyInitializing {
+        if (parameters.length > 0) {
+            address[] memory ruleAddrs = abi.decode(parameters, (address[]));
+            TransferValidationStorage storage $ = _getStorage();
+            for (uint256 i = 0; i < ruleAddrs.length; ++i) {
+                Erequire(ruleAddrs[i] != address(0), "Rule address cannot be zero");
+                $.rules.push(IRule(ruleAddrs[i]));
+            }
+        }
+    }
+ 
+    /**
+     * @notice Replaces all rules with a new set.
+     * @param rules_ The new array of IRule contracts.
+     */
+    function setRules(IRule[] calldata rules_) external onlyOwner {
+        TransferValidationStorage storage $ = _getStorage();
+        uint256 previousCount = $.rules.length;
+        delete $.rules;
+        for (uint256 i = 0; i < rules_.length; ++i) {
+            Erequire(address(rules_[i]) != address(0), "Rule address cannot be zero");
+            $.rules.push(rules_[i]);
+        }
+        emit RulesUpdated(previousCount, rules_.length);
+    }
+ 
+    /**
+     * @notice Returns the current rules.
+     */
+    function rules() external view returns (IRule[] memory) {
+        return _getStorage().rules;
+    }
+ 
+    /**
+     * @notice Returns the number of rules.
+     */
+    function rulesCount() external view returns (uint256) {
+        return _getStorage().rules.length;
+    }
+ 
+    /**
+     * @inheritdoc Policy
+     * @dev Supports both 3-param (transfer) and 4-param (transferFrom) layouts.
+     *      With 4 parameters, uses detectTransferRestrictionFrom to also validate
+     *      the spender.
+     */
+    function run(
+        address /* caller */,
+        address /* subject */,
+        bytes4 /* selector */,
+        bytes[] calldata parameters,
+        bytes calldata /* context */
+    ) public view override returns (IPolicyEngine.PolicyResult) {
+        TransferValidationStorage storage $ = _getStorage();
+        uint256 len = $.rules.length;
+ 
+        if (parameters.length >= 4) {
+            // ERC20TransferFromExtractor layout: [spender, from, to, amount]
+            address spender = abi.decode(parameters[0], (address));
+            address from = abi.decode(parameters[1], (address));
+            address to = abi.decode(parameters[2], (address));
+            uint256 amount = abi.decode(parameters[3], (uint256));
+ 
+            for (uint256 i = 0; i < len; ++i) {
+                uint8 code = $.rules[i].detectTransferRestrictionFrom(spender, from, to, amount);
+                if (code != 0) {
+                    string memory message = $.rules[i].messageForTransferRestriction(code);
+                    revert IPolicyEngine.PolicyRejected(message);
+                }
+            }
+        } else {
+            // ERC20TransferExtractor layout: [from, to, amount]
+            address from = abi.decode(parameters[0], (address));
+            address to = abi.decode(parameters[1], (address));
+            uint256 amount = abi.decode(parameters[2], (uint256));
+ 
+            for (uint256 i = 0; i < len; ++i) {
+                uint8 code = $.rules[i].detectTransferRestriction(from, to, amount);
+                if (code != 0) {
+                    string memory message = $.rules[i].messageForTransferRestriction(code);
+                    revert IPolicyEngine.PolicyRejected(message);
+                }
+            }
+        }
+ 
+        return IPolicyEngine.PolicyResult.Continue;
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/chainlink-ace/custom/index.html b/doc/coverage/coverage/modules/chainlink-ace/custom/index.html new file mode 100644 index 0000000..6426d9f --- /dev/null +++ b/doc/coverage/coverage/modules/chainlink-ace/custom/index.html @@ -0,0 +1,106 @@ + + + + Code coverage report for modules/chainlink-ace/custom/ + + + + + + + +
+
+

+ all files modules/chainlink-ace/custom/ +

+
+
+ 100% + Statements + 41/41 +
+
+ 80% + Branches + 16/20 +
+
+ 100% + Functions + 7/7 +
+
+ 98.15% + Lines + 53/54 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ERC20TransferFromExtractor.sol
100%8/875%3/4100%1/194.12%16/17
TransferValidationPolicy.sol
100%33/3381.25%13/16100%6/6100%37/37
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html b/doc/coverage/coverage/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html new file mode 100644 index 0000000..c9afb4c --- /dev/null +++ b/doc/coverage/coverage/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html @@ -0,0 +1,449 @@ + + + + Code coverage report for modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/mocks/ PolicyProtectedUpgradeableMocks.sol +

+
+
+ 54.55% + Statements + 6/11 +
+
+ 66.67% + Branches + 8/12 +
+
+ 38.71% + Functions + 12/31 +
+
+ 72.22% + Lines + 13/18 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  +  +  +  +  +  +8× +  +  +  +1× +1× +1× +  +  +  +  +5× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +7× +  +  +  +  +  +1× +  +  +  +1× +  +  +  +1× +  +  +  +  +  +1× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1× +  +  +  +  +  +  +  +  +3× +  +  + 
// SPDX-License-Identifier: BUSL-1.1
+pragma solidity ^0.8.20;
+ 
+import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+import {PolicyProtectedUpgradeable} from "../modified/PolicyProtectedUpgradeable.sol";
+import {ValidationModulePolicyEngine} from "../../lite/ValidationModulePolicyEngine.sol";
+ 
+contract MockPolicyEngine is IPolicyEngine {
+    Payload public lastPayload;
+    uint256 public attachCalls;
+    uint256 public detachCalls;
+    bool public detachShouldRevert;
+ 
+    function setDetachShouldRevert(bool value) external {
+        detachShouldRevert = value;
+    }
+ 
+    function typeAndVersion() external pure override returns (string memory) {
+        return "MockPolicyEngine 1.0.0";
+    }
+ 
+    function attach() external override {
+        attachCalls++;
+    }
+ 
+    function detach() external override {
+        detachCalls++;
+        Eif (detachShouldRevert) {
+            revert("MockPolicyEngine: detach failed");
+        }
+    }
+ 
+    function run(Payload calldata payload) external override {
+        lastPayload = payload;
+    }
+ 
+    function check(Payload calldata) external pure override {}
+ 
+    function setExtractor(bytes4, address) external pure override {}
+ 
+    function setExtractors(bytes4[] calldata, address) external pure override {}
+ 
+    function getExtractor(bytes4) external pure override returns (address) {
+        return address(0);
+    }
+ 
+    function setPolicyMapper(address, address) external pure override {}
+ 
+    function getPolicyMapper(address) external pure override returns (address) {
+        return address(0);
+    }
+ 
+    function addPolicy(address, bytes4, address, bytes32[] calldata) external pure override {}
+ 
+    function addPolicyAt(address, bytes4, address, bytes32[] calldata, uint256) external pure override {}
+ 
+    function removePolicy(address, bytes4, address) external pure override {}
+ 
+    function getPolicies(address, bytes4) external pure override returns (address[] memory) {
+        return new address[](0);
+    }
+ 
+    function setPolicyConfiguration(address, uint256, bytes4, bytes calldata) external pure override {}
+ 
+    function getPolicyConfigVersion(address) external pure override returns (uint256) {
+        return 0;
+    }
+ 
+    function setDefaultPolicyAllow(bool) external pure override {}
+ 
+    function setTargetDefaultPolicyAllow(address, bool) external pure override {}
+}
+ 
+contract PolicyProtectedUpgradeableHarness is Initializable, PolicyProtectedUpgradeable {
+    uint256 public counter;
+ 
+    error ForcedRevert();
+ 
+    function initialize(address policyEngine) external Einitializer {
+        __PolicyProtected_init(policyEngine);
+    }
+ 
+    function _authorizeAttachPolicyEngine(address) internal pure override {}
+ 
+    function guardedRun() external runPolicy {
+        counter += 1;
+    }
+ 
+    function guardedRunWithContext(bytes calldata context) external runPolicyWithContext(context) {
+        counter += 1;
+    }
+ 
+    function guardedRunAndRevert() external ErunPolicy {
+        revert ForcedRevert();
+    }
+}
+ 
+contract ValidationModulePolicyEngineHarness is Initializable, ValidationModulePolicyEngine {
+    function initializeWithPolicyEngine(address policyEngine) external Einitializer {
+        __PolicyProtected_init(policyEngine);
+    }
+ 
+    function _authorizeAttachPolicyEngine(address) internal pure override {}
+ 
+    function _authorizePause() internal pure override {}
+ 
+    function _authorizeDeactivate() internal pure override {}
+ 
+    function _authorizeFreeze() internal pure override {}
+ 
+    function exposedTryCheckPolicies(
+        bytes4 selector,
+        address sender,
+        bytes calldata data
+    ) external view returns (bool) {
+        return _tryCheckPolicies(selector, sender, data);
+    }
+ 
+    function exposedTransferred(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) external returns (bool) {
+        return _transferred(spender, from, to, value);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html b/doc/coverage/coverage/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html new file mode 100644 index 0000000..f6eef52 --- /dev/null +++ b/doc/coverage/coverage/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html @@ -0,0 +1,536 @@ + + + + Code coverage report for modules/chainlink-ace/mocks/TransferRuleMocks.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/mocks/ TransferRuleMocks.sol +

+
+
+ 62.5% + Statements + 15/24 +
+
+ 66.67% + Branches + 12/18 +
+
+ 45.45% + Functions + 10/22 +
+
+ 64% + Lines + 16/25 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +26× +  +  +  +  +  +  +  +25× +  +  +  +  +  +  +  +  +23× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +8× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +3× +3× +  +  +  +14× +14× +12× +  +  +  +  +3× +  +  +  +  +  +  +  +12× +10× +6× +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6× +4× +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {IRule} from "../../../../submodules/RuleEngine/src/interfaces/IRule.sol";
+ 
+/**
+ * @dev WARNING: Mock rule contracts for tests/examples only.
+ *      Not designed, reviewed, or hardened for production deployments.
+ */
+ 
+/**
+ * @title MaxAmountRule
+ * @notice Rejects transfers where the amount exceeds a configurable maximum.
+ */
+contract MaxAmountRule is IRule {
+    uint256 public immutable maxAmount;
+    uint8 constant AMOUNT_TOO_HIGH = 13;
+ 
+    constructor(uint256 maxAmount_) {
+        maxAmount = maxAmount_;
+    }
+ 
+    function detectTransferRestriction(
+        address /* from */,
+        address /* to */,
+        uint256 amount
+    ) public view override returns (uint8) {
+        return amount > maxAmount ? AMOUNT_TOO_HIGH : uint8(REJECTED_CODE_BASE.TRANSFER_OK);
+    }
+ 
+    function detectTransferRestrictionFrom(
+        address /* spender */,
+        address from,
+        address to,
+        uint256 amount
+    ) public view override returns (uint8) {
+        return detectTransferRestriction(from, to, amount);
+    }
+ 
+    function canTransfer(address from, address to, uint256 amount) public view override returns (bool) {
+        return detectTransferRestriction(from, to, amount) == 0;
+    }
+ 
+    function canTransferFrom(
+        address /* spender */,
+        address from,
+        address to,
+        uint256 amount
+    ) external view override returns (bool) {
+        return canTransfer(from, to, amount);
+    }
+ 
+    function transferred(address /* from */, address /* to */, uint256 /* value */) external pure override {}
+ 
+    function transferred(
+        address /* spender */,
+        address /* from */,
+        address /* to */,
+        uint256 /* value */
+    ) external pure override {}
+ 
+    function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
+        return interfaceId == type(IRule).interfaceId;
+    }
+ 
+    function canReturnTransferRestrictionCode(uint8 code) public pure override returns (bool) {
+        return code == AMOUNT_TOO_HIGH;
+    }
+ 
+    function messageForTransferRestriction(uint8 code) external pure override returns (string memory) {
+        return code == AMOUNT_TOO_HIGH ? "Amount exceeds maximum" : E"Unknown code";
+    }
+}
+ 
+/**
+ * @title RestrictedAddressRule
+ * @notice Rejects transfers involving addresses on a restricted list.
+ */
+contract RestrictedAddressRule is IRule {
+    uint8 constant FROM_RESTRICTED = 14;
+    uint8 constant TO_RESTRICTED = 15;
+ 
+    mapping(address => bool) public restricted;
+    address public immutable owner;
+ 
+    modifier onlyOwner() {
+        Erequire(msg.sender == owner, "only owner");
+        _;
+    }
+ 
+    constructor(address[] memory restricted_) {
+        owner = msg.sender;
+        for (uint256 i = 0; i < restricted_.length; ++i) {
+            restricted[restricted_[i]] = true;
+        }
+    }
+ 
+    function setRestricted(address account, bool status) external EonlyOwner {
+        restricted[account] = status;
+    }
+ 
+    function detectTransferRestriction(
+        address from,
+        address to,
+        uint256 /* amount */
+    ) public view override returns (uint8) {
+        if (restricted[from]) return FROM_RESTRICTED;
+        if (restricted[to]) return TO_RESTRICTED;
+        return uint8(REJECTED_CODE_BASE.TRANSFER_OK);
+    }
+ 
+    function detectTransferRestrictionFrom(
+        address /* spender */,
+        address from,
+        address to,
+        uint256 amount
+    ) public view override returns (uint8) {
+        return detectTransferRestriction(from, to, amount);
+    }
+ 
+    function canTransfer(address from, address to, uint256 amount) public view override returns (bool) {
+        return detectTransferRestriction(from, to, amount) == 0;
+    }
+ 
+    function canTransferFrom(
+        address /* spender */,
+        address from,
+        address to,
+        uint256 amount
+    ) external view override returns (bool) {
+        return canTransfer(from, to, amount);
+    }
+ 
+    function transferred(address /* from */, address /* to */, uint256 /* value */) external pure override {}
+ 
+    function transferred(
+        address /* spender */,
+        address /* from */,
+        address /* to */,
+        uint256 /* value */
+    ) external pure override {}
+ 
+    function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
+        return interfaceId == type(IRule).interfaceId;
+    }
+ 
+    function canReturnTransferRestrictionCode(uint8 code) public pure override returns (bool) {
+        return code == FROM_RESTRICTED || code == TO_RESTRICTED;
+    }
+ 
+    function messageForTransferRestriction(uint8 code) external pure override returns (string memory) {
+        if (code == FROM_RESTRICTED) return "Sender is restricted";
+        Eif (code == TO_RESTRICTED) return "Recipient is restricted";
+        return "Unknown code";
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/chainlink-ace/mocks/index.html b/doc/coverage/coverage/modules/chainlink-ace/mocks/index.html new file mode 100644 index 0000000..ca94830 --- /dev/null +++ b/doc/coverage/coverage/modules/chainlink-ace/mocks/index.html @@ -0,0 +1,106 @@ + + + + Code coverage report for modules/chainlink-ace/mocks/ + + + + + + + +
+
+

+ all files modules/chainlink-ace/mocks/ +

+
+
+ 60% + Statements + 21/35 +
+
+ 66.67% + Branches + 20/30 +
+
+ 41.51% + Functions + 22/53 +
+
+ 67.44% + Lines + 29/43 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
PolicyProtectedUpgradeableMocks.sol
54.55%6/1166.67%8/1238.71%12/3172.22%13/18
TransferRuleMocks.sol
62.5%15/2466.67%12/1845.45%10/2264%16/25
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/chainlink-ace/modified/MintBurnExtractor.sol.html b/doc/coverage/coverage/modules/chainlink-ace/modified/MintBurnExtractor.sol.html new file mode 100644 index 0000000..afcabb0 --- /dev/null +++ b/doc/coverage/coverage/modules/chainlink-ace/modified/MintBurnExtractor.sol.html @@ -0,0 +1,218 @@ + + + + Code coverage report for modules/chainlink-ace/modified/MintBurnExtractor.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/modified/ MintBurnExtractor.sol +

+
+
+ 100% + Statements + 6/6 +
+
+ 100% + Branches + 6/6 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 11/11 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4× +4× +  +4× +2× +  +1× +1× +  +1× +  +  +3× +3× +3× +3× +  +  + 
// SPDX-License-Identifier: BUSL-1.1
+pragma solidity ^0.8.20;
+ 
+import {IExtractor} from "@chainlink/policy-management/interfaces/IExtractor.sol";
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+ 
+/**
+ * @title MintBurnExtractor
+ * @notice Extracts parameters from CMTAT mint and burn function calls.
+ * @dev Mirrors ComplianceTokenMintBurnExtractor from @chainlink/ace but avoids
+ *      the cross-package relative import of ComplianceTokenERC20 which is
+ *      incompatible with Hardhat's module resolution. Selectors are inlined.
+ *      Handles:
+ *        - mint(address account, uint256 amount)       → 0x40c10f19
+ *        - burnFrom(address account, uint256 amount)   → 0x79cc6790
+ *        - burn(uint256 amount)                        → 0x42966c68
+ */
+contract MintBurnExtractor is IExtractor {
+    string public constant override typeAndVersion = "MintBurnExtractor 1.0.0";
+ 
+    bytes32 public constant PARAM_ACCOUNT = keccak256("account");
+    bytes32 public constant PARAM_AMOUNT = keccak256("amount");
+ 
+    // mint(address,uint256)
+    bytes4 private constant MINT_SELECTOR = bytes4(keccak256("mint(address,uint256)"));
+    // burnFrom(address,uint256)
+    bytes4 private constant BURN_FROM_SELECTOR = bytes4(keccak256("burnFrom(address,uint256)"));
+    // burn(uint256)
+    bytes4 private constant BURN_SELECTOR = bytes4(keccak256("burn(uint256)"));
+ 
+    function extract(
+        IPolicyEngine.Payload calldata payload
+    ) external pure override returns (IPolicyEngine.Parameter[] memory) {
+        address account;
+        uint256 amount;
+ 
+        if (payload.selector == MINT_SELECTOR || payload.selector == BURN_FROM_SELECTOR) {
+            (account, amount) = abi.decode(payload.data, (address, uint256));
+        } else if (payload.selector == BURN_SELECTOR) {
+            account = payload.sender;
+            (amount) = abi.decode(payload.data, (uint256));
+        } else {
+            revert IPolicyEngine.UnsupportedSelector(payload.selector);
+        }
+ 
+        IPolicyEngine.Parameter[] memory result = new IPolicyEngine.Parameter[](2);
+        result[0] = IPolicyEngine.Parameter(PARAM_ACCOUNT, abi.encode(account));
+        result[1] = IPolicyEngine.Parameter(PARAM_AMOUNT, abi.encode(amount));
+        return result;
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html b/doc/coverage/coverage/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html new file mode 100644 index 0000000..39f703a --- /dev/null +++ b/doc/coverage/coverage/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html @@ -0,0 +1,452 @@ + + + + Code coverage report for modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol + + + + + + + +
+
+

+ all files / modules/chainlink-ace/modified/ PolicyProtectedUpgradeable.sol +

+
+
+ 100% + Statements + 21/21 +
+
+ 81.25% + Branches + 13/16 +
+
+ 100% + Functions + 12/12 +
+
+ 100% + Lines + 29/29 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4374× +  +  +  +  +  +8× +8× +  +  +  +71× +  +  +  +  +  +  +  +  +703× +1× +  +702× +702× +  +  +612× +593× +1× +  +  +  +  +  +  +  +  +2× +1× +  +1× +  +  +1× +  +  +  +  +  +  +7× +4× +  +  +  +75× +74× +4× +  +  +1× +  +  +74× +74× +74× +  +  +  +  +1054× +  +  +  +  +3× +  +  +  +  +1752× +  +  +  +  +4× +  +  +  +  +  +  +  +  +11× +  +  + 
// SPDX-License-Identifier: BUSL-1.1
+pragma solidity ^0.8.20;
+ 
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+import {IPolicyProtected} from "@chainlink/policy-management/interfaces/IPolicyProtected.sol";
+import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
+import {ERC165Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol";
+import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
+ 
+/**
+ * @title PolicyProtectedUpgradeable.sol
+ * @dev Modified implementation for attaching a policy engine to an upgradeable smart contract. Uses ERC-7201 storage
+ *      to not conflict with other storage slots of extending contracts. Provides modifiers to be attached to methods
+ *      of the extending contract to run the policy engine before executing the method. Access control for attaching and detaching the policy engine
+ *      is implemented in the extending contract.
+ */
+abstract contract PolicyProtectedUpgradeable is Initializable, ERC165Upgradeable, IPolicyProtected {
+    /// @custom:storage-location erc7201:chainlink.ace.PolicyProtected
+    struct PolicyProtectedStorage {
+        IPolicyEngine policyEngine;
+        mapping(address sender => bytes context) senderContext; // use transient storage eventually
+    }
+ 
+    // keccak256(abi.encode(uint256(keccak256("chainlink.ace.PolicyProtected")) - 1)) &
+    // ~bytes32(uint256(0xff))
+    // solhint-disable-next-line const-name-snakecase
+    bytes32 private constant policyProtectedStorageLocation =
+        0x5970a53874f73819f13c80052b0c1b19d6ce68b29b2ad28a7413019c8a409000;
+ 
+    function _policyProtectedStorage() private pure returns (PolicyProtectedStorage storage $) {
+        // solhint-disable-next-line no-inline-assembly
+        assembly {
+            $.slot := policyProtectedStorageLocation
+        }
+    }
+ 
+    function __PolicyProtected_init(address policyEngine) internal EonlyInitializing {
+        __ERC165_init();
+        __PolicyProtected_init_unchained(policyEngine);
+    }
+ 
+    function __PolicyProtected_init_unchained(address policyEngine) internal EonlyInitializing {
+        _attachPolicyEngine(policyEngine);
+    }
+    /**
+     * @dev Modifier to run the policy engine on the current method.
+     * @notice Context is cleared only after successful execution of the guarded function.
+     *         If the guarded function reverts, this cleanup path is not reached and previously stored context remains.
+     */
+ 
+    modifier runPolicy() {
+        if (address(_policyProtectedStorage().policyEngine) == address(0)) {
+            revert IPolicyEngine.PolicyEngineUndefined();
+        }
+        bytes memory context = getContext();
+        _policyProtectedStorage().policyEngine.run(
+            IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})
+        );
+        _;
+        if (context.length > 0) {
+            clearContext();
+        }
+    }
+ 
+    /**
+     * @dev Modifier to run the policy engine on the current method with the provided context.
+     * @param context Additional information or authorization to perform the operation.
+     */
+    modifier runPolicyWithContext(bytes calldata context) {
+        if (address(_policyProtectedStorage().policyEngine) == address(0)) {
+            revert IPolicyEngine.PolicyEngineUndefined();
+        }
+        _policyProtectedStorage().policyEngine.run(
+            IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})
+        );
+        _;
+    }
+ 
+    function _authorizeAttachPolicyEngine(address policyEngine) internal virtual;
+ 
+    /// @inheritdoc IPolicyProtected
+    function attachPolicyEngine(address policyEngine) external virtual override {
+        _authorizeAttachPolicyEngine(policyEngine);
+        _attachPolicyEngine(policyEngine);
+    }
+ 
+    function _attachPolicyEngine(address policyEngine) internal {
+        require(policyEngine != address(0), "Policy engine is zero address");
+        if (address(_policyProtectedStorage().policyEngine) != address(0)) {
+            try _policyProtectedStorage().policyEngine.detach() {
+                // Detachment succeeded
+            } catch (bytes memory reason) {
+                emit PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine), reason);
+            }
+        }
+        _policyProtectedStorage().policyEngine = IPolicyEngine(policyEngine);
+        IPolicyEngine(policyEngine).attach();
+        emit PolicyEngineAttached(policyEngine);
+    }
+ 
+    /// @inheritdoc IPolicyProtected
+    function getPolicyEngine() public view virtual override returns (address) {
+        return address(_policyProtectedStorage().policyEngine);
+    }
+ 
+    /// @inheritdoc IPolicyProtected
+    function setContext(bytes calldata context) public override {
+        _policyProtectedStorage().senderContext[msg.sender] = context;
+    }
+ 
+    /// @inheritdoc IPolicyProtected
+    function getContext() public view override returns (bytes memory) {
+        return _policyProtectedStorage().senderContext[msg.sender];
+    }
+ 
+    /// @inheritdoc IPolicyProtected
+    function clearContext() public override {
+        delete _policyProtectedStorage().senderContext[msg.sender];
+    }
+ 
+    /**
+     * @dev See {IERC165-supportsInterface}.
+     */
+    function supportsInterface(
+        bytes4 interfaceId
+    ) public view virtual override(ERC165Upgradeable, IERC165) returns (bool) {
+        return interfaceId == type(IPolicyProtected).interfaceId || super.supportsInterface(interfaceId);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/chainlink-ace/modified/index.html b/doc/coverage/coverage/modules/chainlink-ace/modified/index.html new file mode 100644 index 0000000..f39a8f8 --- /dev/null +++ b/doc/coverage/coverage/modules/chainlink-ace/modified/index.html @@ -0,0 +1,106 @@ + + + + Code coverage report for modules/chainlink-ace/modified/ + + + + + + + +
+
+

+ all files modules/chainlink-ace/modified/ +

+
+
+ 100% + Statements + 27/27 +
+
+ 86.36% + Branches + 19/22 +
+
+ 100% + Functions + 13/13 +
+
+ 100% + Lines + 40/40 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
MintBurnExtractor.sol
100%6/6100%6/6100%1/1100%11/11
PolicyProtectedUpgradeable.sol
100%21/2181.25%13/16100%12/12100%29/29
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/demo/DemoImports.sol.html b/doc/coverage/coverage/modules/demo/DemoImports.sol.html new file mode 100644 index 0000000..877b11a --- /dev/null +++ b/doc/coverage/coverage/modules/demo/DemoImports.sol.html @@ -0,0 +1,110 @@ + + + + Code coverage report for modules/demo/DemoImports.sol + + + + + + + +
+
+

+ all files / modules/demo/ DemoImports.sol +

+
+
+ 100% + Statements + 0/0 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 0/0 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+// This import ensures Hardhat compiles MockV3Aggregator so it is available
+// as an artifact for deployment scripts.
+ 
+import {MockV3Aggregator} from "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol";
+import {PolicyEngine} from "@chainlink/policy-management/core/PolicyEngine.sol";
+import {PausePolicy} from "@chainlink/policy-management/policies/PausePolicy.sol";
+import {RoleBasedAccessControlPolicy} from "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol";
+import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMintPolicy.sol";
+import {ERC20TransferExtractor} from "@chainlink/policy-management/extractors/ERC20TransferExtractor.sol";
+import {SnapshotEngineMock} from "CMTAT/mocks/SnapshotEngineMock.sol";
+import {DocumentEngineMock} from "CMTAT/mocks/DocumentEngineMock.sol";
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/demo/index.html b/doc/coverage/coverage/modules/demo/index.html new file mode 100644 index 0000000..8b4a3cf --- /dev/null +++ b/doc/coverage/coverage/modules/demo/index.html @@ -0,0 +1,93 @@ + + + + Code coverage report for modules/demo/ + + + + + + + +
+
+

+ all files modules/demo/ +

+
+
+ 100% + Statements + 0/0 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 0/0 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
DemoImports.sol
100%0/0100%0/0100%0/0100%0/0
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/lite/CCTCMTATBaseERC1404.sol.html b/doc/coverage/coverage/modules/lite/CCTCMTATBaseERC1404.sol.html new file mode 100644 index 0000000..7e72df8 --- /dev/null +++ b/doc/coverage/coverage/modules/lite/CCTCMTATBaseERC1404.sol.html @@ -0,0 +1,326 @@ + + + + Code coverage report for modules/lite/CCTCMTATBaseERC1404.sol + + + + + + + +
+
+

+ all files / modules/lite/ CCTCMTATBaseERC1404.sol +

+
+
+ 100% + Statements + 12/12 +
+
+ 83.33% + Branches + 5/6 +
+
+ 100% + Functions + 5/5 +
+
+ 100% + Lines + 12/12 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +10× +  +  +  +1× +  +9× +  +  +  +  +  +  +  +  +  +  +  +233× +  +  +  +  +  +  +  +  +  +  +  +35× +  +  +  +  +  +  +  +  +  +  +8× +8× +1× +1× +1× +  +  +7× +  +  +  +  +  +6× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {CCTCMTATBasePolicyEngine} from "./CCTCMTATBasePolicyEngine.sol";
+import {PolicyValidationModuleERC1404, IERC1404, IERC1404Extend} from "./PolicyValidationModuleERC1404.sol";
+import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol";
+import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol";
+import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
+import {
+    ERC20EnforcementModule,
+    ERC20EnforcementModuleInternal
+} from "CMTAT/modules/wrapper/extensions/ERC20EnforcementModule.sol";
+ 
+abstract contract CCTCMTATBaseERC1404 is CCTCMTATBasePolicyEngine, PolicyValidationModuleERC1404 {
+    /**
+     * @dev ERC20EnforcementModule error text
+     */
+    string internal constant TEXT_TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE =
+        "AddrFrom:insufficientActiveBalance";
+    /*//////////////////////////////////////////////////////////////
+                            PUBLIC/EXTERNAL FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+ 
+    /**
+     * @inheritdoc PolicyValidationModuleERC1404
+     */
+    function messageForTransferRestriction(
+        uint8 restrictionCode
+    ) public view virtual override(PolicyValidationModuleERC1404) returns (string memory message) {
+        if (
+            restrictionCode ==
+            uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE)
+        ) {
+            return TEXT_TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE;
+        } else {
+            return PolicyValidationModuleERC1404.messageForTransferRestriction(restrictionCode);
+        }
+    }
+ 
+    /**
+     * @inheritdoc ValidationModulePolicyEngine
+     */
+    function canTransfer(
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(CCTCMTATBasePolicyEngine, ValidationModuleCore) returns (bool) {
+        return CCTCMTATBasePolicyEngine.canTransfer(from, to, value);
+    }
+ 
+    /**
+     * @inheritdoc ValidationModulePolicyEngine
+     */
+    function canTransferFrom(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(CCTCMTATBasePolicyEngine, ValidationModuleCore) returns (bool) {
+        return CCTCMTATBasePolicyEngine.canTransferFrom(spender, from, to, value);
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    function _detectTransferRestriction(
+        address from,
+        address to,
+        uint256 value
+    ) internal view virtual override(PolicyValidationModuleERC1404) returns (uint8 code) {
+        uint256 frozenTokensLocal = ERC20EnforcementModule.getFrozenTokens(from);
+        if (frozenTokensLocal > 0) {
+            uint256 activeBalance = ERC20Upgradeable.balanceOf(from) - frozenTokensLocal;
+            Eif (value > activeBalance) {
+                return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_INSUFFICIENT_ACTIVE_BALANCE);
+            }
+        }
+        return PolicyValidationModuleERC1404._detectTransferRestriction(from, to, value);
+    }
+ 
+    function supportsInterface(
+        bytes4 interfaceId
+    ) public view virtual override(CCTCMTATBasePolicyEngine) returns (bool) {
+        return CCTCMTATBasePolicyEngine.supportsInterface(interfaceId);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html b/doc/coverage/coverage/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html new file mode 100644 index 0000000..8b4c61c --- /dev/null +++ b/doc/coverage/coverage/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html @@ -0,0 +1,572 @@ + + + + Code coverage report for modules/lite/CCTCMTATBaseERC20CrossChain.sol + + + + + + + +
+
+

+ all files / modules/lite/ CCTCMTATBaseERC20CrossChain.sol +

+
+
+ 100% + Statements + 15/15 +
+
+ 100% + Branches + 16/16 +
+
+ 100% + Functions + 15/15 +
+
+ 100% + Lines + 15/15 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +119× +  +  +  +  +  +81× +  +  +  +  +  +  +  +  +  +29× +  +  +  +  +  +  +  +  +731× +716× +  +  +  +  +  +  +  +  +  +144× +120× +  +  +  +  +  +  +  +  +  +  +27× +18× +  +  +  +  +  +  +3× +  +  +  +  +  +  +10× +  +  +  +  +  +  +10× +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +39× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +939× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {ERC20CrossChainModule} from "CMTAT/modules/wrapper/options/ERC20CrossChainModule.sol";
+import {CCIPModule} from "CMTAT/modules/wrapper/options/CCIPModule.sol";
+import {CCTCMTATBaseERC1404} from "./CCTCMTATBaseERC1404.sol";
+import {CMTATBaseCommon} from "CMTAT/modules/0_CMTATBaseCommon.sol";
+import {
+    ERC20MintModule,
+    ERC20MintModuleInternal
+} from "CMTAT/modules/wrapper/core/ERC20MintModule.sol";
+import {
+    ERC20BurnModule,
+    ERC20BurnModuleInternal
+} from "CMTAT/modules/wrapper/core/ERC20BurnModule.sol";
+import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
+import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
+ 
+abstract contract CCTCMTATBaseERC20CrossChain is ERC20CrossChainModule, CCIPModule, CCTCMTATBaseERC1404 {
+    /* ============  State Functions ============ */
+    /**
+     * @dev revert if the contract is in pause state
+     */
+    function approve(
+        address spender,
+        uint256 value
+    ) public virtual override(ERC20Upgradeable) whenNotPaused returns (bool) {
+        return ERC20Upgradeable.approve(spender, value);
+    }
+    function transfer(
+        address to,
+        uint256 value
+    ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (bool) {
+        return CMTATBaseCommon.transfer(to, value);
+    }
+    /*
+     * @inheritdoc ERC20BaseModule
+     */
+    function transferFrom(
+        address from,
+        address to,
+        uint256 value
+    ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (bool) {
+        return CMTATBaseCommon.transferFrom(from, to, value);
+    }
+    /**
+     * @dev Check if the mint is valid
+     */
+    function _mintOverride(
+        address account,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) {
+        _checkTransferred(address(0), address(0), account, value);
+        ERC20MintModuleInternal._mintOverride(account, value);
+    }
+ 
+    /**
+     * @dev Check if the burn is valid
+     */
+    function _burnOverride(
+        address account,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20BurnModuleInternal) {
+        _checkTransferred(address(0), account, address(0), value);
+        ERC20BurnModuleInternal._burnOverride(account, value);
+    }
+ 
+    /**
+     * @dev Check if a minter transfer is valid
+     */
+    function _minterTransferOverride(
+        address from,
+        address to,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) {
+        _checkTransferred(address(0), from, to, value);
+        ERC20MintModuleInternal._minterTransferOverride(from, to, value);
+    }
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function decimals() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (uint8) {
+        return CMTATBaseCommon.decimals();
+    }
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function name() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) {
+        return CMTATBaseCommon.name();
+    }
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function symbol() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) {
+        return CMTATBaseCommon.symbol();
+    }
+ 
+    /* ============ View functions ============ */
+    function supportsInterface(
+        bytes4 _interfaceId
+    ) public view virtual override(ERC20CrossChainModule, CCTCMTATBaseERC1404) returns (bool) {
+        return
+            ERC20CrossChainModule.supportsInterface(_interfaceId) ||
+            CCTCMTATBaseERC1404.supportsInterface(_interfaceId);
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /* ==== Access Control ==== */
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `DEFAULT_ADMIN_ROLE`.
+     */
+    function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) onlyRole(DEFAULT_ADMIN_ROLE) {}
+ 
+    /**
+     * @dev
+     * A cross-chain bridge could call the OpenZeppelin function `renounceRole` to lose their privileges (CROSS_CHAIN_ROLE)
+     * While it is not intended,this has no other effect than depriving the bridge of burn/mint tokens
+     * An attacker could use this to disrupt minting/burning if they can get the bridge to execute calls.
+     * However, in this case, the bridge should still be considered compromised and not used again.
+     * @custom:access-control
+     * - the caller must have the `CROSS_CHAIN_ROLE`.
+     */
+    function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) whenNotPaused {
+        AccessControlUpgradeable._checkRole(CROSS_CHAIN_ROLE, caller);
+    }
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `BURNER_FROM_ROLE`.
+     * - We don't allow token holder to burn their own tokens if they don't have this role.
+     */
+    function _authorizeBurnFrom()
+        internal
+        virtual
+        override(ERC20CrossChainModule)
+        onlyRole(BURNER_FROM_ROLE)
+        whenNotPaused
+    {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `BURNER_SELF_ROLE`.
+     * - We don't allow token holder to burn their own tokens if they don't have this role.
+     */
+    function _authorizeSelfBurn()
+        internal
+        virtual
+        override(ERC20CrossChainModule)
+        onlyRole(BURNER_SELF_ROLE)
+        whenNotPaused
+    {}
+ 
+    /* ==== ERC-20 OpenZeppelin ==== */
+    function _update(
+        address from,
+        address to,
+        uint256 amount
+    ) internal virtual override(ERC20Upgradeable, CMTATBaseCommon) {
+        return CMTATBaseCommon._update(from, to, amount);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/lite/CCTCMTATBasePolicyEngine.sol.html b/doc/coverage/coverage/modules/lite/CCTCMTATBasePolicyEngine.sol.html new file mode 100644 index 0000000..cf81183 --- /dev/null +++ b/doc/coverage/coverage/modules/lite/CCTCMTATBasePolicyEngine.sol.html @@ -0,0 +1,674 @@ + + + + Code coverage report for modules/lite/CCTCMTATBasePolicyEngine.sol + + + + + + + +
+
+

+ all files / modules/lite/ CCTCMTATBasePolicyEngine.sol +

+
+
+ 95.45% + Statements + 21/22 +
+
+ 69.23% + Branches + 18/26 +
+
+ 84.62% + Functions + 11/13 +
+
+ 95.45% + Lines + 21/22 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +51× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +51× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +51× +  +  +51× +  +  +51× +  +  +51× +  +  +51× +51× +  +  +51× +  +  +  +  +  +  +  +  +  +51× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +233× +233× +88× +  +145× +  +  +  +  +  +  +  +  +  +  +  +  +35× +35× +12× +  +23× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1012× +994× +  +  +  +  +  +  +  +  +6× +  +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {
+    CMTATBaseCommon,
+    CMTATBaseAccessControl
+} from "CMTAT/modules/1_CMTATBaseAccessControl.sol";
+import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol";
+import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol";
+import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol";
+import {IERC1643} from "CMTAT/interfaces/tokenization/draft-IERC1643.sol";
+import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol";
+import {PauseModule} from "CMTAT/modules/wrapper/core/PauseModule.sol";
+import {EnforcementModule} from "CMTAT/modules/wrapper/core/EnforcementModule.sol";
+import {IERC7943FungibleTransferError} from "CMTAT/interfaces/tokenization/draft-IERC7943.sol";
+// Extensions
+import {
+    ERC20EnforcementModule,
+    ERC20EnforcementModuleInternal
+} from "CMTAT/modules/wrapper/extensions/ERC20EnforcementModule.sol";
+ 
+abstract contract CCTCMTATBasePolicyEngine is
+    CMTATBaseAccessControl,
+    ValidationModulePolicyEngine,
+    IERC7943FungibleTransferError
+{
+    /*//////////////////////////////////////////////////////////////
+                         INITIALIZER FUNCTION
+    //////////////////////////////////////////////////////////////*/
+    /**
+     * @notice
+     * initialize the proxy contract
+     * The calls to this function will revert if the contract was deployed without a proxy
+     * @param admin address of the admin of contract (Access Control)
+     * @param ERC20Attributes_ ERC20 name, symbol and decimals
+     * @param extraInformationAttributes_ tokenId, terms, information
+     * @param policyEngine_ address of the policy engine
+     * @dev
+     * If you override the public function initialize,
+     * call inside directly the internal function, not the public one which is protected by the initializer modifier
+     */
+    function initialize(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine_,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) public virtual initializer {
+        _initialize(
+            admin,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine_,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+ 
+    /**
+     * @dev don't call the initializer modifer
+     */
+    function _initialize(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine_,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) internal virtual EonlyInitializing {
+        __CMTAT_init(
+            admin,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine_,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+ 
+    /**
+     * @dev calls the different initialize functions from the different modules
+     */
+    function __CMTAT_init(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine_,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) internal virtual EonlyInitializing {
+        /* OpenZeppelin library */
+        // OZ init_unchained functions are called firstly due to inheritance
+        __Context_init_unchained();
+ 
+        // AccessControlUpgradeable inherits from ERC165Upgradeable
+        __ERC165_init_unchained();
+ 
+        // Openzeppelin
+        __CMTAT_openzeppelin_init_unchained(ERC20Attributes_);
+ 
+        /* Wrapper modules */
+        __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_);
+ 
+        /* Engine modules */
+        __SnapshotEngineModule_init_unchained(snapshotEngine_);
+        __DocumentEngineModule_init_unchained(documentEngine_);
+ 
+        /* Chainlink-ACE policy module */
+        __PolicyProtected_init_unchained(policyEngine_);
+    }
+ 
+    /*
+     * @dev OpenZeppelin
+     */
+    function __CMTAT_openzeppelin_init_unchained(
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_
+    ) internal virtual EonlyInitializing {
+        // Note that the Openzeppelin functions name() and symbol() are overriden in ERC20BaseModule
+        __ERC20_init_unchained(ERC20Attributes_.name, ERC20Attributes_.symbol);
+    }
+ 
+    /*
+     * @dev CMTAT wrapper modules
+     */
+    function __CMTAT_modules_init_unchained(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_
+    ) internal virtual onlyInitializing {
+        __CMTAT_commonModules_init_unchained(admin, ERC20Attributes_, extraInformationAttributes_);
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            PUBLIC/EXTERNAL FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /**
+     * @inheritdoc ValidationModulePolicyEngine
+     */
+    function canTransfer(
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(ValidationModulePolicyEngine) returns (bool) {
+        (bool isValid, ) = ERC20EnforcementModuleInternal._checkActiveBalance(from, value);
+        if (!isValid) {
+            return false;
+        } else {
+            return ValidationModulePolicyEngine.canTransfer(from, to, value);
+        }
+    }
+ 
+    /**
+     * @inheritdoc ValidationModulePolicyEngine
+     */
+    function canTransferFrom(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(ValidationModulePolicyEngine) returns (bool) {
+        (bool isValid, ) = ERC20EnforcementModuleInternal._checkActiveBalance(from, value);
+        if (!isValid) {
+            return false;
+        } else {
+            return ValidationModulePolicyEngine.canTransferFrom(spender, from, to, value);
+        }
+    }
+ 
+    function _authorizeAttachPolicyEngine(address) internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {}
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /* ==== Access Control ==== */
+    function _authorizePause() internal virtual override(PauseModule) onlyRole(PAUSER_ROLE) {}
+    function _authorizeDeactivate() internal virtual override(PauseModule) onlyRole(DEFAULT_ADMIN_ROLE) {}
+ 
+    function _authorizeFreeze() internal virtual override(EnforcementModule) onlyRole(ENFORCER_ROLE) {}
+ 
+    /* ==== Transfer/mint/burn restriction ==== */
+    function _checkTransferred(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon) {
+        CMTATBaseCommon._checkTransferred(spender, from, to, value);
+        require(
+            ValidationModulePolicyEngine._transferred(spender, from, to, value),
+            ERC7943CannotTransfer(from, to, value)
+        );
+    }
+ 
+    function supportsInterface(
+        bytes4 interfaceId
+    ) public view virtual override(CMTATBaseAccessControl, PolicyProtectedUpgradeable) returns (bool) {
+        return
+            CMTATBaseAccessControl.supportsInterface(interfaceId) ||
+            PolicyProtectedUpgradeable.supportsInterface(interfaceId);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/lite/PolicyValidationModuleERC1404.sol.html b/doc/coverage/coverage/modules/lite/PolicyValidationModuleERC1404.sol.html new file mode 100644 index 0000000..f4a71d2 --- /dev/null +++ b/doc/coverage/coverage/modules/lite/PolicyValidationModuleERC1404.sol.html @@ -0,0 +1,440 @@ + + + + Code coverage report for modules/lite/PolicyValidationModuleERC1404.sol + + + + + + + +
+
+

+ all files / modules/lite/ PolicyValidationModuleERC1404.sol +

+
+
+ 100% + Statements + 32/32 +
+
+ 100% + Branches + 26/26 +
+
+ 100% + Functions + 4/4 +
+
+ 100% + Lines + 24/24 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +9× +2× +  +1× +  +1× +  +1× +  +2× +  +1× +  +1× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6× +6× +5× +  +1× +  +  +  +  +  +  +  +  +  +3× +1× +  +2× +2× +1× +  +1× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +7× +1× +  +1× +  +1× +  +2× +  +2× +  +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+/* ==== Tokenization === */
+import {IERC1404, IERC1404Extend} from "CMTAT/interfaces/tokenization/draft-IERC1404.sol";
+import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol";
+ 
+/**
+ * @dev Validation module (ERC-1404)
+ *
+ * Useful to restrict and validate transfers
+ */
+abstract contract PolicyValidationModuleERC1404 is ValidationModuleCore, IERC1404Extend {
+    /* ============ State Variables ============ */
+    string constant TEXT_TRANSFER_OK = "NoRestriction";
+    string constant TEXT_UNKNOWN_CODE = "UnknownCode";
+ 
+    /* EnforcementModule */
+    string internal constant TEXT_TRANSFER_REJECTED_FROM_FROZEN = "AddrFromIsFrozen";
+ 
+    string internal constant TEXT_TRANSFER_REJECTED_TO_FROZEN = "AddrToIsFrozen";
+ 
+    string internal constant TEXT_TRANSFER_REJECTED_SPENDER_FROZEN = "AddrSpenderIsFrozen";
+ 
+    /* PauseModule */
+    string internal constant TEXT_TRANSFER_REJECTED_PAUSED = "EnforcedPause";
+ 
+    /* Contract deactivated */
+    string internal constant TEXT_TRANSFER_REJECTED_DEACTIVATED = "ContractDeactivated";
+ 
+    /*//////////////////////////////////////////////////////////////
+                            PUBLIC/EXTERNAL FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /**
+     * @notice returns the human readable explanation
+     * corresponding to the error code returned by detectTransferRestriction
+     * @param restrictionCode The error code returned by detectTransferRestriction
+     * @return message The human readable explanation corresponding to the error code returned by detectTransferRestriction
+     * @dev see {ERC-1404}
+     */
+    function messageForTransferRestriction(
+        uint8 restrictionCode
+    ) public view virtual override(IERC1404) returns (string memory message) {
+        if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) {
+            return TEXT_TRANSFER_OK;
+        } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_PAUSED)) {
+            return TEXT_TRANSFER_REJECTED_PAUSED;
+        } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_DEACTIVATED)) {
+            return TEXT_TRANSFER_REJECTED_DEACTIVATED;
+        } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_FROZEN)) {
+            return TEXT_TRANSFER_REJECTED_FROM_FROZEN;
+        } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_TO_FROZEN)) {
+            return TEXT_TRANSFER_REJECTED_TO_FROZEN;
+        } else if (restrictionCode == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_SPENDER_FROZEN)) {
+            return TEXT_TRANSFER_REJECTED_SPENDER_FROZEN;
+        } else {
+            return TEXT_UNKNOWN_CODE;
+        }
+    }
+ 
+    /**
+     * @notice check if value token can be transferred from `from` to `to`
+     * @param from address The address which you want to send tokens from
+     * @param to address The address which you want to transfer to
+     * @param value uint256 the amount of tokens to be transferred
+     * @return code of the rejection reason
+     * @dev see {ERC-1404}
+     */
+    function detectTransferRestriction(
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(IERC1404) returns (uint8 code) {
+        uint8 codeReturn = _detectTransferRestriction(from, to, value);
+        if (codeReturn != uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) {
+            return codeReturn;
+        } else {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK);
+        }
+    }
+ 
+    function detectTransferRestrictionFrom(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(IERC1404Extend) returns (uint8 code) {
+        if (isFrozen(spender)) {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_SPENDER_FROZEN);
+        } else {
+            uint8 codeReturn = _detectTransferRestriction(from, to, value);
+            if (codeReturn != uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK)) {
+                return codeReturn;
+            } else {
+                return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK);
+            }
+        }
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+ 
+    /**
+     * @dev override this function to add further restriction
+     */
+    function _detectTransferRestriction(
+        address from,
+        address to,
+        uint256 /* value */
+    ) internal view virtual returns (uint8 code) {
+        if (deactivated()) {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_DEACTIVATED);
+        } else if (paused()) {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_PAUSED);
+        } else if (isFrozen(from)) {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_FROM_FROZEN);
+        } else if (isFrozen(to)) {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_REJECTED_TO_FROZEN);
+        } else {
+            return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK);
+        }
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/lite/ValidationModulePolicyEngine.sol.html b/doc/coverage/coverage/modules/lite/ValidationModulePolicyEngine.sol.html new file mode 100644 index 0000000..946b9d3 --- /dev/null +++ b/doc/coverage/coverage/modules/lite/ValidationModulePolicyEngine.sol.html @@ -0,0 +1,428 @@ + + + + Code coverage report for modules/lite/ValidationModulePolicyEngine.sol + + + + + + + +
+
+

+ all files / modules/lite/ ValidationModulePolicyEngine.sol +

+
+
+ 100% + Statements + 25/25 +
+
+ 100% + Branches + 10/10 +
+
+ 100% + Functions + 8/8 +
+
+ 100% + Lines + 25/25 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +145× +  +  +  +  +  +  +  +  +  +  +  +  +23× +  +  +  +  +  +  +  +145× +39× +  +106× +  +  +  +  +  +  +  +  +  +23× +12× +  +11× +  +  +  +  +  +  +  +  +  +11× +  +  +  +  +  +  +  +106× +  +  +  +118× +118× +117× +117× +  +  +  +  +111× +  +6× +  +  +1× +  +  +  +  +  +  +  +  +  +  +997× +928× +928× +927× +927× +  +  +920× +2× +  +  +921× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol";
+import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol";
+import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
+import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+ 
+abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedUpgradeable {
+    /*//////////////////////////////////////////////////////////////
+                            PUBLIC/EXTERNAL FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+ 
+    /* ============ View functions ============ */
+    /**
+     * @inheritdoc ValidationModuleCore
+     * @dev call the ruleEngine if set
+     */
+    function canTransfer(
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(ValidationModuleCore) returns (bool) {
+        return _canTransfer(from, to, value);
+    }
+ 
+    /**
+     * @inheritdoc ValidationModuleCore
+     * @dev call the ruleEngine if set
+     */
+    function canTransferFrom(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) public view virtual override(ValidationModuleCore) returns (bool) {
+        return _canTransferFrom(spender, from, to, value);
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                            INTERNAL/PRIVATE FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /* ============ View functions ============ */
+    function _canTransfer(address from, address to, uint256 value) internal view virtual returns (bool) {
+        if (!ValidationModuleCore.canTransfer(from, to, value)) {
+            return false;
+        } else {
+            return _canTransferWithPolicyEngine(from, to, value);
+        }
+    }
+ 
+    function _canTransferFrom(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) internal view virtual returns (bool) {
+        if (!ValidationModuleCore.canTransferFrom(spender, from, to, value)) {
+            return false;
+        } else {
+            return _canTransferFromWithPolicyEngine(spender, from, to, value);
+        }
+    }
+ 
+    function _canTransferFromWithPolicyEngine(
+        address spender,
+        address from,
+        address to,
+        uint256 value
+    ) internal view virtual returns (bool) {
+        return _tryCheckPolicies(IERC20.transferFrom.selector, spender, abi.encode(from, to, value));
+    }
+ 
+    function _canTransferWithPolicyEngine(
+        address from,
+        address to,
+        uint256 value
+    ) internal view virtual returns (bool) {
+        return _tryCheckPolicies(IERC20.transfer.selector, from, abi.encode(to, value));
+    }
+ 
+    function _tryCheckPolicies(bytes4 selector, address sender, bytes memory data) internal view returns (bool) {
+        IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine());
+        if (address(policyEngine_) != address(0)) {
+            bytes memory context = getContext();
+            try
+                policyEngine_.check(
+                    IPolicyEngine.Payload({selector: selector, sender: sender, data: data, context: context})
+                )
+            {
+                return true;
+            } catch {
+                return false;
+            }
+        } else {
+            return true;
+        }
+    }
+ 
+    /* ============ State functions ============ */
+    function _transferred(
+        address spender,
+        address from,
+        address to,
+        uint256 /* value */
+    ) internal virtual returns (bool) {
+        _canTransferGenericByModuleAndRevert(spender, from, to);
+        IPolicyEngine policyEngine_ = IPolicyEngine(getPolicyEngine());
+        if (address(policyEngine_) != address(0)) {
+            bytes memory context = getContext();
+            policyEngine_.run(
+                IPolicyEngine.Payload({selector: msg.sig, sender: _msgSender(), data: msg.data[4:], context: context})
+            );
+            if (context.length > 0) {
+                clearContext();
+            }
+        }
+        return true;
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/lite/index.html b/doc/coverage/coverage/modules/lite/index.html new file mode 100644 index 0000000..b5c4260 --- /dev/null +++ b/doc/coverage/coverage/modules/lite/index.html @@ -0,0 +1,145 @@ + + + + Code coverage report for modules/lite/ + + + + + + + +
+
+

+ all files modules/lite/ +

+
+
+ 99.06% + Statements + 105/106 +
+
+ 89.29% + Branches + 75/84 +
+
+ 95.56% + Functions + 43/45 +
+
+ 98.98% + Lines + 97/98 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
CCTCMTATBaseERC1404.sol
100%12/1283.33%5/6100%5/5100%12/12
CCTCMTATBaseERC20CrossChain.sol
100%15/15100%16/16100%15/15100%15/15
CCTCMTATBasePolicyEngine.sol
95.45%21/2269.23%18/2684.62%11/1395.45%21/22
PolicyValidationModuleERC1404.sol
100%32/32100%26/26100%4/4100%24/24
ValidationModulePolicyEngine.sol
100%25/25100%10/10100%8/8100%25/25
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/standard/CCTCommon.sol.html b/doc/coverage/coverage/modules/standard/CCTCommon.sol.html new file mode 100644 index 0000000..cc6db7a --- /dev/null +++ b/doc/coverage/coverage/modules/standard/CCTCommon.sol.html @@ -0,0 +1,1055 @@ + + + + Code coverage report for modules/standard/CCTCommon.sol + + + + + + + +
+
+

+ all files / modules/standard/ CCTCommon.sol +

+
+
+ 95.83% + Statements + 23/24 +
+
+ 84.09% + Branches + 37/44 +
+
+ 96.55% + Functions + 28/29 +
+
+ 95.83% + Lines + 23/24 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +12× +  +  +12× +  +  +12× +  +  +12× +  +12× +  +  +12× +  +  +12× +12× +  +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +12× +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +48× +  +  +  +  +  +  +  +  +  +12× +  +  +  +  +  +  +  +  +  +  +9× +  +  +  +  +  +  +13× +  +  +  +  +  +  +10× +  +  +  +  +  +9× +  +  +  +  +  +  +  +  +  +  +  +  +376× +  +  +  +  +  +  +  +  +  +48× +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +478× +  +  + 
// SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+/* ==== OpenZeppelin === */
+import {IERC165} from "@openzeppelin/contracts/interfaces/IERC165.sol";
+import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
+import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
+ 
+/* ==== CMTAT === */
+import {CMTATBaseCommon} from "CMTAT/modules/0_CMTATBaseCommon.sol";
+/* = Base = */
+/* = Core = */
+import {
+    ERC20BurnModule,
+    ERC20BurnModuleInternal
+} from "CMTAT/modules/wrapper/core/ERC20BurnModule.sol";
+import {
+    ERC20MintModule,
+    ERC20MintModuleInternal
+} from "CMTAT/modules/wrapper/core/ERC20MintModule.sol";
+import {ERC20BaseModule} from "CMTAT/modules/wrapper/core/ERC20BaseModule.sol";
+/* = Option & Extension = */
+import {ERC20CrossChainModule} from "CMTAT/modules/wrapper/options/ERC20CrossChainModule.sol";
+import {CCIPModule} from "CMTAT/modules/wrapper/options/CCIPModule.sol";
+import {ExtraInformationModule} from "CMTAT/modules/wrapper/extensions/ExtraInformationModule.sol";
+import {
+    ERC20EnforcementModule,
+    ERC20EnforcementModuleInternal
+} from "CMTAT/modules/wrapper/extensions/ERC20EnforcementModule.sol";
+import {
+    DocumentEngineModule,
+    IERC1643
+} from "CMTAT/modules/wrapper/extensions/DocumentEngineModule.sol";
+import {SnapshotEngineModule} from "CMTAT/modules/wrapper/extensions/SnapshotEngineModule.sol";
+/* = Interface = */
+import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol";
+import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol";
+/* ==== Chainlink ACE === */
+import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol";
+ 
+abstract contract CCTCommon is
+    OwnableUpgradeable,
+    ERC20CrossChainModule,
+    PolicyProtectedUpgradeable,
+    CMTATBaseCommon,
+    CCIPModule
+{
+    function initialize(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) public virtual initializer {
+        _initialize(
+            admin,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+ 
+    function _initialize(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_,
+        address policyEngine,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) internal virtual EonlyInitializing {
+        __CMTAT_init(
+            admin,
+            ERC20Attributes_,
+            extraInformationAttributes_,
+            policyEngine,
+            snapshotEngine_,
+            documentEngine_
+        );
+    }
+ 
+    /**
+     * @dev calls the different initialize functions from the different modules
+     */
+    function __CMTAT_init(
+        address admin,
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationAttributes_,
+        address policyEngine,
+        ISnapshotEngine snapshotEngine_,
+        IERC1643 documentEngine_
+    ) internal virtual EonlyInitializing {
+        __Ownable_init_unchained(admin);
+        /* OpenZeppelin library */
+        // OZ init_unchained functions are called firstly due to inheritance
+        __Context_init_unchained();
+ 
+        // AccessControlUpgradeable inherits from ERC165Upgradeable
+        __ERC165_init_unchained();
+ 
+        // Openzeppelin
+        __CMTAT_openzeppelin_init_unchained(ERC20Attributes_);
+ 
+        __PolicyProtected_init_unchained(policyEngine);
+ 
+        /* Wrapper modules */
+        __CMTAT_modules_init_unchained(ERC20Attributes_, ExtraInformationAttributes_);
+ 
+        /* Engine modules */
+        __SnapshotEngineModule_init_unchained(snapshotEngine_);
+        __DocumentEngineModule_init_unchained(documentEngine_);
+    }
+ 
+    /*
+     * @dev OpenZeppelin
+     */
+    function __CMTAT_openzeppelin_init_unchained(
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_
+    ) internal virtual EonlyInitializing {
+        // Note that the Openzeppelin functions name() and symbol() are overriden in ERC20BaseModule
+        __ERC20_init_unchained(ERC20Attributes_.name, ERC20Attributes_.symbol);
+    }
+ 
+    /*
+     * @dev CMTAT wrapper modules
+     */
+    function __CMTAT_modules_init_unchained(
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory extraInformationAttributes_
+    ) internal virtual EonlyInitializing {
+        __CMTAT_commonModules_init_unchained(ERC20Attributes_, extraInformationAttributes_);
+    }
+ 
+    function __CMTAT_commonModules_init_unchained(
+        ICMTATConstructor.ERC20Attributes memory ERC20Attributes_,
+        ICMTATConstructor.ExtraInformationAttributes memory ExtraInformationModuleAttributes_
+    ) internal virtual EonlyInitializing {
+        // Core
+        __ERC20BaseModule_init_unchained(
+            ERC20Attributes_.decimalsIrrevocable,
+            ERC20Attributes_.name,
+            ERC20Attributes_.symbol
+        );
+        /* Extensions */
+        __ExtraInformationModule_init_unchained(
+            ExtraInformationModuleAttributes_.tokenId,
+            ExtraInformationModuleAttributes_.terms,
+            ExtraInformationModuleAttributes_.information
+        );
+    }
+ 
+    /*//////////////////////////////////////////////////////////////
+                        PUBLIC/EXTERNAL FUNCTIONS
+    //////////////////////////////////////////////////////////////*/
+    /* ============  State Functions ============ */
+    function transfer(
+        address to,
+        uint256 value
+    ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) ErunPolicy returns (bool) {
+        return CMTATBaseCommon.transfer(to, value);
+    }
+    /*
+     * @inheritdoc ERC20BaseModule
+     */
+    function transferFrom(
+        address from,
+        address to,
+        uint256 value
+    ) public virtual override(ERC20Upgradeable, CMTATBaseCommon) ErunPolicy returns (bool) {
+        return CMTATBaseCommon.transferFrom(from, to, value);
+    }
+ 
+    function _authorizeAttachPolicyEngine(address) internal virtual override onlyOwner {}
+ 
+    /* ============ View functions ============ */
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function decimals() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (uint8) {
+        return CMTATBaseCommon.decimals();
+    }
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function name() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) {
+        return CMTATBaseCommon.name();
+    }
+ 
+    /**
+     * @inheritdoc CMTATBaseCommon
+     */
+    function symbol() public view virtual override(ERC20Upgradeable, CMTATBaseCommon) returns (string memory) {
+        return CMTATBaseCommon.symbol();
+    }
+ 
+    function supportsInterface(
+        bytes4 _interfaceId
+    ) public view virtual override(IERC165, ERC20CrossChainModule, PolicyProtectedUpgradeable) returns (bool) {
+        return
+            ERC20CrossChainModule.supportsInterface(_interfaceId) ||
+            PolicyProtectedUpgradeable.supportsInterface(_interfaceId);
+    }
+ 
+    /* ==== Mint and Burn Operations ==== */
+    /**
+     * @dev Check if the mint is valid
+     */
+    function _mintOverride(
+        address account,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) {
+        CMTATBaseCommon._mintOverride(account, value);
+    }
+ 
+    /**
+     * @dev Check if the burn is valid
+     */
+    function _burnOverride(
+        address account,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20BurnModuleInternal) {
+        CMTATBaseCommon._burnOverride(account, value);
+    }
+ 
+    /**
+     * @dev Check if a minter transfer is valid
+     */
+    function _minterTransferOverride(
+        address from,
+        address to,
+        uint256 value
+    ) internal virtual override(CMTATBaseCommon, ERC20MintModuleInternal) {
+        CMTATBaseCommon._minterTransferOverride(from, to, value);
+    }
+ 
+    /* ==== Access Control Functions ==== */
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `DEFAULT_ADMIN_ROLE`.
+     */
+    function _authorizeERC20AttributeManagement() internal virtual override(ERC20BaseModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `MINTER_ROLE`.
+     */
+    function _authorizeMint() internal virtual override(ERC20MintModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - The caller must have the `BURNER_ROLE`.
+     */
+    function _authorizeBurn() internal virtual override(ERC20BurnModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `DOCUMENT_ROLE`.
+     */
+    function _authorizeDocumentManagement() internal virtual override(DocumentEngineModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `EXTRA_INFORMATION_ROLE`.
+     */
+    function _authorizeExtraInfoManagement() internal virtual override(ExtraInformationModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `ERC20ENFORCER_ROLE`.
+     */
+    function _authorizeERC20Enforcer() internal virtual override(ERC20EnforcementModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `DEFAULT_ADMIN_ROLE`.
+     */
+    function _authorizeForcedTransfer() internal virtual override(ERC20EnforcementModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `SNAPSHOOTER_ROLE`.
+     */
+    function _authorizeSnapshots() internal virtual override(SnapshotEngineModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `DEFAULT_ADMIN_ROLE`.
+     */
+    function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) runPolicy {}
+ 
+    /**
+     * @dev
+     * A cross-chain bridge could call the OpenZeppelin function `renounceRole` to lose their privileges (CROSS_CHAIN_ROLE)
+     * While it is not intended,this has no other effect than depriving the bridge of burn/mint tokens
+     * An attacker could use this to disrupt minting/burning if they can get the bridge to execute calls.
+     * However, in this case, the bridge should still be considered compromised and not used again.
+     * @custom:access-control
+     * - the caller must have the `CROSS_CHAIN_ROLE`.
+     */
+    function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `BURNER_FROM_ROLE`.
+     * - We don't allow token holder to burn their own tokens if they don't have this role.
+     */
+    function _authorizeBurnFrom() internal virtual override(ERC20CrossChainModule) runPolicy {}
+ 
+    /**
+     * @custom:access-control
+     * - the caller must have the `BURNER_ROLE`.
+     * - We don't allow token holder to burn their own tokens if they don't have this role.
+     */
+    function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) runPolicy {}
+ 
+    /* ==== ERC-20 OpenZeppelin ==== */
+    function _update(
+        address from,
+        address to,
+        uint256 amount
+    ) internal virtual override(ERC20Upgradeable, CMTATBaseCommon) {
+        return CMTATBaseCommon._update(from, to, amount);
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/modules/standard/index.html b/doc/coverage/coverage/modules/standard/index.html new file mode 100644 index 0000000..d4afee4 --- /dev/null +++ b/doc/coverage/coverage/modules/standard/index.html @@ -0,0 +1,93 @@ + + + + Code coverage report for modules/standard/ + + + + + + + +
+
+

+ all files modules/standard/ +

+
+
+ 95.83% + Statements + 23/24 +
+
+ 84.09% + Branches + 37/44 +
+
+ 96.55% + Functions + 28/29 +
+
+ 95.83% + Lines + 23/24 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
CCTCommon.sol
95.83%23/2484.09%37/4496.55%28/2995.83%23/24
+
+
+ + + + + + + diff --git a/doc/coverage/coverage/prettify.css b/doc/coverage/coverage/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/doc/coverage/coverage/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/doc/coverage/coverage/prettify.js b/doc/coverage/coverage/prettify.js new file mode 100644 index 0000000..ef51e03 --- /dev/null +++ b/doc/coverage/coverage/prettify.js @@ -0,0 +1 @@ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/doc/coverage/coverage/sort-arrow-sprite.png b/doc/coverage/coverage/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..03f704a609c6fd0dbfdac63466a7d7c958b5cbf3 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function (a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function (a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function () { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i =0 ; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function () { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(cols); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); From 5c4448836c99819e9f6cea558bc125a4d33f9592 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Tue, 12 May 2026 15:55:53 +0200 Subject: [PATCH 51/57] Add mock contracts for testing purpose --- .../mocks/PolicyProtectedUpgradeableMocks.sol | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol diff --git a/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol b/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol new file mode 100644 index 0000000..67fe1b4 --- /dev/null +++ b/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol @@ -0,0 +1,128 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.20; + +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; +import {PolicyProtectedUpgradeable} from "../modified/PolicyProtectedUpgradeable.sol"; +import {ValidationModulePolicyEngine} from "../../lite/ValidationModulePolicyEngine.sol"; + +contract MockPolicyEngine is IPolicyEngine { + Payload public lastPayload; + uint256 public attachCalls; + uint256 public detachCalls; + bool public detachShouldRevert; + + function setDetachShouldRevert(bool value) external { + detachShouldRevert = value; + } + + function typeAndVersion() external pure override returns (string memory) { + return "MockPolicyEngine 1.0.0"; + } + + function attach() external override { + attachCalls++; + } + + function detach() external override { + detachCalls++; + if (detachShouldRevert) { + revert("MockPolicyEngine: detach failed"); + } + } + + function run(Payload calldata payload) external override { + lastPayload = payload; + } + + function check(Payload calldata) external pure override {} + + function setExtractor(bytes4, address) external pure override {} + + function setExtractors(bytes4[] calldata, address) external pure override {} + + function getExtractor(bytes4) external pure override returns (address) { + return address(0); + } + + function setPolicyMapper(address, address) external pure override {} + + function getPolicyMapper(address) external pure override returns (address) { + return address(0); + } + + function addPolicy(address, bytes4, address, bytes32[] calldata) external pure override {} + + function addPolicyAt(address, bytes4, address, bytes32[] calldata, uint256) external pure override {} + + function removePolicy(address, bytes4, address) external pure override {} + + function getPolicies(address, bytes4) external pure override returns (address[] memory) { + return new address[](0); + } + + function setPolicyConfiguration(address, uint256, bytes4, bytes calldata) external pure override {} + + function getPolicyConfigVersion(address) external pure override returns (uint256) { + return 0; + } + + function setDefaultPolicyAllow(bool) external pure override {} + + function setTargetDefaultPolicyAllow(address, bool) external pure override {} +} + +contract PolicyProtectedUpgradeableHarness is Initializable, PolicyProtectedUpgradeable { + uint256 public counter; + + error ForcedRevert(); + + function initialize(address policyEngine) external initializer { + __PolicyProtected_init(policyEngine); + } + + function _authorizeAttachPolicyEngine(address) internal pure override {} + + function guardedRun() external runPolicy { + counter += 1; + } + + function guardedRunWithContext(bytes calldata context) external runPolicyWithContext(context) { + counter += 1; + } + + function guardedRunAndRevert() external runPolicy { + revert ForcedRevert(); + } +} + +contract ValidationModulePolicyEngineHarness is Initializable, ValidationModulePolicyEngine { + function initializeWithPolicyEngine(address policyEngine) external initializer { + __PolicyProtected_init(policyEngine); + } + + function _authorizeAttachPolicyEngine(address) internal pure override {} + + function _authorizePause() internal pure override {} + + function _authorizeDeactivate() internal pure override {} + + function _authorizeFreeze() internal pure override {} + + function exposedTryCheckPolicies( + bytes4 selector, + address sender, + bytes calldata data + ) external view returns (bool) { + return _tryCheckPolicies(selector, sender, data); + } + + function exposedTransferred( + address spender, + address from, + address to, + uint256 value + ) external returns (bool) { + return _transferred(spender, from, to, value); + } +} From ce1ab80ce70ebbae5ef550c23ff10e23330db07f Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Tue, 12 May 2026 15:56:10 +0200 Subject: [PATCH 52/57] Update gitignore --- .gitignore | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.gitignore b/.gitignore index f4b7137..da48275 100644 --- a/.gitignore +++ b/.gitignore @@ -22,10 +22,6 @@ pids # Directory for instrumented libs generated by jscoverage/JSCover lib-cov -# Coverage directory used by tools like istanbul -coverage -*.lcov - # nyc test coverage .nyc_output @@ -156,10 +152,6 @@ node_modules /typechain /typechain-types -# solidity-coverage files -/coverage -/coverage.json - # Hardhat Ignition default folder for deployments against a local node ignition/deployments/chain-31337 From fa8d2c9084e16d03a72c7a165fa5f735e2d6bb52 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Tue, 12 May 2026 15:59:06 +0200 Subject: [PATCH 53/57] Update readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f644eb8..b6f1822 100644 --- a/README.md +++ b/README.md @@ -276,7 +276,9 @@ This allows integrators and tooling to programmatically verify interface compati ## Library - CMTAT [v3.2.0](https://github.com/CMTA/CMTAT/releases/tag/v3.2.0) -- Chainlink ACE ^1.0.0 +- Chainlink ACE `1.0.0` +- OpenZeppelin Contracts `5.6.1` +- OpenZeppelin Contracts Upgradeable `5.6.1` ## Initialize submodules From 26f0d7c43f413b2358fe889e8530fbbe30494f70 Mon Sep 17 00:00:00 2001 From: Ryan Sauge <71391932+rya-sge@users.noreply.github.com> Date: Sun, 24 May 2026 00:21:53 +0200 Subject: [PATCH 54/57] Add Changelog --- CHANGELOG.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c64ffee --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,45 @@ +# CHANGELOG + +All notable changes to this project will be documented in this file. + +Please follow [https://changelog.md](https://changelog.md) conventions and the other conventions below + +## Semantic Version 2.0.0 + +Given a version number MAJOR.MINOR.PATCH, increment the: + +1. MAJOR version when the new version makes: + - Incompatible proxy **storage** change internally or through the upgrade of an external library (OpenZeppelin) + - A significant change in external APIs (public/external functions) or in the internal architecture +2. MINOR version when the new version adds functionality in a backward compatible manner +3. PATCH version when the new version makes backward compatible bug fixes + +See [https://semver.org](https://semver.org) + +## Type of changes + +- `Added` for new features. +- `Changed` for changes in existing functionality. +- `Deprecated` for soon-to-be removed features. +- `Removed` for now removed features. +- `Fixed` for any bug fixes. +- `Security` in case of vulnerabilities. + +Reference: [keepachangelog.com/en/1.1.0/](https://keepachangelog.com/en/1.1.0/) + +Custom changelog tag: `Dependencies`, `Documentation`, `Testing` + +## [0.1.0] - + +### Added +- Initial release of **CMTAT-ACE**, integrating CMTAT modules with Chainlink ACE PolicyEngine. +- Two deployment variants: + - **Standard**: policy-authoritative access and compliance through ACE `runPolicy`. + - **Lite**: CMTAT role-based module access control with ACE-based transfer validation. +- Core tokenization and compliance modules under: + - `contracts/modules/standard/` + - `contracts/modules/lite/` + - `contracts/modules/chainlink-ace/custom/` + - `contracts/modules/chainlink-ace/modified/` +- Deployment flows for standalone, upgradeable, and UUPS variants. +- Automated test suite covering deployment, policy integration, and transfer validation behavior. From a717708355f6cede3b36e29290dac89d46ca2a48 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Mon, 15 Jun 2026 14:06:53 +0100 Subject: [PATCH 55/57] Fix input parameter validation on transfer policy --- .../custom/TransferValidationPolicy.sol | 11 ++- test/custom/transferValidationPolicy.test.js | 73 +++++++++++++++++++ 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol index e892fd2..7cffce4 100644 --- a/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol +++ b/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; import {Policy} from "@chainlink/policy-management/core/Policy.sol"; import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; -import {IRule} from "../../../../submodules/RuleEngine/src/interfaces/IRule.sol"; +import {IRule} from "CMTAT/mocks/RuleEngine/interfaces/IRule.sol"; /** * @title TransferValidationPolicy @@ -23,6 +23,8 @@ import {IRule} from "../../../../submodules/RuleEngine/src/interfaces/IRule.sol" * the policy reverts with PolicyRejected containing the rule's message. */ contract TransferValidationPolicy is Policy { + error InvalidParametersLength(uint256 length); + string public constant override typeAndVersion = "TransferValidationPolicy 1.0.0"; event RulesUpdated(uint256 previousCount, uint256 newCount); @@ -101,7 +103,7 @@ contract TransferValidationPolicy is Policy { TransferValidationStorage storage $ = _getStorage(); uint256 len = $.rules.length; - if (parameters.length >= 4) { + if (parameters.length == 4) { // ERC20TransferFromExtractor layout: [spender, from, to, amount] address spender = abi.decode(parameters[0], (address)); address from = abi.decode(parameters[1], (address)); @@ -115,7 +117,7 @@ contract TransferValidationPolicy is Policy { revert IPolicyEngine.PolicyRejected(message); } } - } else { + } else if (parameters.length == 3) { // ERC20TransferExtractor layout: [from, to, amount] address from = abi.decode(parameters[0], (address)); address to = abi.decode(parameters[1], (address)); @@ -128,6 +130,9 @@ contract TransferValidationPolicy is Policy { revert IPolicyEngine.PolicyRejected(message); } } + } else { + // This should never happen due to the initial length check, but included for completeness + revert InvalidParametersLength(parameters.length); } return IPolicyEngine.PolicyResult.Continue; diff --git a/test/custom/transferValidationPolicy.test.js b/test/custom/transferValidationPolicy.test.js index 0a813a6..36dd18b 100644 --- a/test/custom/transferValidationPolicy.test.js +++ b/test/custom/transferValidationPolicy.test.js @@ -483,6 +483,79 @@ describe('TransferValidationPolicy', function () { ), ).to.be.reverted; }); + + it('reverts with InvalidParametersLength when run() has 0 parameters', async function () { + const params = []; + + await expect( + this.transferPolicy.run( + this.admin.address, + this.cmtatAddress, + this.transferSelector, + params, + '0x', + ), + ) + .to.be.revertedWithCustomError(this.transferPolicy, 'InvalidParametersLength') + .withArgs(0n); + }); + + it('reverts with InvalidParametersLength when run() has 1 parameter', async function () { + const params = [ethers.AbiCoder.defaultAbiCoder().encode(['address'], [this.admin.address])]; + + await expect( + this.transferPolicy.run( + this.admin.address, + this.cmtatAddress, + this.transferSelector, + params, + '0x', + ), + ) + .to.be.revertedWithCustomError(this.transferPolicy, 'InvalidParametersLength') + .withArgs(1n); + }); + + it('reverts with InvalidParametersLength when run() has 2 parameters', async function () { + const params = [ + ethers.AbiCoder.defaultAbiCoder().encode(['address'], [this.admin.address]), + ethers.AbiCoder.defaultAbiCoder().encode(['address'], [this.address1.address]), + ]; + + await expect( + this.transferPolicy.run( + this.admin.address, + this.cmtatAddress, + this.transferSelector, + params, + '0x', + ), + ) + .to.be.revertedWithCustomError(this.transferPolicy, 'InvalidParametersLength') + .withArgs(2n); + }); + + it('reverts with InvalidParametersLength when run() has 5 parameters', async function () { + const params = [ + ethers.AbiCoder.defaultAbiCoder().encode(['address'], [this.admin.address]), + ethers.AbiCoder.defaultAbiCoder().encode(['address'], [this.address1.address]), + ethers.AbiCoder.defaultAbiCoder().encode(['uint256'], [50n]), + ethers.AbiCoder.defaultAbiCoder().encode(['address'], [this.address2.address]), + ethers.AbiCoder.defaultAbiCoder().encode(['uint256'], [1n]), + ]; + + await expect( + this.transferPolicy.run( + this.admin.address, + this.cmtatAddress, + this.transferSelector, + params, + '0x', + ), + ) + .to.be.revertedWithCustomError(this.transferPolicy, 'InvalidParametersLength') + .withArgs(5n); + }); }); describe('No policy attached (defaultAllow = true)', function () { From c7a5863f4ceaecba948248814ebd1a89768f5c53 Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Mon, 15 Jun 2026 15:14:10 +0100 Subject: [PATCH 56/57] Integrate Chainlink-ACE v1.1.1 into CMTAT, update tests, update generated static scan reports and coverage, update docs --- .eslintignore | 6 - .eslintrc.json | 18 - .prettierignore | 1 + .solcover.js | 13 + README.md | 150 +-- .../MintBurnExtractor.sol | 5 +- .../mocks/PolicyProtectedUpgradeableMocks.sol | 39 +- .../modified/PolicyProtectedUpgradeable.sol | 129 -- contracts/modules/demo/DemoImports.sol | 15 - .../modules/lite/CCTCMTATBaseERC1404.sol | 5 +- .../lite/CCTCMTATBaseERC20CrossChain.sol | 10 +- .../modules/lite/CCTCMTATBasePolicyEngine.sol | 13 +- .../lite/ValidationModulePolicyEngine.sol | 8 +- contracts/modules/standard/CCTCommon.sol | 25 +- doc/audits/tools/aderyn-report-feedback.md | 38 +- doc/audits/tools/aderyn-report.md | 458 +++---- doc/audits/tools/slither-report-feedback.md | 26 +- doc/audits/tools/slither-report.md | 215 +--- doc/coverage/{coverage => }/base.css | 0 doc/coverage/coverage-final.json | 17 + doc/coverage/coverage/coverage-final.json | 20 - .../PolicyProtectedUpgradeable.sol.html | 452 ------- .../modules/chainlink-ace/modified/index.html | 106 -- .../modules/demo/DemoImports.sol.html | 110 -- .../lcov-report/modules/demo/index.html | 93 -- .../PolicyProtectedUpgradeable.sol.html | 452 ------- .../modules/chainlink-ace/modified/index.html | 106 -- .../modules/demo/DemoImports.sol.html | 110 -- doc/coverage/coverage/modules/demo/index.html | 93 -- ...omplianceTokenCMTATLiteStandalone.sol.html | 4 +- ...anceTokenCMTATLiteUUPSUpgradeable.sol.html | 2 +- ...mplianceTokenCMTATLiteUpgradeable.sol.html | 2 +- .../deployment/lite/index.html | 2 +- .../ComplianceTokenCMTATStandalone.sol.html | 2 +- ...mplianceTokenCMTATUUPSUpgradeable.sol.html | 2 +- .../ComplianceTokenCMTATUpgradeable.sol.html | 2 +- .../deployment/standard/index.html | 2 +- doc/coverage/{coverage => }/index.html | 72 +- .../{coverage => }/lcov-report/base.css | 0 ...omplianceTokenCMTATLiteStandalone.sol.html | 4 +- ...anceTokenCMTATLiteUUPSUpgradeable.sol.html | 2 +- ...mplianceTokenCMTATLiteUpgradeable.sol.html | 2 +- .../deployment/lite/index.html | 2 +- .../ComplianceTokenCMTATStandalone.sol.html | 2 +- ...mplianceTokenCMTATUUPSUpgradeable.sol.html | 2 +- .../ComplianceTokenCMTATUpgradeable.sol.html | 2 +- .../deployment/standard/index.html | 2 +- .../{coverage => }/lcov-report/index.html | 72 +- .../ERC20TransferFromExtractor.sol.html | 2 +- .../custom}/MintBurnExtractor.sol.html | 6 +- .../custom/TransferValidationPolicy.sol.html | 50 +- .../modules/chainlink-ace/custom/index.html | 35 +- .../PolicyProtectedUpgradeableMocks.sol.html | 127 +- .../mocks/TransferRuleMocks.sol.html | 6 +- .../modules/chainlink-ace/mocks/index.html | 29 +- .../modules/lite/CCTCMTATBaseERC1404.sol.html | 11 +- .../lite/CCTCMTATBaseERC20CrossChain.sol.html | 8 +- .../lite/CCTCMTATBasePolicyEngine.sol.html | 34 +- .../PolicyValidationModuleERC1404.sol.html | 2 +- .../ValidationModulePolicyEngine.sol.html | 24 +- .../lcov-report/modules/lite/index.html | 2 +- .../modules/standard/CCTCommon.sol.html | 12 +- .../modules/standard/index.html | 2 +- .../{coverage => }/lcov-report/prettify.css | 0 .../{coverage => }/lcov-report/prettify.js | 0 .../lcov-report/sort-arrow-sprite.png | Bin .../{coverage => }/lcov-report/sorter.js | 0 doc/coverage/{coverage => }/lcov.info | 520 +++----- .../ERC20TransferFromExtractor.sol.html | 2 +- .../custom}/MintBurnExtractor.sol.html | 6 +- .../custom/TransferValidationPolicy.sol.html | 50 +- .../modules/chainlink-ace/custom/index.html | 35 +- .../PolicyProtectedUpgradeableMocks.sol.html | 127 +- .../mocks/TransferRuleMocks.sol.html | 6 +- .../modules/chainlink-ace/mocks/index.html | 29 +- .../modules/lite/CCTCMTATBaseERC1404.sol.html | 11 +- .../lite/CCTCMTATBaseERC20CrossChain.sol.html | 8 +- .../lite/CCTCMTATBasePolicyEngine.sol.html | 34 +- .../PolicyValidationModuleERC1404.sol.html | 2 +- .../ValidationModulePolicyEngine.sol.html | 24 +- .../{coverage => }/modules/lite/index.html | 2 +- .../modules/standard/CCTCommon.sol.html | 12 +- .../modules/standard/index.html | 2 +- doc/coverage/{coverage => }/prettify.css | 0 doc/coverage/{coverage => }/prettify.js | 0 .../{coverage => }/sort-arrow-sprite.png | Bin doc/coverage/{coverage => }/sorter.js | 0 eslint.config.js | 54 + hardhat.config.js | 15 +- package-lock.json | 1056 +++++++++++------ package.json | 11 +- scripts/slither.sh | 21 +- slither.config.json | 2 +- .../erc1404ValidationAndExtractor.test.js | 22 +- .../custom/policyProtectedUpgradeable.test.js | 131 -- 95 files changed, 1695 insertions(+), 3750 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json create mode 100644 .solcover.js rename contracts/modules/chainlink-ace/{modified => custom}/MintBurnExtractor.sol (89%) delete mode 100644 contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol delete mode 100644 contracts/modules/demo/DemoImports.sol rename doc/coverage/{coverage => }/base.css (100%) create mode 100644 doc/coverage/coverage-final.json delete mode 100644 doc/coverage/coverage/coverage-final.json delete mode 100644 doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html delete mode 100644 doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/index.html delete mode 100644 doc/coverage/coverage/lcov-report/modules/demo/DemoImports.sol.html delete mode 100644 doc/coverage/coverage/lcov-report/modules/demo/index.html delete mode 100644 doc/coverage/coverage/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html delete mode 100644 doc/coverage/coverage/modules/chainlink-ace/modified/index.html delete mode 100644 doc/coverage/coverage/modules/demo/DemoImports.sol.html delete mode 100644 doc/coverage/coverage/modules/demo/index.html rename doc/coverage/{coverage => }/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html (97%) rename doc/coverage/{coverage/lcov-report => }/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html (98%) rename doc/coverage/{coverage/lcov-report => }/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html (97%) rename doc/coverage/{coverage/lcov-report => }/deployment/lite/index.html (98%) rename doc/coverage/{coverage/lcov-report => }/deployment/standard/ComplianceTokenCMTATStandalone.sol.html (98%) rename doc/coverage/{coverage => }/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html (98%) rename doc/coverage/{coverage/lcov-report => }/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html (97%) rename doc/coverage/{coverage/lcov-report => }/deployment/standard/index.html (98%) rename doc/coverage/{coverage => }/index.html (68%) rename doc/coverage/{coverage => }/lcov-report/base.css (100%) rename doc/coverage/{coverage => }/lcov-report/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html (97%) rename doc/coverage/{coverage => lcov-report}/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html (98%) rename doc/coverage/{coverage => lcov-report}/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html (97%) rename doc/coverage/{coverage => lcov-report}/deployment/lite/index.html (98%) rename doc/coverage/{coverage => lcov-report}/deployment/standard/ComplianceTokenCMTATStandalone.sol.html (98%) rename doc/coverage/{coverage => }/lcov-report/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html (98%) rename doc/coverage/{coverage => lcov-report}/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html (97%) rename doc/coverage/{coverage => lcov-report}/deployment/standard/index.html (98%) rename doc/coverage/{coverage => }/lcov-report/index.html (68%) rename doc/coverage/{coverage => }/lcov-report/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html (98%) rename doc/coverage/{coverage/lcov-report/modules/chainlink-ace/modified => lcov-report/modules/chainlink-ace/custom}/MintBurnExtractor.sol.html (96%) rename doc/coverage/{coverage => }/lcov-report/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html (91%) rename doc/coverage/{coverage => lcov-report}/modules/chainlink-ace/custom/index.html (75%) rename doc/coverage/{coverage => }/lcov-report/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html (76%) rename doc/coverage/{coverage => lcov-report}/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html (98%) rename doc/coverage/{coverage => lcov-report}/modules/chainlink-ace/mocks/index.html (74%) rename doc/coverage/{coverage => }/lcov-report/modules/lite/CCTCMTATBaseERC1404.sol.html (96%) rename doc/coverage/{coverage => }/lcov-report/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html (98%) rename doc/coverage/{coverage => lcov-report}/modules/lite/CCTCMTATBasePolicyEngine.sol.html (95%) rename doc/coverage/{coverage => lcov-report}/modules/lite/PolicyValidationModuleERC1404.sol.html (99%) rename doc/coverage/{coverage => }/lcov-report/modules/lite/ValidationModulePolicyEngine.sol.html (95%) rename doc/coverage/{coverage => }/lcov-report/modules/lite/index.html (98%) rename doc/coverage/{coverage => }/lcov-report/modules/standard/CCTCommon.sol.html (98%) rename doc/coverage/{coverage => lcov-report}/modules/standard/index.html (97%) rename doc/coverage/{coverage => }/lcov-report/prettify.css (100%) rename doc/coverage/{coverage => }/lcov-report/prettify.js (100%) rename doc/coverage/{coverage => }/lcov-report/sort-arrow-sprite.png (100%) rename doc/coverage/{coverage => }/lcov-report/sorter.js (100%) rename doc/coverage/{coverage => }/lcov.info (59%) rename doc/coverage/{coverage => }/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html (98%) rename doc/coverage/{coverage/modules/chainlink-ace/modified => modules/chainlink-ace/custom}/MintBurnExtractor.sol.html (96%) rename doc/coverage/{coverage => }/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html (91%) rename doc/coverage/{coverage/lcov-report => }/modules/chainlink-ace/custom/index.html (75%) rename doc/coverage/{coverage => }/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html (76%) rename doc/coverage/{coverage/lcov-report => }/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html (98%) rename doc/coverage/{coverage/lcov-report => }/modules/chainlink-ace/mocks/index.html (74%) rename doc/coverage/{coverage => }/modules/lite/CCTCMTATBaseERC1404.sol.html (96%) rename doc/coverage/{coverage => }/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html (98%) rename doc/coverage/{coverage/lcov-report => }/modules/lite/CCTCMTATBasePolicyEngine.sol.html (95%) rename doc/coverage/{coverage/lcov-report => }/modules/lite/PolicyValidationModuleERC1404.sol.html (99%) rename doc/coverage/{coverage => }/modules/lite/ValidationModulePolicyEngine.sol.html (95%) rename doc/coverage/{coverage => }/modules/lite/index.html (98%) rename doc/coverage/{coverage => }/modules/standard/CCTCommon.sol.html (98%) rename doc/coverage/{coverage/lcov-report => }/modules/standard/index.html (97%) rename doc/coverage/{coverage => }/prettify.css (100%) rename doc/coverage/{coverage => }/prettify.js (100%) rename doc/coverage/{coverage => }/sort-arrow-sprite.png (100%) rename doc/coverage/{coverage => }/sorter.js (100%) create mode 100644 eslint.config.js delete mode 100644 test/custom/policyProtectedUpgradeable.test.js diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 8d13358..0000000 --- a/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules/ -submodules/ -artifacts/ -cache_hardhat/ -typechain-types/ -cct/ diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index f6aa39a..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "env": { - "commonjs": true, - "es2021": true, - "mocha": true, - "node": true - }, - "extends": ["eslint:recommended", "prettier"], - "globals": { - "ethers": "readonly" - }, - "parserOptions": { - "ecmaVersion": "latest" - }, - "rules": { - "no-unused-vars": ["warn", { "argsIgnorePattern": "^_" }] - } -} diff --git a/.prettierignore b/.prettierignore index 8a817cd..49e5e1c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,3 +3,4 @@ submodules/ artifacts/ cache_hardhat/ typechain-types/ +doc/ \ No newline at end of file diff --git a/.solcover.js b/.solcover.js new file mode 100644 index 0000000..8270e4e --- /dev/null +++ b/.solcover.js @@ -0,0 +1,13 @@ +const fs = require('fs'); +const path = require('path'); + +module.exports = { + istanbulFolder: 'doc/coverage', + skipFiles: ['modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol'], + onIstanbulComplete: async function () { + const rootCoverageJson = path.join(process.cwd(), 'coverage.json'); + if (fs.existsSync(rootCoverageJson)) { + fs.unlinkSync(rootCoverageJson); + } + }, +}; diff --git a/README.md b/README.md index b6f1822..578324d 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Two versions are available: ### Standard -Replaces CMTAT's `AccessControlUpgradeable` (role-based) with `OwnableUpgradeable` (single owner) and integrates Chainlink ACE `PolicyProtectedUpgradeable` for access control and compliance validation on state-changing operations (mint, burn, transfer, enforcement, admin functions). +Replaces CMTAT's `AccessControlUpgradeable` (role-based) with `OwnableUpgradeable` (single owner) and integrates Chainlink ACE `PolicyProtectedBaseUpgradeable` for access control and compliance validation on state-changing operations (mint, burn, transfer, enforcement, admin functions). | Contract | Proxy type | | ------------------------------------- | ------------------ | @@ -81,12 +81,12 @@ Treat the following as privileged governance actions: ### Validation & Compliance -| Aspect | CMTAT | Standard | Lite | -| ---------------- | ----------------------------------------------------- | ---------------------------------------------- | --------------------------------------------------------------- | -| Validation layer | `CMTATBaseRuleEngine` → `ValidationModuleRuleEngine` | `PolicyProtectedUpgradeable` → `IPolicyEngine` | `ValidationModulePolicyEngine` → `IPolicyEngine` | -| Engine type | RuleEngine (custom interface) | Chainlink ACE PolicyEngine | Chainlink ACE PolicyEngine | -| Transfer check | `_canTransferGenericByModuleAndRevert()` + RuleEngine | PolicyEngine `run()` via `runPolicy` modifier | `_canTransferGenericByModuleAndRevert()` + PolicyEngine `run()` | -| ERC-1404 support | Via `ValidationModuleERC1404` | Not applicable (no module-level checks) | Via `PolicyValidationModuleERC1404` | +| Aspect | CMTAT | Standard | Lite | +| ---------------- | ----------------------------------------------------- | -------------------------------------------------- | --------------------------------------------------------------- | +| Validation layer | `CMTATBaseRuleEngine` → `ValidationModuleRuleEngine` | `PolicyProtectedBaseUpgradeable` → `IPolicyEngine` | `ValidationModulePolicyEngine` → `IPolicyEngine` | +| Engine type | RuleEngine (custom interface) | Chainlink ACE PolicyEngine | Chainlink ACE PolicyEngine | +| Transfer check | `_canTransferGenericByModuleAndRevert()` + RuleEngine | PolicyEngine `run()` via `runPolicy` modifier | `_canTransferGenericByModuleAndRevert()` + PolicyEngine `run()` | +| ERC-1404 support | Via `ValidationModuleERC1404` | Not applicable (no module-level checks) | Via `PolicyValidationModuleERC1404` | ### Initialization @@ -117,7 +117,7 @@ All CMTAT functional modules are preserved in both variants: - `CMTATBaseAccessControl` — replaced by `OwnableUpgradeable` - `AccessControlModule` — role management removed from contract -- `CMTATBaseRuleEngine` — replaced by `PolicyProtectedUpgradeable` +- `CMTATBaseRuleEngine` — replaced by `PolicyProtectedBaseUpgradeable` - `ValidationModuleRuleEngine` — replaced by direct PolicyEngine calls - All `onlyRole()` authorization functions — replaced by `runPolicy` modifier - `pause()`, `unpause()`, `deactivateContract()` — not exposed on the token contract; the `_authorizePause` and `_authorizeDeactivate` hooks are intentionally left unimplemented so these functions remain abstract and are excluded from the compiled contract. Pausing is enforced externally via a PausePolicy attached to the PolicyEngine, which rejects protected operations when paused @@ -138,7 +138,7 @@ All CMTAT functional modules are preserved in both variants: ### Added -- `PolicyProtectedUpgradeable` — Chainlink ACE integration with ERC-7201 storage, `runPolicy` modifier, and policy engine lifecycle management +- `PolicyProtectedBaseUpgradeable` — Chainlink ACE integration with ERC-7201 storage, `runPolicy` modifier, and policy engine lifecycle management - `ValidationModulePolicyEngine` (Lite) — hybrid validation combining CMTAT module checks with PolicyEngine - `PolicyValidationModuleERC1404` (Lite) — ERC-1404 transfer restriction codes with PolicyEngine awareness - `TransferValidationPolicy` — Chainlink ACE policy that validates transfers using CMTAT's `IRule` interface (see [TransferValidationPolicy](#transfervalidationpolicy) below) @@ -267,7 +267,7 @@ contract MyCustomRule is IRule { This integration includes ERC-165 interface discovery for both the protected token side and policy side: -- **Protected-token interface support**: `PolicyProtectedUpgradeable` exposes `IPolicyProtected` via `supportsInterface`, and the Standard/Lite token bases propagate that support through their own `supportsInterface` overrides. +- **Protected-token interface support**: `PolicyProtectedBaseUpgradeable` exposes `IPolicyProtected` via `supportsInterface`, and the Standard/Lite token bases propagate that support through their own `supportsInterface` overrides. - **Policy interface support**: `TransferValidationPolicy` extends Chainlink ACE `Policy`, and `Policy` exposes `IPolicy` via ERC-165. - **Rule interface support in mocks**: the included `TransferRuleMocks` expose `IRule` via `supportsInterface` for compatibility testing. @@ -291,7 +291,7 @@ git submodule update --init --recursive You can use any package manager either npm, yarn or pnpm. For example you can type: ```shell -npm install +bun install ``` ## Compile contracts @@ -299,31 +299,31 @@ npm install To compile ```shell -npx hardhat compile +bunx hardhat compile ``` -# Testing +## Testing To run tests: ```shell -npx hardhat test +bunx hardhat test ``` -# Linting & Formatting +## Linting & Formatting ## ESLint Lint JavaScript files (tests, scripts, config): ```shell -npm run lint +bun run lint ``` Auto-fix fixable issues: ```shell -npm run lint:fix +bun run lint:fix ``` ## Prettier @@ -331,18 +331,18 @@ npm run lint:fix Check formatting for JS, JSON, Markdown, and Solidity: ```shell -npm run format:check +bun run format:check ``` Auto-format all files: ```shell -npm run format +bun run format ``` Solidity formatting uses [prettier-plugin-solidity](https://github.com/prettier-solidity/prettier-plugin-solidity) and is scoped to `contracts/**/*.sol` only (submodules and dependencies are excluded). -# Scripts +## Scripts ## Deployment scripts @@ -360,7 +360,7 @@ Individual deployment scripts are available for each contract variant: Run any script with: ```shell -npx hardhat run scripts/lite/deploy-lite-standalone.js +bunx hardhat run scripts/lite/deploy-lite-standalone.js ``` ## Demo script @@ -391,7 +391,7 @@ Policy execution order per function: Run the demo on a local Hardhat network: ```shell -npx hardhat run scripts/demo.js +bunx hardhat run scripts/demo.js ``` ## Audit Reports Summary @@ -416,14 +416,14 @@ Run: ```shell source cct/bin/activate -npm run slither +bun run slither ``` ```bash -slither . --checklist --filter-paths "openzeppelin-contracts|test|forge-std|mocks" > doc/audits/tools/slither-report.md +slither . --checklist > doc/audits/tools/slither-report.md ``` -`npm run slither` generates timestamped reports in the `reports/` directory: +`bun run slither` generates timestamped reports in the `reports/` directory: - **JSON** — `reports/slither-report-.json` - **Markdown** — `reports/slither-report-.md` @@ -436,23 +436,23 @@ When done, deactivate the virtual environment: deactivate ``` -| Version | Report | Assessment | -| --- | --- | --- | +| Version | Report | Assessment | +| ------- | --------------------------------------------------------- | --------------------------------------------------------------------------- | | current | [slither-report.md](./doc/audits/tools/slither-report.md) | [slither-report-feedback.md](./doc/audits/tools/slither-report-feedback.md) | Report scope: repo-focused filtered checklist run. 0 High · 9 Medium · 10 Low · 27 Informational -| ID | Finding | Instances | Assessment | -| --- | --- | --- | --- | -| M-1 | `reentrancy-no-eth` | 3 | Contextual; expected external policy-engine calls and hook flow. Manual review required. | -| M-2 | `uninitialized-local` | 6 | Likely analyzer limitation in extractor decode paths; treated as likely false positive. | -| L-1 | `calls-loop` | 8 | Accepted by design where policy/rule chains iterate; monitor gas/complexity. | -| L-2 | `reentrancy-events` | 2 | Informational reentrancy/event-order signal; no confirmed exploitable issue from checklist alone. | -| I-1 | `assembly` | 2 | Expected in storage-slot patterns; informational. | -| I-2 | `dead-code` | 2 | Cleanup candidate; not a direct security issue. | -| I-3 | `naming-convention` | 23 | Style-only informational findings. | +| ID | Finding | Instances | Assessment | +| --- | --------------------- | --------- | ------------------------------------------------------------------------------------------------- | +| M-1 | `reentrancy-no-eth` | 3 | Contextual; expected external policy-engine calls and hook flow. Manual review required. | +| M-2 | `uninitialized-local` | 6 | Likely analyzer limitation in extractor decode paths; treated as likely false positive. | +| L-1 | `calls-loop` | 8 | Accepted by design where policy/rule chains iterate; monitor gas/complexity. | +| L-2 | `reentrancy-events` | 2 | Informational reentrancy/event-order signal; no confirmed exploitable issue from checklist alone. | +| I-1 | `assembly` | 2 | Expected in storage-slot patterns; informational. | +| I-2 | `dead-code` | 2 | Cleanup candidate; not a direct security issue. | +| I-3 | `naming-convention` | 23 | Style-only informational findings. | ### Aderyn @@ -462,28 +462,36 @@ Here is the list of report performed with [Aderyn](https://github.com/Cyfrin/ade aderyn -x mocks --output doc/audits/tools/aderyn-report.md ``` -| Version | Report | Assessment | -| --- | --- | --- | +| Version | Report | Assessment | +| ------- | ------------------------------------------------------- | ------------------------------------------------------------------------- | | current | [aderyn-report.md](./doc/audits/tools/aderyn-report.md) | [aderyn-report-feedback.md](./doc/audits/tools/aderyn-report-feedback.md) | Report scope: 17 Solidity files, 959 nSLOC. 2 High · 10 Low -| ID | Finding | Instances | Assessment | -| --- | --- | --- | --- | -| H-1 | Arbitrary `from` passed to `transferFrom` | 1 | Accepted in context — policy-gated flow; not treated as exploitable in this integration design. | -| H-2 | Contract locks Ether without withdraw | 2 | Accepted false positive — token deployments are not intended as ETH custody contracts. | -| L-1 | Centralization Risk | 11 | Accepted by design — privileged governance/control is intentional. | -| L-2 | Unsafe ERC20 Operation | 7 | Accepted false positive — primarily selector/module-flow usage, not unsafe token transfer wrappers. | -| L-3 | Unspecific Solidity Pragma | 17 | Accepted by design — version ranges are intentionally used in this codebase. | -| L-4 | Literal Instead of Constant | 2 | Informational — optional quality improvement. | -| L-5 | PUSH0 Opcode | 17 | Environment-dependent informational finding in this setup. | -| L-6 | Empty Block | 22 | Accepted by design — authorization hook pattern. | -| L-7 | Loop Contains `require`/`revert` | 4 | Accepted by design — atomic validation and explicit failure signaling. | -| L-8 | Unused State Variable | 1 | False positive — `STORAGE_LOCATION` is used via inline assembly in `_getStorage()`. | -| L-9 | Costly operations inside loop | 2 | Accepted — expected tradeoff in policy/rule iteration paths. | -| L-10 | Unused Import | 9 | Partially fixed; remaining cases are intentional (artifact/NatSpec/doc reasons). | +| ID | Finding | Instances | Assessment | +| ---- | ----------------------------------------- | --------- | --------------------------------------------------------------------------------------------------- | +| H-1 | Arbitrary `from` passed to `transferFrom` | 1 | Accepted in context — policy-gated flow; not treated as exploitable in this integration design. | +| H-2 | Contract locks Ether without withdraw | 2 | Accepted false positive — token deployments are not intended as ETH custody contracts. | +| L-1 | Centralization Risk | 11 | Accepted by design — privileged governance/control is intentional. | +| L-2 | Unsafe ERC20 Operation | 7 | Accepted false positive — primarily selector/module-flow usage, not unsafe token transfer wrappers. | +| L-3 | Unspecific Solidity Pragma | 17 | Accepted by design — version ranges are intentionally used in this codebase. | +| L-4 | Literal Instead of Constant | 2 | Informational — optional quality improvement. | +| L-5 | PUSH0 Opcode | 17 | Environment-dependent informational finding in this setup. | +| L-6 | Empty Block | 22 | Accepted by design — authorization hook pattern. | +| L-7 | Loop Contains `require`/`revert` | 4 | Accepted by design — atomic validation and explicit failure signaling. | +| L-8 | Unused State Variable | 1 | False positive — `STORAGE_LOCATION` is used via inline assembly in `_getStorage()`. | +| L-9 | Costly operations inside loop | 2 | Accepted — expected tradeoff in policy/rule iteration paths. | +| L-10 | Unused Import | 9 | Partially fixed; remaining cases are intentional (artifact/NatSpec/doc reasons). | + +## Coverage + +Writes coverage files to _doc/coverage_ using **solidity-coverage** hardhat plugin with config at **.solcover.js** + +```bash +bunx hardhat coverage +``` ## Policy-Protected Functions (Current Integration) @@ -492,30 +500,30 @@ The list below reflects the selectors wired in deployment/test flows (`scripts/d ### Core transfer selectors (Standard + Lite) -| Function signature | Selector | -| --- | --- | -| `transfer(address,uint256)` | `0xa9059cbb` | +| Function signature | Selector | +| --------------------------------------- | ------------ | +| `transfer(address,uint256)` | `0xa9059cbb` | | `transferFrom(address,address,uint256)` | `0x23b872dd` | ### Admin/lifecycle selectors (Standard policy-authoritative flow) -| Function signature | Selector | -| --- | --- | -| `mint(address,uint256)` | `0x40c10f19` | -| `burn(address,uint256)` | `0x9dc29fac` | -| `burn(uint256)` | `0x42966c68` | -| `burnFrom(address,uint256)` | `0x79cc6790` | +| Function signature | Selector | +| ----------------------------------------- | ------------ | +| `mint(address,uint256)` | `0x40c10f19` | +| `burn(address,uint256)` | `0x9dc29fac` | +| `burn(uint256)` | `0x42966c68` | +| `burnFrom(address,uint256)` | `0x79cc6790` | | `forcedTransfer(address,address,uint256)` | `0x9fc1d0e7` | -| `freezePartialTokens(address,uint256)` | `0x125c4a33` | -| `unfreezePartialTokens(address,uint256)` | `0x1fe56f7d` | -| `setName(string)` | `0xc47f0027` | -| `setSymbol(string)` | `0xb84c8246` | -| `setTokenId(string)` | `0xdcfd616f` | -| `setDocumentEngine(address)` | `0x33611079` | -| `setSnapshotEngine(address)` | `0xe236aabf` | -| `setCCIPAdmin(address)` | `0xa8fa343c` | -| `crosschainMint(address,uint256)` | `0x18bf5077` | -| `crosschainBurn(address,uint256)` | `0x2b8c49e3` | +| `freezePartialTokens(address,uint256)` | `0x125c4a33` | +| `unfreezePartialTokens(address,uint256)` | `0x1fe56f7d` | +| `setName(string)` | `0xc47f0027` | +| `setSymbol(string)` | `0xb84c8246` | +| `setTokenId(string)` | `0xdcfd616f` | +| `setDocumentEngine(address)` | `0x33611079` | +| `setSnapshotEngine(address)` | `0xe236aabf` | +| `setCCIPAdmin(address)` | `0xa8fa343c` | +| `crosschainMint(address,uint256)` | `0x18bf5077` | +| `crosschainBurn(address,uint256)` | `0x2b8c49e3` | Note: exact policy chains per selector (PausePolicy, RBAC, TransferValidationPolicy, etc.) can vary by deployment configuration. diff --git a/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol b/contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol similarity index 89% rename from contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol rename to contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol index 78dbd48..aa191ee 100644 --- a/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol +++ b/contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol @@ -7,10 +7,7 @@ import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngi /** * @title MintBurnExtractor * @notice Extracts parameters from CMTAT mint and burn function calls. - * @dev Mirrors ComplianceTokenMintBurnExtractor from @chainlink/ace but avoids - * the cross-package relative import of ComplianceTokenERC20 which is - * incompatible with Hardhat's module resolution. Selectors are inlined. - * Handles: + * @dev Handles: * - mint(address account, uint256 amount) → 0x40c10f19 * - burnFrom(address account, uint256 amount) → 0x79cc6790 * - burn(uint256 amount) → 0x42966c68 diff --git a/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol b/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol index 67fe1b4..ccb3893 100644 --- a/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol +++ b/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol @@ -1,9 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.20; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; -import {PolicyProtectedUpgradeable} from "../modified/PolicyProtectedUpgradeable.sol"; import {ValidationModulePolicyEngine} from "../../lite/ValidationModulePolicyEngine.sol"; contract MockPolicyEngine is IPolicyEngine { @@ -67,38 +65,16 @@ contract MockPolicyEngine is IPolicyEngine { return 0; } + function upgradePolicy(address, address, bytes calldata) external pure override {} + function setDefaultPolicyAllow(bool) external pure override {} function setTargetDefaultPolicyAllow(address, bool) external pure override {} } -contract PolicyProtectedUpgradeableHarness is Initializable, PolicyProtectedUpgradeable { - uint256 public counter; - - error ForcedRevert(); - - function initialize(address policyEngine) external initializer { - __PolicyProtected_init(policyEngine); - } - - function _authorizeAttachPolicyEngine(address) internal pure override {} - - function guardedRun() external runPolicy { - counter += 1; - } - - function guardedRunWithContext(bytes calldata context) external runPolicyWithContext(context) { - counter += 1; - } - - function guardedRunAndRevert() external runPolicy { - revert ForcedRevert(); - } -} - -contract ValidationModulePolicyEngineHarness is Initializable, ValidationModulePolicyEngine { +contract ValidationModulePolicyEngineHarness is ValidationModulePolicyEngine { function initializeWithPolicyEngine(address policyEngine) external initializer { - __PolicyProtected_init(policyEngine); + __PolicyProtectedBase_init(policyEngine); } function _authorizeAttachPolicyEngine(address) internal pure override {} @@ -117,12 +93,7 @@ contract ValidationModulePolicyEngineHarness is Initializable, ValidationModuleP return _tryCheckPolicies(selector, sender, data); } - function exposedTransferred( - address spender, - address from, - address to, - uint256 value - ) external returns (bool) { + function exposedTransferred(address spender, address from, address to, uint256 value) external returns (bool) { return _transferred(spender, from, to, value); } } diff --git a/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol b/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol deleted file mode 100644 index 870cf11..0000000 --- a/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol +++ /dev/null @@ -1,129 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.20; - -import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; -import {IPolicyProtected} from "@chainlink/policy-management/interfaces/IPolicyProtected.sol"; -import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; -import {ERC165Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; -import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; - -/** - * @title PolicyProtectedUpgradeable.sol - * @dev Modified implementation for attaching a policy engine to an upgradeable smart contract. Uses ERC-7201 storage - * to not conflict with other storage slots of extending contracts. Provides modifiers to be attached to methods - * of the extending contract to run the policy engine before executing the method. Access control for attaching and detaching the policy engine - * is implemented in the extending contract. - */ -abstract contract PolicyProtectedUpgradeable is Initializable, ERC165Upgradeable, IPolicyProtected { - /// @custom:storage-location erc7201:chainlink.ace.PolicyProtected - struct PolicyProtectedStorage { - IPolicyEngine policyEngine; - mapping(address sender => bytes context) senderContext; // use transient storage eventually - } - - // keccak256(abi.encode(uint256(keccak256("chainlink.ace.PolicyProtected")) - 1)) & - // ~bytes32(uint256(0xff)) - // solhint-disable-next-line const-name-snakecase - bytes32 private constant policyProtectedStorageLocation = - 0x5970a53874f73819f13c80052b0c1b19d6ce68b29b2ad28a7413019c8a409000; - - function _policyProtectedStorage() private pure returns (PolicyProtectedStorage storage $) { - // solhint-disable-next-line no-inline-assembly - assembly { - $.slot := policyProtectedStorageLocation - } - } - - function __PolicyProtected_init(address policyEngine) internal onlyInitializing { - __ERC165_init(); - __PolicyProtected_init_unchained(policyEngine); - } - - function __PolicyProtected_init_unchained(address policyEngine) internal onlyInitializing { - _attachPolicyEngine(policyEngine); - } - /** - * @dev Modifier to run the policy engine on the current method. - * @notice Context is cleared only after successful execution of the guarded function. - * If the guarded function reverts, this cleanup path is not reached and previously stored context remains. - */ - - modifier runPolicy() { - if (address(_policyProtectedStorage().policyEngine) == address(0)) { - revert IPolicyEngine.PolicyEngineUndefined(); - } - bytes memory context = getContext(); - _policyProtectedStorage().policyEngine.run( - IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) - ); - _; - if (context.length > 0) { - clearContext(); - } - } - - /** - * @dev Modifier to run the policy engine on the current method with the provided context. - * @param context Additional information or authorization to perform the operation. - */ - modifier runPolicyWithContext(bytes calldata context) { - if (address(_policyProtectedStorage().policyEngine) == address(0)) { - revert IPolicyEngine.PolicyEngineUndefined(); - } - _policyProtectedStorage().policyEngine.run( - IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) - ); - _; - } - - function _authorizeAttachPolicyEngine(address policyEngine) internal virtual; - - /// @inheritdoc IPolicyProtected - function attachPolicyEngine(address policyEngine) external virtual override { - _authorizeAttachPolicyEngine(policyEngine); - _attachPolicyEngine(policyEngine); - } - - function _attachPolicyEngine(address policyEngine) internal { - require(policyEngine != address(0), "Policy engine is zero address"); - if (address(_policyProtectedStorage().policyEngine) != address(0)) { - try _policyProtectedStorage().policyEngine.detach() { - // Detachment succeeded - } catch (bytes memory reason) { - emit PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine), reason); - } - } - _policyProtectedStorage().policyEngine = IPolicyEngine(policyEngine); - IPolicyEngine(policyEngine).attach(); - emit PolicyEngineAttached(policyEngine); - } - - /// @inheritdoc IPolicyProtected - function getPolicyEngine() public view virtual override returns (address) { - return address(_policyProtectedStorage().policyEngine); - } - - /// @inheritdoc IPolicyProtected - function setContext(bytes calldata context) public override { - _policyProtectedStorage().senderContext[msg.sender] = context; - } - - /// @inheritdoc IPolicyProtected - function getContext() public view override returns (bytes memory) { - return _policyProtectedStorage().senderContext[msg.sender]; - } - - /// @inheritdoc IPolicyProtected - function clearContext() public override { - delete _policyProtectedStorage().senderContext[msg.sender]; - } - - /** - * @dev See {IERC165-supportsInterface}. - */ - function supportsInterface( - bytes4 interfaceId - ) public view virtual override(ERC165Upgradeable, IERC165) returns (bool) { - return interfaceId == type(IPolicyProtected).interfaceId || super.supportsInterface(interfaceId); - } -} diff --git a/contracts/modules/demo/DemoImports.sol b/contracts/modules/demo/DemoImports.sol deleted file mode 100644 index 33aa32d..0000000 --- a/contracts/modules/demo/DemoImports.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: MPL-2.0 - -pragma solidity ^0.8.20; - -// This import ensures Hardhat compiles MockV3Aggregator so it is available -// as an artifact for deployment scripts. - -import {MockV3Aggregator} from "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol"; -import {PolicyEngine} from "@chainlink/policy-management/core/PolicyEngine.sol"; -import {PausePolicy} from "@chainlink/policy-management/policies/PausePolicy.sol"; -import {RoleBasedAccessControlPolicy} from "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol"; -import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMintPolicy.sol"; -import {ERC20TransferExtractor} from "@chainlink/policy-management/extractors/ERC20TransferExtractor.sol"; -import {SnapshotEngineMock} from "CMTAT/mocks/SnapshotEngineMock.sol"; -import {DocumentEngineMock} from "CMTAT/mocks/DocumentEngineMock.sol"; diff --git a/contracts/modules/lite/CCTCMTATBaseERC1404.sol b/contracts/modules/lite/CCTCMTATBaseERC1404.sol index a0268ce..d39eb4f 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC1404.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC1404.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.20; import {CCTCMTATBasePolicyEngine} from "./CCTCMTATBasePolicyEngine.sol"; import {PolicyValidationModuleERC1404, IERC1404, IERC1404Extend} from "./PolicyValidationModuleERC1404.sol"; -import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import { @@ -39,7 +38,7 @@ abstract contract CCTCMTATBaseERC1404 is CCTCMTATBasePolicyEngine, PolicyValidat } /** - * @inheritdoc ValidationModulePolicyEngine + * @inheritdoc CCTCMTATBasePolicyEngine */ function canTransfer( address from, @@ -50,7 +49,7 @@ abstract contract CCTCMTATBaseERC1404 is CCTCMTATBasePolicyEngine, PolicyValidat } /** - * @inheritdoc ValidationModulePolicyEngine + * @inheritdoc CCTCMTATBasePolicyEngine */ function canTransferFrom( address spender, diff --git a/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol index 14ac329..48f380f 100644 --- a/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol +++ b/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol @@ -6,14 +6,8 @@ import {ERC20CrossChainModule} from "CMTAT/modules/wrapper/options/ERC20CrossCha import {CCIPModule} from "CMTAT/modules/wrapper/options/CCIPModule.sol"; import {CCTCMTATBaseERC1404} from "./CCTCMTATBaseERC1404.sol"; import {CMTATBaseCommon} from "CMTAT/modules/0_CMTATBaseCommon.sol"; -import { - ERC20MintModule, - ERC20MintModuleInternal -} from "CMTAT/modules/wrapper/core/ERC20MintModule.sol"; -import { - ERC20BurnModule, - ERC20BurnModuleInternal -} from "CMTAT/modules/wrapper/core/ERC20BurnModule.sol"; +import {ERC20MintModule, ERC20MintModuleInternal} from "CMTAT/modules/wrapper/core/ERC20MintModule.sol"; +import {ERC20BurnModule, ERC20BurnModuleInternal} from "CMTAT/modules/wrapper/core/ERC20BurnModule.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; diff --git a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol index a80d5cb..faf573d 100644 --- a/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +++ b/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol @@ -2,11 +2,8 @@ pragma solidity ^0.8.20; -import { - CMTATBaseCommon, - CMTATBaseAccessControl -} from "CMTAT/modules/1_CMTATBaseAccessControl.sol"; -import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; +import {CMTATBaseCommon, CMTATBaseAccessControl} from "CMTAT/modules/1_CMTATBaseAccessControl.sol"; +import {PolicyProtectedBaseUpgradeable} from "@chainlink/policy-management/core/PolicyProtectedBaseUpgradeable.sol"; import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "CMTAT/interfaces/tokenization/draft-IERC1643.sol"; @@ -108,7 +105,7 @@ abstract contract CCTCMTATBasePolicyEngine is __DocumentEngineModule_init_unchained(documentEngine_); /* Chainlink-ACE policy module */ - __PolicyProtected_init_unchained(policyEngine_); + __PolicyProtectedBase_init_unchained(policyEngine_); } /* @@ -195,9 +192,9 @@ abstract contract CCTCMTATBasePolicyEngine is function supportsInterface( bytes4 interfaceId - ) public view virtual override(CMTATBaseAccessControl, PolicyProtectedUpgradeable) returns (bool) { + ) public view virtual override(CMTATBaseAccessControl, PolicyProtectedBaseUpgradeable) returns (bool) { return CMTATBaseAccessControl.supportsInterface(interfaceId) || - PolicyProtectedUpgradeable.supportsInterface(interfaceId); + PolicyProtectedBaseUpgradeable.supportsInterface(interfaceId); } } diff --git a/contracts/modules/lite/ValidationModulePolicyEngine.sol b/contracts/modules/lite/ValidationModulePolicyEngine.sol index e585233..8d7fd33 100644 --- a/contracts/modules/lite/ValidationModulePolicyEngine.sol +++ b/contracts/modules/lite/ValidationModulePolicyEngine.sol @@ -3,11 +3,11 @@ pragma solidity ^0.8.20; import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol"; -import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedBaseUpgradeable} from "@chainlink/policy-management/core/PolicyProtectedBaseUpgradeable.sol"; import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedUpgradeable { +abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedBaseUpgradeable { /*////////////////////////////////////////////////////////////// PUBLIC/EXTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ @@ -15,7 +15,7 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr /* ============ View functions ============ */ /** * @inheritdoc ValidationModuleCore - * @dev call the ruleEngine if set + * @dev call the policy engine if set */ function canTransfer( address from, @@ -27,7 +27,7 @@ abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyPr /** * @inheritdoc ValidationModuleCore - * @dev call the ruleEngine if set + * @dev call the policy engine if set */ function canTransferFrom( address spender, diff --git a/contracts/modules/standard/CCTCommon.sol b/contracts/modules/standard/CCTCommon.sol index 43bb81f..a3cc459 100644 --- a/contracts/modules/standard/CCTCommon.sol +++ b/contracts/modules/standard/CCTCommon.sol @@ -11,14 +11,8 @@ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/Own import {CMTATBaseCommon} from "CMTAT/modules/0_CMTATBaseCommon.sol"; /* = Base = */ /* = Core = */ -import { - ERC20BurnModule, - ERC20BurnModuleInternal -} from "CMTAT/modules/wrapper/core/ERC20BurnModule.sol"; -import { - ERC20MintModule, - ERC20MintModuleInternal -} from "CMTAT/modules/wrapper/core/ERC20MintModule.sol"; +import {ERC20BurnModule, ERC20BurnModuleInternal} from "CMTAT/modules/wrapper/core/ERC20BurnModule.sol"; +import {ERC20MintModule, ERC20MintModuleInternal} from "CMTAT/modules/wrapper/core/ERC20MintModule.sol"; import {ERC20BaseModule} from "CMTAT/modules/wrapper/core/ERC20BaseModule.sol"; /* = Option & Extension = */ import {ERC20CrossChainModule} from "CMTAT/modules/wrapper/options/ERC20CrossChainModule.sol"; @@ -28,21 +22,18 @@ import { ERC20EnforcementModule, ERC20EnforcementModuleInternal } from "CMTAT/modules/wrapper/extensions/ERC20EnforcementModule.sol"; -import { - DocumentEngineModule, - IERC1643 -} from "CMTAT/modules/wrapper/extensions/DocumentEngineModule.sol"; +import {DocumentEngineModule, IERC1643} from "CMTAT/modules/wrapper/extensions/DocumentEngineModule.sol"; import {SnapshotEngineModule} from "CMTAT/modules/wrapper/extensions/SnapshotEngineModule.sol"; /* = Interface = */ import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol"; /* ==== Chainlink ACE === */ -import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedBaseUpgradeable} from "@chainlink/policy-management/core/PolicyProtectedBaseUpgradeable.sol"; abstract contract CCTCommon is OwnableUpgradeable, ERC20CrossChainModule, - PolicyProtectedUpgradeable, + PolicyProtectedBaseUpgradeable, CMTATBaseCommon, CCIPModule { @@ -104,7 +95,7 @@ abstract contract CCTCommon is // Openzeppelin __CMTAT_openzeppelin_init_unchained(ERC20Attributes_); - __PolicyProtected_init_unchained(policyEngine); + __PolicyProtectedBase_init_unchained(policyEngine); /* Wrapper modules */ __CMTAT_modules_init_unchained(ERC20Attributes_, ExtraInformationAttributes_); @@ -200,10 +191,10 @@ abstract contract CCTCommon is function supportsInterface( bytes4 _interfaceId - ) public view virtual override(IERC165, ERC20CrossChainModule, PolicyProtectedUpgradeable) returns (bool) { + ) public view virtual override(IERC165, ERC20CrossChainModule, PolicyProtectedBaseUpgradeable) returns (bool) { return ERC20CrossChainModule.supportsInterface(_interfaceId) || - PolicyProtectedUpgradeable.supportsInterface(_interfaceId); + PolicyProtectedBaseUpgradeable.supportsInterface(_interfaceId); } /* ==== Mint and Burn Operations ==== */ diff --git a/doc/audits/tools/aderyn-report-feedback.md b/doc/audits/tools/aderyn-report-feedback.md index c650533..bf1bd85 100644 --- a/doc/audits/tools/aderyn-report-feedback.md +++ b/doc/audits/tools/aderyn-report-feedback.md @@ -19,15 +19,15 @@ Report scope: 17 Solidity files, 959 nSLOC. | H-1 | Arbitrary `from` passed to `transferFrom` | 1 | Accepted in context — policy-gated flow; not treated as exploitable in this integration design. | | H-2 | Contract locks Ether without withdraw | 2 | Accepted false positive — token deployments are not intended as ETH custody contracts. | | L-1 | Centralization risk | 11 | Accepted by design — privileged governance/control is intentional. | -| L-2 | Unsafe ERC20 operation | 7 | Accepted false positive — primarily selector/module-flow usage, not unsafe token transfer wrappers. | -| L-3 | Unspecific Solidity pragma | 17 | Accepted by design — version ranges are intentionally used in this codebase. | +| L-2 | Costly operations inside loop | 2 | Accepted — expected tradeoff in policy/rule iteration paths. | +| L-3 | Empty block | 22 | Accepted by design — authorization hook pattern. | | L-4 | Literal instead of constant | 2 | Informational — optional quality improvement. | -| L-5 | PUSH0 opcode | 17 | Environment-dependent informational; not a direct vulnerability finding in this deployment context. | -| L-6 | Empty block | 22 | Accepted by design — authorization hook pattern. | -| L-7 | Loop contains `require`/`revert` | 4 | Accepted by design — atomic validation and explicit failure signaling. | -| L-8 | Unused state variable | 1 | False positive — `STORAGE_LOCATION` is used via inline assembly in `_getStorage()`. | -| L-9 | Costly operations inside loop | 2 | Accepted — expected tradeoff in policy/rule iteration paths. | -| L-10 | Unused import | 9 | Partially fixed; remaining cases are intentional (artifact/NatSpec/doc reasons). | +| L-5 | PUSH0 opcode | 15 | Environment-dependent informational; not a direct vulnerability finding in this deployment context. | +| L-6 | Loop contains `require`/`revert` | 4 | Accepted by design — atomic validation and explicit failure signaling. | +| L-7 | Unsafe ERC20 operation | 7 | Accepted false positive — primarily selector/module-flow usage, not unsafe token transfer wrappers. | +| L-8 | Unspecific Solidity pragma | 15 | Accepted by design — version ranges are intentionally used in this codebase. | +| L-9 | Unused state variable | 1 | False positive — `STORAGE_LOCATION` is used via inline assembly in `_getStorage()`. | + ## Executive triage @@ -51,35 +51,23 @@ Report scope: 17 Solidity files, 959 nSLOC. ## Low findings (grouped) -### L-1 (centralization), L-3 (pragma), L-4/L-5/L-6/L-7/L-9 +### L-1 (centralization), L-8 (pragma), L-2/L-3/L-4/L-5/L-6 - Status: **Informational / accepted** - Rationale: these are style/governance/design heuristics and do not by themselves indicate exploitable defects in this integration. -### L-2: Unsafe ERC20 operation +### L-7: Unsafe ERC20 operation - Status: **Accepted false positive** - Rationale: flagged sites are interface selectors/existing token-module flows, not unsafe raw token transfer integrations requiring `SafeERC20` wrappers. -### L-8: Unused state variable +### L-9: Unused state variable - Status: **False positive** - Rationale: flagged constant `STORAGE_LOCATION` is consumed in inline assembly (`_getStorage()`), which static analyzers may miss. -### L-10: Unused import - -- Status: **Partially fixed + partially intentional** - -Fixed in this repo: -- `contracts/modules/lite/CCTCMTATBasePolicyEngine.sol` -- `contracts/modules/standard/CCTCommon.sol` - -Intentionally kept: -- `contracts/modules/demo/DemoImports.sol` (artifact-compilation anchor for demo/deploy flows) -- `contracts/modules/lite/CCTCMTATBaseERC1404.sol` (`@inheritdoc` doc-resolution dependency) ## Recommended follow-up -1. Keep `L-10` intentional cases documented as exceptions. -2. Document `L-8` as an inline-assembly false positive in audit triage notes. -3. Continue prioritizing repo-owned paths over dependency findings in audit triage. +1. Document `L-8` as an inline-assembly false positive in audit triage notes. +2. Continue prioritizing repo-owned paths over dependency findings in audit triage. \ No newline at end of file diff --git a/doc/audits/tools/aderyn-report.md b/doc/audits/tools/aderyn-report.md index 440603e..0c59fa0 100644 --- a/doc/audits/tools/aderyn-report.md +++ b/doc/audits/tools/aderyn-report.md @@ -12,15 +12,14 @@ This report was generated by [Aderyn](https://github.com/Cyfrin/aderyn), a stati - [H-2: Contract locks Ether without a withdraw function](#h-2-contract-locks-ether-without-a-withdraw-function) - [Low Issues](#low-issues) - [L-1: Centralization Risk](#l-1-centralization-risk) - - [L-2: Unsafe ERC20 Operation](#l-2-unsafe-erc20-operation) - - [L-3: Unspecific Solidity Pragma](#l-3-unspecific-solidity-pragma) + - [L-2: Costly operations inside loop](#l-2-costly-operations-inside-loop) + - [L-3: Empty Block](#l-3-empty-block) - [L-4: Literal Instead of Constant](#l-4-literal-instead-of-constant) - [L-5: PUSH0 Opcode](#l-5-push0-opcode) - - [L-6: Empty Block](#l-6-empty-block) - - [L-7: Loop Contains `require`/`revert`](#l-7-loop-contains-requirerevert) - - [L-8: Unused State Variable](#l-8-unused-state-variable) - - [L-9: Costly operations inside loop](#l-9-costly-operations-inside-loop) - - [L-10: Unused Import](#l-10-unused-import) + - [L-6: Loop Contains `require`/`revert`](#l-6-loop-contains-requirerevert) + - [L-7: Unsafe ERC20 Operation](#l-7-unsafe-erc20-operation) + - [L-8: Unspecific Solidity Pragma](#l-8-unspecific-solidity-pragma) + - [L-9: Unused State Variable](#l-9-unused-state-variable) # Summary @@ -29,8 +28,8 @@ This report was generated by [Aderyn](https://github.com/Cyfrin/aderyn), a stati | Key | Value | | --- | --- | -| .sol Files | 17 | -| Total nSLOC | 959 | +| .sol Files | 15 | +| Total nSLOC | 871 | ## Files Details @@ -44,17 +43,15 @@ This report was generated by [Aderyn](https://github.com/Cyfrin/aderyn), a stati | contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol | 9 | | contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol | 7 | | contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol | 35 | -| contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol | 78 | -| contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol | 29 | -| contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol | 82 | -| contracts/modules/demo/DemoImports.sol | 9 | -| contracts/modules/lite/CCTCMTATBaseERC1404.sol | 60 | +| contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol | 29 | +| contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol | 82 | +| contracts/modules/lite/CCTCMTATBaseERC1404.sol | 59 | | contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol | 99 | | contracts/modules/lite/CCTCMTATBasePolicyEngine.sol | 133 | | contracts/modules/lite/PolicyValidationModuleERC1404.sol | 77 | | contracts/modules/lite/ValidationModulePolicyEngine.sol | 92 | | contracts/modules/standard/CCTCommon.sol | 182 | -| **Total** | **959** | +| **Total** | **871** | ## Issue Summary @@ -62,7 +59,7 @@ This report was generated by [Aderyn](https://github.com/Cyfrin/aderyn), a stati | Category | No. of Issues | | --- | --- | | High | 2 | -| Low | 10 | +| Low | 9 | # High Issues @@ -74,7 +71,7 @@ Passing an arbitrary `from` address to `transferFrom` (or `safeTransferFrom`) ca
1 Found Instances -- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 45](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L45) +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 45](../../../contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L45) ```solidity return CMTATBaseCommon.transferFrom(from, to, value); @@ -88,21 +85,27 @@ Passing an arbitrary `from` address to `transferFrom` (or `safeTransferFrom`) ca It appears that the contract includes a payable function to accept Ether but lacks a corresponding function to withdraw it, which leads to the Ether being locked in the contract. To resolve this issue, please implement a public or external function that allows for the withdrawal of Ether from the contract. -
2 Found Instances +
3 Found Instances -- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 13](contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L13) +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 13](../../../contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L13) ```solidity contract ComplianceTokenCMTATLiteUUPSUpgradeable is CCTCMTATBaseERC20CrossChain, UUPSUpgradeable { ``` -- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 13](contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L13) +- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 13](../../../contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L13) ```solidity contract ComplianceTokenCMTATUUPSUpgradeable is CCTCommon, UUPSUpgradeable { ``` +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 25](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L25) + + ```solidity + contract TransferValidationPolicy is Policy { + ``` +
@@ -116,67 +119,67 @@ Contracts have owners with privileged rights to perform admin tasks and need to
11 Found Instances -- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 27](contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L27) +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 27](../../../contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L27) ```solidity ) internal virtual override(UUPSUpgradeable) onlyRole(PROXY_UPGRADE_ROLE) {} ``` -- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 23](contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L23) +- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 23](../../../contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L23) ```solidity function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyOwner {} ``` -- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 63](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L63) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 65](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L65) ```solidity function setRules(IRule[] calldata rules_) external onlyOwner { ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 120](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L120) +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 120](../../../contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L120) ```solidity function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) onlyRole(DEFAULT_ADMIN_ROLE) {} ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 144](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L144) +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 144](../../../contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L144) ```solidity onlyRole(BURNER_FROM_ROLE) ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 157](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L157) +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 157](../../../contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L157) ```solidity onlyRole(BURNER_SELF_ROLE) ``` -- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 171](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L171) +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 171](../../../contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L171) ```solidity function _authorizeAttachPolicyEngine(address) internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} ``` -- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 177](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L177) +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 177](../../../contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L177) ```solidity function _authorizePause() internal virtual override(PauseModule) onlyRole(PAUSER_ROLE) {} ``` -- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 178](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L178) +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 178](../../../contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L178) ```solidity function _authorizeDeactivate() internal virtual override(PauseModule) onlyRole(DEFAULT_ADMIN_ROLE) {} ``` -- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 180](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L180) +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 180](../../../contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L180) ```solidity function _authorizeFreeze() internal virtual override(EnforcementModule) onlyRole(ENFORCER_ROLE) {} ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 176](contracts/modules/standard/CCTCommon.sol#L176) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 176](../../../contracts/modules/standard/CCTCommon.sol#L176) ```solidity function _authorizeAttachPolicyEngine(address) internal virtual override onlyOwner {} @@ -186,166 +189,166 @@ Contracts have owners with privileged rights to perform admin tasks and need to -## L-2: Unsafe ERC20 Operation +## L-2: Costly operations inside loop -ERC20 functions may not behave as expected. For example: return values are not always meaningful. It is recommended to use OpenZeppelin's SafeERC20 library. +Invoking `SSTORE` operations in loops may waste gas. Use a local variable to hold the loop computation result. -
7 Found Instances +
2 Found Instances -- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 36](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L36) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 54](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L54) ```solidity - if (payload.selector == IERC20.transfer.selector) { + for (uint256 i = 0; i < ruleAddrs.length; ++i) { ``` -- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 40](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L40) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 69](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L69) ```solidity - } else if (payload.selector == IERC20.transferFrom.selector) { + for (uint256 i = 0; i < rules_.length; ++i) { ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 29](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L29) +
+ - ```solidity - return ERC20Upgradeable.approve(spender, value); - ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 35](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L35) +## L-3: Empty Block - ```solidity - return CMTATBaseCommon.transfer(to, value); - ``` +Consider removing empty blocks. -- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 72](contracts/modules/lite/ValidationModulePolicyEngine.sol#L72) +
22 Found Instances - ```solidity - return _tryCheckPolicies(IERC20.transferFrom.selector, spender, abi.encode(from, to, value)); - ``` -- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 80](contracts/modules/lite/ValidationModulePolicyEngine.sol#L80) +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 25](../../../contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L25) ```solidity - return _tryCheckPolicies(IERC20.transfer.selector, from, abi.encode(to, value)); + function _authorizeUpgrade( ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 163](contracts/modules/standard/CCTCommon.sol#L163) +- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 23](../../../contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L23) ```solidity - return CMTATBaseCommon.transfer(to, value); + function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyOwner {} ``` -
- +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 120](../../../contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L120) + ```solidity + function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` -## L-3: Unspecific Solidity Pragma +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 140](../../../contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L140) -Consider using a specific version of Solidity in your contracts instead of a wide version. For example, instead of `pragma solidity ^0.8.0;`, use `pragma solidity 0.8.0;` + ```solidity + function _authorizeBurnFrom() + ``` -
17 Found Instances +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 153](../../../contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L153) + ```solidity + function _authorizeSelfBurn() + ``` -- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol#L3) +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 171](../../../contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L171) ```solidity - pragma solidity ^0.8.20; + function _authorizeAttachPolicyEngine(address) internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} ``` -- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L3) +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 177](../../../contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L177) ```solidity - pragma solidity ^0.8.20; + function _authorizePause() internal virtual override(PauseModule) onlyRole(PAUSER_ROLE) {} ``` -- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol#L3) +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 178](../../../contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L178) ```solidity - pragma solidity ^0.8.20; + function _authorizeDeactivate() internal virtual override(PauseModule) onlyRole(DEFAULT_ADMIN_ROLE) {} ``` -- Found in contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol#L3) +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 180](../../../contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L180) ```solidity - pragma solidity ^0.8.20; + function _authorizeFreeze() internal virtual override(EnforcementModule) onlyRole(ENFORCER_ROLE) {} ``` -- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L3) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 176](../../../contracts/modules/standard/CCTCommon.sol#L176) ```solidity - pragma solidity ^0.8.20; + function _authorizeAttachPolicyEngine(address) internal virtual override onlyOwner {} ``` -- Found in contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol#L3) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 247](../../../contracts/modules/standard/CCTCommon.sol#L247) ```solidity - pragma solidity ^0.8.20; + function _authorizeERC20AttributeManagement() internal virtual override(ERC20BaseModule) runPolicy {} ``` -- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 2](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L2) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 253](../../../contracts/modules/standard/CCTCommon.sol#L253) ```solidity - pragma solidity ^0.8.20; + function _authorizeMint() internal virtual override(ERC20MintModule) runPolicy {} ``` -- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 3](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L3) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 259](../../../contracts/modules/standard/CCTCommon.sol#L259) ```solidity - pragma solidity ^0.8.20; + function _authorizeBurn() internal virtual override(ERC20BurnModule) runPolicy {} ``` -- Found in contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol [Line: 2](contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L2) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 265](../../../contracts/modules/standard/CCTCommon.sol#L265) ```solidity - pragma solidity ^0.8.20; + function _authorizeDocumentManagement() internal virtual override(DocumentEngineModule) runPolicy {} ``` -- Found in contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol [Line: 2](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L2) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 271](../../../contracts/modules/standard/CCTCommon.sol#L271) ```solidity - pragma solidity ^0.8.20; + function _authorizeExtraInfoManagement() internal virtual override(ExtraInformationModule) runPolicy {} ``` -- Found in contracts/modules/demo/DemoImports.sol [Line: 3](contracts/modules/demo/DemoImports.sol#L3) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 277](../../../contracts/modules/standard/CCTCommon.sol#L277) ```solidity - pragma solidity ^0.8.20; + function _authorizeERC20Enforcer() internal virtual override(ERC20EnforcementModule) runPolicy {} ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC1404.sol [Line: 3](contracts/modules/lite/CCTCMTATBaseERC1404.sol#L3) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 283](../../../contracts/modules/standard/CCTCommon.sol#L283) ```solidity - pragma solidity ^0.8.20; + function _authorizeForcedTransfer() internal virtual override(ERC20EnforcementModule) runPolicy {} ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 3](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L3) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 289](../../../contracts/modules/standard/CCTCommon.sol#L289) ```solidity - pragma solidity ^0.8.20; + function _authorizeSnapshots() internal virtual override(SnapshotEngineModule) runPolicy {} ``` -- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 3](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L3) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 295](../../../contracts/modules/standard/CCTCommon.sol#L295) ```solidity - pragma solidity ^0.8.20; + function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) runPolicy {} ``` -- Found in contracts/modules/lite/PolicyValidationModuleERC1404.sol [Line: 3](contracts/modules/lite/PolicyValidationModuleERC1404.sol#L3) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 306](../../../contracts/modules/standard/CCTCommon.sol#L306) ```solidity - pragma solidity ^0.8.20; + function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) runPolicy {} ``` -- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 3](contracts/modules/lite/ValidationModulePolicyEngine.sol#L3) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 313](../../../contracts/modules/standard/CCTCommon.sol#L313) ```solidity - pragma solidity ^0.8.20; + function _authorizeBurnFrom() internal virtual override(ERC20CrossChainModule) runPolicy {} ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 3](contracts/modules/standard/CCTCommon.sol#L3) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 320](../../../contracts/modules/standard/CCTCommon.sol#L320) ```solidity - pragma solidity ^0.8.20; + function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) runPolicy {} ```
@@ -359,16 +362,16 @@ Define and use `constant` variables instead of using literals. If the same const
2 Found Instances -- Found in contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol [Line: 57](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L57) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 106](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L106) ```solidity - IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + if (parameters.length != 3 && parameters.length != 4) { ``` -- Found in contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol [Line: 74](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L74) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 110](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L110) ```solidity - IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context}) + if (parameters.length == 4) { ```
@@ -379,106 +382,94 @@ Define and use `constant` variables instead of using literals. If the same const Solc compiler version 0.8.20 switches the default target EVM version to Shanghai, which means that the generated bytecode will include PUSH0 opcodes. Be sure to select the appropriate EVM version in case you intend to deploy on a chain other than mainnet like L2 chains that may not support PUSH0, otherwise deployment of your contracts will fail. -
17 Found Instances - - -- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol#L3) - - ```solidity - pragma solidity ^0.8.20; - ``` - -- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L3) +
15 Found Instances - ```solidity - pragma solidity ^0.8.20; - ``` -- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol [Line: 3](contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol#L3) +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol [Line: 3](../../../contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol#L3) +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 3](../../../contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L3) +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol [Line: 3](../../../contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol [Line: 3](contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol#L3) +- Found in contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol [Line: 3](../../../contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 2](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L2) +- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 3](../../../contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 3](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L3) +- Found in contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol [Line: 3](../../../contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol [Line: 2](contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L2) +- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 2](../../../contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L2) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol [Line: 2](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L2) +- Found in contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol [Line: 2](../../../contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol#L2) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/modules/demo/DemoImports.sol [Line: 3](contracts/modules/demo/DemoImports.sol#L3) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 3](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC1404.sol [Line: 3](contracts/modules/lite/CCTCMTATBaseERC1404.sol#L3) +- Found in contracts/modules/lite/CCTCMTATBaseERC1404.sol [Line: 3](../../../contracts/modules/lite/CCTCMTATBaseERC1404.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 3](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L3) +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 3](../../../contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 3](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L3) +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 3](../../../contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/modules/lite/PolicyValidationModuleERC1404.sol [Line: 3](contracts/modules/lite/PolicyValidationModuleERC1404.sol#L3) +- Found in contracts/modules/lite/PolicyValidationModuleERC1404.sol [Line: 3](../../../contracts/modules/lite/PolicyValidationModuleERC1404.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 3](contracts/modules/lite/ValidationModulePolicyEngine.sol#L3) +- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 3](../../../contracts/modules/lite/ValidationModulePolicyEngine.sol#L3) ```solidity pragma solidity ^0.8.20; ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 3](contracts/modules/standard/CCTCommon.sol#L3) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 3](../../../contracts/modules/standard/CCTCommon.sol#L3) ```solidity pragma solidity ^0.8.20; @@ -488,283 +479,206 @@ Solc compiler version 0.8.20 switches the default target EVM version to Shanghai -## L-6: Empty Block +## L-6: Loop Contains `require`/`revert` -Consider removing empty blocks. +Avoid `require` / `revert` statements in a loop because a single bad item can cause the whole transaction to fail. It's better to forgive on fail and return failed elements post processing of the loop -
22 Found Instances +
4 Found Instances -- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 25](contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L25) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 54](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L54) ```solidity - function _authorizeUpgrade( + for (uint256 i = 0; i < ruleAddrs.length; ++i) { ``` -- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 23](contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L23) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 69](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L69) ```solidity - function _authorizeUpgrade(address newImplementation) internal virtual override(UUPSUpgradeable) onlyOwner {} + for (uint256 i = 0; i < rules_.length; ++i) { ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 120](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L120) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 117](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L117) ```solidity - function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) onlyRole(DEFAULT_ADMIN_ROLE) {} + for (uint256 i = 0; i < len; ++i) { ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 140](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L140) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 130](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L130) ```solidity - function _authorizeBurnFrom() + for (uint256 i = 0; i < len; ++i) { ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 153](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L153) +
- ```solidity - function _authorizeSelfBurn() - ``` -- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 171](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L171) - ```solidity - function _authorizeAttachPolicyEngine(address) internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} - ``` - -- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 177](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L177) +## L-7: Unsafe ERC20 Operation - ```solidity - function _authorizePause() internal virtual override(PauseModule) onlyRole(PAUSER_ROLE) {} - ``` +ERC20 functions may not behave as expected. For example: return values are not always meaningful. It is recommended to use OpenZeppelin's SafeERC20 library. -- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 178](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L178) +
7 Found Instances - ```solidity - function _authorizeDeactivate() internal virtual override(PauseModule) onlyRole(DEFAULT_ADMIN_ROLE) {} - ``` -- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 180](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L180) +- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 36](../../../contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L36) ```solidity - function _authorizeFreeze() internal virtual override(EnforcementModule) onlyRole(ENFORCER_ROLE) {} + if (payload.selector == IERC20.transfer.selector) { ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 176](contracts/modules/standard/CCTCommon.sol#L176) +- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 40](../../../contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L40) ```solidity - function _authorizeAttachPolicyEngine(address) internal virtual override onlyOwner {} + } else if (payload.selector == IERC20.transferFrom.selector) { ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 247](contracts/modules/standard/CCTCommon.sol#L247) +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 29](../../../contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L29) ```solidity - function _authorizeERC20AttributeManagement() internal virtual override(ERC20BaseModule) runPolicy {} + return ERC20Upgradeable.approve(spender, value); ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 253](contracts/modules/standard/CCTCommon.sol#L253) +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 35](../../../contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L35) ```solidity - function _authorizeMint() internal virtual override(ERC20MintModule) runPolicy {} + return CMTATBaseCommon.transfer(to, value); ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 259](contracts/modules/standard/CCTCommon.sol#L259) +- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 72](../../../contracts/modules/lite/ValidationModulePolicyEngine.sol#L72) ```solidity - function _authorizeBurn() internal virtual override(ERC20BurnModule) runPolicy {} + return _tryCheckPolicies(IERC20.transferFrom.selector, spender, abi.encode(from, to, value)); ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 265](contracts/modules/standard/CCTCommon.sol#L265) +- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 80](../../../contracts/modules/lite/ValidationModulePolicyEngine.sol#L80) ```solidity - function _authorizeDocumentManagement() internal virtual override(DocumentEngineModule) runPolicy {} + return _tryCheckPolicies(IERC20.transfer.selector, from, abi.encode(to, value)); ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 271](contracts/modules/standard/CCTCommon.sol#L271) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 163](../../../contracts/modules/standard/CCTCommon.sol#L163) ```solidity - function _authorizeExtraInfoManagement() internal virtual override(ExtraInformationModule) runPolicy {} + return CMTATBaseCommon.transfer(to, value); ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 277](contracts/modules/standard/CCTCommon.sol#L277) - - ```solidity - function _authorizeERC20Enforcer() internal virtual override(ERC20EnforcementModule) runPolicy {} - ``` +
-- Found in contracts/modules/standard/CCTCommon.sol [Line: 283](contracts/modules/standard/CCTCommon.sol#L283) - ```solidity - function _authorizeForcedTransfer() internal virtual override(ERC20EnforcementModule) runPolicy {} - ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 289](contracts/modules/standard/CCTCommon.sol#L289) +## L-8: Unspecific Solidity Pragma - ```solidity - function _authorizeSnapshots() internal virtual override(SnapshotEngineModule) runPolicy {} - ``` +Consider using a specific version of Solidity in your contracts instead of a wide version. For example, instead of `pragma solidity ^0.8.0;`, use `pragma solidity 0.8.0;` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 295](contracts/modules/standard/CCTCommon.sol#L295) +
15 Found Instances - ```solidity - function _authorizeCCIPSetAdmin() internal virtual override(CCIPModule) runPolicy {} - ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 306](contracts/modules/standard/CCTCommon.sol#L306) +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol [Line: 3](../../../contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol#L3) ```solidity - function _checkTokenBridge(address caller) internal virtual override(ERC20CrossChainModule) runPolicy {} + pragma solidity ^0.8.20; ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 313](contracts/modules/standard/CCTCommon.sol#L313) +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol [Line: 3](../../../contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol#L3) ```solidity - function _authorizeBurnFrom() internal virtual override(ERC20CrossChainModule) runPolicy {} + pragma solidity ^0.8.20; ``` -- Found in contracts/modules/standard/CCTCommon.sol [Line: 320](contracts/modules/standard/CCTCommon.sol#L320) +- Found in contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol [Line: 3](../../../contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol#L3) ```solidity - function _authorizeSelfBurn() internal virtual override(ERC20CrossChainModule) runPolicy {} + pragma solidity ^0.8.20; ``` -
- - - -## L-7: Loop Contains `require`/`revert` - -Avoid `require` / `revert` statements in a loop because a single bad item can cause the whole transaction to fail. It's better to forgive on fail and return failed elements post processing of the loop - -
4 Found Instances - - -- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 52](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L52) +- Found in contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol [Line: 3](../../../contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol#L3) ```solidity - for (uint256 i = 0; i < ruleAddrs.length; ++i) { + pragma solidity ^0.8.20; ``` -- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 67](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L67) +- Found in contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol [Line: 3](../../../contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol#L3) ```solidity - for (uint256 i = 0; i < rules_.length; ++i) { + pragma solidity ^0.8.20; ``` -- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 111](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L111) +- Found in contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol [Line: 3](../../../contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol#L3) ```solidity - for (uint256 i = 0; i < len; ++i) { + pragma solidity ^0.8.20; ``` -- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 124](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L124) +- Found in contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol [Line: 2](../../../contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L2) ```solidity - for (uint256 i = 0; i < len; ++i) { + pragma solidity ^0.8.20; ``` -
- - - -## L-8: Unused State Variable - -State variable appears to be unused. No analysis has been performed to see if any inline assembly references it. Consider removing this unused variable. - -
1 Found Instances - - -- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 35](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L35) +- Found in contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol [Line: 2](../../../contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol#L2) ```solidity - bytes32 private constant STORAGE_LOCATION = 0xd90ded5881f9295c61e86b2e3b551acbb5fe06f9f79d0cec87ddc5bb60d48e00; + pragma solidity ^0.8.20; ``` -
- - - -## L-9: Costly operations inside loop - -Invoking `SSTORE` operations in loops may waste gas. Use a local variable to hold the loop computation result. - -
2 Found Instances - - -- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 52](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L52) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 3](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L3) ```solidity - for (uint256 i = 0; i < ruleAddrs.length; ++i) { + pragma solidity ^0.8.20; ``` -- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 67](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L67) +- Found in contracts/modules/lite/CCTCMTATBaseERC1404.sol [Line: 3](../../../contracts/modules/lite/CCTCMTATBaseERC1404.sol#L3) ```solidity - for (uint256 i = 0; i < rules_.length; ++i) { + pragma solidity ^0.8.20; ``` -
- - - -## L-10: Unused Import - -Redundant import statement. Consider removing it. - -
9 Found Instances - - -- Found in contracts/modules/demo/DemoImports.sol [Line: 8](contracts/modules/demo/DemoImports.sol#L8) +- Found in contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol [Line: 3](../../../contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L3) ```solidity - import {MockV3Aggregator} from "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol"; + pragma solidity ^0.8.20; ``` -- Found in contracts/modules/demo/DemoImports.sol [Line: 9](contracts/modules/demo/DemoImports.sol#L9) +- Found in contracts/modules/lite/CCTCMTATBasePolicyEngine.sol [Line: 3](../../../contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L3) ```solidity - import {PolicyEngine} from "@chainlink/policy-management/core/PolicyEngine.sol"; + pragma solidity ^0.8.20; ``` -- Found in contracts/modules/demo/DemoImports.sol [Line: 10](contracts/modules/demo/DemoImports.sol#L10) +- Found in contracts/modules/lite/PolicyValidationModuleERC1404.sol [Line: 3](../../../contracts/modules/lite/PolicyValidationModuleERC1404.sol#L3) ```solidity - import {PausePolicy} from "@chainlink/policy-management/policies/PausePolicy.sol"; + pragma solidity ^0.8.20; ``` -- Found in contracts/modules/demo/DemoImports.sol [Line: 11](contracts/modules/demo/DemoImports.sol#L11) +- Found in contracts/modules/lite/ValidationModulePolicyEngine.sol [Line: 3](../../../contracts/modules/lite/ValidationModulePolicyEngine.sol#L3) ```solidity - import {RoleBasedAccessControlPolicy} from "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol"; + pragma solidity ^0.8.20; ``` -- Found in contracts/modules/demo/DemoImports.sol [Line: 12](contracts/modules/demo/DemoImports.sol#L12) +- Found in contracts/modules/standard/CCTCommon.sol [Line: 3](../../../contracts/modules/standard/CCTCommon.sol#L3) ```solidity - import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMintPolicy.sol"; + pragma solidity ^0.8.20; ``` -- Found in contracts/modules/demo/DemoImports.sol [Line: 13](contracts/modules/demo/DemoImports.sol#L13) +
- ```solidity - import {ERC20TransferExtractor} from "@chainlink/policy-management/extractors/ERC20TransferExtractor.sol"; - ``` -- Found in contracts/modules/demo/DemoImports.sol [Line: 14](contracts/modules/demo/DemoImports.sol#L14) - ```solidity - import {SnapshotEngineMock} from "CMTAT/mocks/SnapshotEngineMock.sol"; - ``` +## L-9: Unused State Variable -- Found in contracts/modules/demo/DemoImports.sol [Line: 15](contracts/modules/demo/DemoImports.sol#L15) +State variable appears to be unused. No analysis has been performed to see if any inline assembly references it. Consider removing this unused variable. + +
1 Found Instances - ```solidity - import {DocumentEngineMock} from "CMTAT/mocks/DocumentEngineMock.sol"; - ``` -- Found in contracts/modules/lite/CCTCMTATBaseERC1404.sol [Line: 7](contracts/modules/lite/CCTCMTATBaseERC1404.sol#L7) +- Found in contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol [Line: 37](../../../contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L37) ```solidity - import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; + bytes32 private constant STORAGE_LOCATION = 0xd90ded5881f9295c61e86b2e3b551acbb5fe06f9f79d0cec87ddc5bb60d48e00; ```
diff --git a/doc/audits/tools/slither-report-feedback.md b/doc/audits/tools/slither-report-feedback.md index 6179409..c0abbe4 100644 --- a/doc/audits/tools/slither-report-feedback.md +++ b/doc/audits/tools/slither-report-feedback.md @@ -1,6 +1,6 @@ # Slither Report Feedback -Here is the list of report performed with [Slither](https://github.com/crytic/slither) +Here is the list of report performed with [Slither](https://github.com/crytic/slither) v0.11.5. ```bash slither . --checklist --filter-paths "openzeppelin-contracts|test|forge-std|mocks" > doc/audits/tools/slither-report.md @@ -16,27 +16,19 @@ Report scope: repo-focused filtered checklist run. | ID | Finding | Instances | Assessment | | --- | --- | --- | --- | -| M-1 | `reentrancy-no-eth` | 3 | Contextual; expected external policy-engine calls and hook flow. Manual review required. | -| M-2 | `uninitialized-local` | 6 | Likely analyzer limitation in extractor decode paths; treated as likely false positive. | +| M-1 | `uninitialized-local` | 6 | Likely analyzer limitation in extractor decode paths; treated as likely false positive. | | L-1 | `calls-loop` | 8 | Accepted by design where policy/rule chains iterate; monitor gas/complexity. | -| L-2 | `reentrancy-events` | 2 | Informational reentrancy/event-order signal; no confirmed exploitable issue from checklist alone. | | I-1 | `assembly` | 2 | Expected in storage-slot patterns; informational. | -| I-2 | `dead-code` | 2 | Cleanup candidate; not a direct security issue. | -| I-3 | `naming-convention` | 23 | Style-only informational findings. | +| I-2 | `dead-code` | 1 | False positive | +| I-3 | `naming-convention` | 20 | Style-only informational findings. | ## Executive triage - Updated report is now focused on repo-owned contracts after removing non-target components from scan scope. -- Current findings are mainly pattern-based warnings (`reentrancy-*`, `calls-loop`, `uninitialized-local`) requiring contextual validation. +- Current findings are mainly pattern-based warnings (`calls-loop`, `uninitialized-local`) requiring contextual validation. - No confirmed exploitable vulnerability is established from checklist output alone. ## Key observations - -### `reentrancy-*` (Medium/Low) - -- Many findings involve expected external hooks/policy engine calls and inherited module structure. -- Status: **Requires manual contextual review**, but no immediate confirmed exploitable issue from this checklist output alone. - ### `uninitialized-local` in `ERC20TransferFromExtractor` - Status: **Likely analyzer limitation / false positive** @@ -45,10 +37,4 @@ Report scope: repo-focused filtered checklist run. ### Informational categories - `assembly`, `dead-code`, `naming-convention`. -- Status: **Non-blocking quality signals**. - -## Recommended follow-up - -1. Re-run Slither with strict filtering to focus on repo-owned contracts only. -2. Keep `reentrancy-*` findings in a dedicated manual-review list tied to ACE policy-engine trust boundaries. -3. Track only manually validated findings as actionable. +- Status: **Non-blocking quality signals**. \ No newline at end of file diff --git a/doc/audits/tools/slither-report.md b/doc/audits/tools/slither-report.md index 277f880..7dc917e 100644 --- a/doc/audits/tools/slither-report.md +++ b/doc/audits/tools/slither-report.md @@ -1,113 +1,77 @@ **THIS CHECKLIST IS NOT COMPLETE**. Use `--show-ignored-findings` to show all the results. Summary - - [reentrancy-no-eth](#reentrancy-no-eth) (3 results) (Medium) - [uninitialized-local](#uninitialized-local) (6 results) (Medium) - [calls-loop](#calls-loop) (8 results) (Low) - - [reentrancy-events](#reentrancy-events) (2 results) (Low) - - [assembly](#assembly) (2 results) (Informational) - - [dead-code](#dead-code) (2 results) (Informational) - - [naming-convention](#naming-convention) (23 results) (Informational) -## reentrancy-no-eth + - [assembly](#assembly) (1 results) (Informational) + - [dead-code](#dead-code) (1 results) (Informational) + - [naming-convention](#naming-convention) (20 results) (Informational) +## uninitialized-local Impact: Medium Confidence: Medium - [ ] ID-0 -Reentrancy in [PolicyProtectedUpgradeable.runPolicy()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L51-L63): - External calls: - - [_policyProtectedStorage().policyEngine.run(IPolicyEngine.Payload({selector:msg.sig,sender:msg.sender,data:msg.data,context:context}))](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L56-L58) - State variables written after the call(s): - - [clearContext()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L61) - - [$ = policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L33) - [PolicyProtectedUpgradeable.policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28) can be used in cross function reentrancies: - - [PolicyProtectedUpgradeable._policyProtectedStorage()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35) +[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).from](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L32) is a local variable never initialized -contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L51-L63 +contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L32 - [ ] ID-1 -Reentrancy in [ValidationModulePolicyEngine._transferred(address,address,address,uint256)](contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120): - External calls: - - [policyEngine_.run(IPolicyEngine.Payload({selector:msg.sig,sender:_msgSender(),data:msg.data,context:context}))](contracts/modules/lite/ValidationModulePolicyEngine.sol#L112-L114) - State variables written after the call(s): - - [clearContext()](contracts/modules/lite/ValidationModulePolicyEngine.sol#L116) - - [$ = policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L33) - [PolicyProtectedUpgradeable.policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28) can be used in cross function reentrancies: - - [PolicyProtectedUpgradeable._policyProtectedStorage()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35) +[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).to](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L33) is a local variable never initialized -contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120 +contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L33 - [ ] ID-2 -Reentrancy in [PolicyProtectedUpgradeable._attachPolicyEngine(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99): - External calls: - - [_policyProtectedStorage().policyEngine.detach()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L90-L94) - State variables written after the call(s): - - [PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine),reason)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L93) - - [$ = policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L33) - [PolicyProtectedUpgradeable.policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28) can be used in cross function reentrancies: - - [PolicyProtectedUpgradeable._policyProtectedStorage()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35) - - [_policyProtectedStorage().policyEngine = IPolicyEngine(policyEngine)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L96) - - [$ = policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L33) - [PolicyProtectedUpgradeable.policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28) can be used in cross function reentrancies: - - [PolicyProtectedUpgradeable._policyProtectedStorage()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35) - -contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99 +[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).amount](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L34) is a local variable never initialized + +contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L34 -## uninitialized-local -Impact: Medium -Confidence: Medium - [ ] ID-3 -[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).from](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L32) is a local variable never initialized +[MintBurnExtractor.extract(IPolicyEngine.Payload).account](contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol#L34) is a local variable never initialized -contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L32 +contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol#L34 - [ ] ID-4 -[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).to](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L33) is a local variable never initialized +[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).spender](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L31) is a local variable never initialized -contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L33 +contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L31 - [ ] ID-5 -[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).amount](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L34) is a local variable never initialized +[MintBurnExtractor.extract(IPolicyEngine.Payload).amount](contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol#L35) is a local variable never initialized -contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L34 +contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol#L35 +## calls-loop +Impact: Low +Confidence: Medium - [ ] ID-6 -[MintBurnExtractor.extract(IPolicyEngine.Payload).account](contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L34) is a local variable never initialized +[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L96-L140) has external calls inside a loop: [code = $.rules[i].detectTransferRestrictionFrom(spender,from,to,amount)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L118) -contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L34 +contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L96-L140 - [ ] ID-7 -[ERC20TransferFromExtractor.extract(IPolicyEngine.Payload).spender](contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L31) is a local variable never initialized +[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L96-L140) has external calls inside a loop: [code_scope_4 = $.rules[i_scope_3].detectTransferRestriction(from_scope_0,to_scope_1,amount_scope_2)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L131) -contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol#L31 +contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L96-L140 - [ ] ID-8 -[MintBurnExtractor.extract(IPolicyEngine.Payload).amount](contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L35) is a local variable never initialized +[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L96-L140) has external calls inside a loop: [message_scope_5 = $.rules[i_scope_3].messageForTransferRestriction(code_scope_4)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L133) -contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol#L35 +contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L96-L140 -## calls-loop -Impact: Low -Confidence: Medium - [ ] ID-9 -[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134) has external calls inside a loop: [message = $.rules[i].messageForTransferRestriction(code)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L114) +[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L96-L140) has external calls inside a loop: [message = $.rules[i].messageForTransferRestriction(code)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L120) -contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134 +contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L96-L140 - [ ] ID-10 -[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134) has external calls inside a loop: [code = $.rules[i].detectTransferRestrictionFrom(spender,from,to,amount)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L112) - -contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134 - - - - [ ] ID-11 [ValidationModulePolicyEngine._transferred(address,address,address,uint256)](contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120) has external calls inside a loop: [policyEngine_.run(IPolicyEngine.Payload({selector:msg.sig,sender:_msgSender(),data:msg.data,context:context}))](contracts/modules/lite/ValidationModulePolicyEngine.sol#L112-L114) Calls stack containing the loop: ERC20BurnModule.batchBurn(address[],uint256[]) @@ -118,13 +82,7 @@ contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134 contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120 - - [ ] ID-12 -[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134) has external calls inside a loop: [message_scope_5 = $.rules[i_scope_3].messageForTransferRestriction(code_scope_4)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L127) - -contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134 - - - - [ ] ID-13 + - [ ] ID-11 [ValidationModulePolicyEngine._transferred(address,address,address,uint256)](contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120) has external calls inside a loop: [policyEngine_.run(IPolicyEngine.Payload({selector:msg.sig,sender:_msgSender(),data:msg.data,context:context}))](contracts/modules/lite/ValidationModulePolicyEngine.sol#L112-L114) Calls stack containing the loop: ERC20MintModule.batchMint(address[],uint256[]) @@ -135,7 +93,7 @@ contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134 contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120 - - [ ] ID-14 + - [ ] ID-12 [ValidationModulePolicyEngine._transferred(address,address,address,uint256)](contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120) has external calls inside a loop: [policyEngine_.run(IPolicyEngine.Payload({selector:msg.sig,sender:_msgSender(),data:msg.data,context:context}))](contracts/modules/lite/ValidationModulePolicyEngine.sol#L112-L114) Calls stack containing the loop: ERC20MintModule.batchTransfer(address[],uint256[]) @@ -146,13 +104,7 @@ contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120 contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120 - - [ ] ID-15 -[TransferValidationPolicy.run(address,address,bytes4,bytes[],bytes)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134) has external calls inside a loop: [code_scope_4 = $.rules[i_scope_3].detectTransferRestriction(from_scope_0,to_scope_1,amount_scope_2)](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L125) - -contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134 - - - - [ ] ID-16 + - [ ] ID-13 [ValidationModulePolicyEngine._transferred(address,address,address,uint256)](contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120) has external calls inside a loop: [policyEngine_.run(IPolicyEngine.Payload({selector:msg.sig,sender:_msgSender(),data:msg.data,context:context}))](contracts/modules/lite/ValidationModulePolicyEngine.sol#L112-L114) Calls stack containing the loop: ERC20BurnModule.batchBurn(address[],uint256[],bytes) @@ -163,198 +115,143 @@ contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L94-L134 contracts/modules/lite/ValidationModulePolicyEngine.sol#L102-L120 -## reentrancy-events -Impact: Low -Confidence: Medium - - [ ] ID-17 -Reentrancy in [PolicyProtectedUpgradeable._attachPolicyEngine(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99): - External calls: - - [_policyProtectedStorage().policyEngine.detach()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L90-L94) - Event emitted after the call(s): - - [PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine),reason)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L93) - -contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99 - - - - [ ] ID-18 -Reentrancy in [PolicyProtectedUpgradeable._attachPolicyEngine(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99): - External calls: - - [_policyProtectedStorage().policyEngine.detach()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L90-L94) - - [IPolicyEngine(policyEngine).attach()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L97) - Event emitted after the call(s): - - [PolicyEngineAttached(policyEngine)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L98) - -contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L87-L99 - - ## assembly Impact: Informational Confidence: High - - [ ] ID-19 -[PolicyProtectedUpgradeable._policyProtectedStorage()](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35) uses assembly - - [INLINE ASM](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L32-L34) - -contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L30-L35 - - - - [ ] ID-20 -[TransferValidationPolicy._getStorage()](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L37-L41) uses assembly - - [INLINE ASM](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L38-L40) + - [ ] ID-14 +[TransferValidationPolicy._getStorage()](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L39-L43) uses assembly + - [INLINE ASM](contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L40-L42) -contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L37-L41 +contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol#L39-L43 ## dead-code Impact: Informational Confidence: Medium - - [ ] ID-21 + - [ ] ID-15 [CCTCMTATBasePolicyEngine.__CMTAT_modules_init_unchained(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes)](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L127-L133) is never used and should be removed contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L127-L133 - - [ ] ID-22 -[PolicyProtectedUpgradeable.__PolicyProtected_init(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L37-L40) is never used and should be removed - -contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L37-L40 - - ## naming-convention Impact: Informational Confidence: High - - [ ] ID-23 + - [ ] ID-16 Parameter [CCTCMTATBaseERC20CrossChain.supportsInterface(bytes4)._interfaceId](contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L104) is not in mixedCase contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol#L104 - - [ ] ID-24 + - [ ] ID-17 Parameter [CCTCommon.__CMTAT_init(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643).ExtraInformationAttributes_](contracts/modules/standard/CCTCommon.sol#L91) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L91 - - [ ] ID-25 + - [ ] ID-18 Parameter [CCTCommon.__CMTAT_commonModules_init_unchained(ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes).ERC20Attributes_](contracts/modules/standard/CCTCommon.sol#L138) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L138 - - [ ] ID-26 + - [ ] ID-19 Function [CCTCMTATBasePolicyEngine.__CMTAT_init(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643)](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L85-L112) is not in mixedCase contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L85-L112 - - [ ] ID-27 -Function [PolicyProtectedUpgradeable.__PolicyProtected_init(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L37-L40) is not in mixedCase - -contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L37-L40 - - - - [ ] ID-28 + - [ ] ID-20 Parameter [CCTCommon.supportsInterface(bytes4)._interfaceId](contracts/modules/standard/CCTCommon.sol#L202) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L202 - - [ ] ID-29 + - [ ] ID-21 Function [CCTCMTATBasePolicyEngine.__CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes)](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L117-L122) is not in mixedCase contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L117-L122 - - [ ] ID-30 + - [ ] ID-22 Function [CCTCommon.__CMTAT_commonModules_init_unchained(ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes)](contracts/modules/standard/CCTCommon.sol#L137-L153) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L137-L153 - - [ ] ID-31 + - [ ] ID-23 Function [CCTCMTATBasePolicyEngine.__CMTAT_modules_init_unchained(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes)](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L127-L133) is not in mixedCase contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L127-L133 - - [ ] ID-32 + - [ ] ID-24 Parameter [CCTCMTATBasePolicyEngine.__CMTAT_modules_init_unchained(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes).ERC20Attributes_](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L129) is not in mixedCase contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L129 - - [ ] ID-33 + - [ ] ID-25 Parameter [CCTCMTATBasePolicyEngine.initialize(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643).ERC20Attributes_](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L45) is not in mixedCase contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L45 - - [ ] ID-34 + - [ ] ID-26 Parameter [CCTCommon.__CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes).ERC20Attributes_](contracts/modules/standard/CCTCommon.sol#L121) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L121 - - [ ] ID-35 + - [ ] ID-27 Parameter [CCTCommon.__CMTAT_commonModules_init_unchained(ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes).ExtraInformationModuleAttributes_](contracts/modules/standard/CCTCommon.sol#L139) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L139 - - [ ] ID-36 + - [ ] ID-28 Function [CCTCommon.__CMTAT_init(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643)](contracts/modules/standard/CCTCommon.sol#L88-L115) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L88-L115 - - [ ] ID-37 + - [ ] ID-29 Parameter [CCTCommon.__CMTAT_modules_init_unchained(ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes).ERC20Attributes_](contracts/modules/standard/CCTCommon.sol#L131) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L131 - - [ ] ID-38 -Constant [PolicyProtectedUpgradeable.policyProtectedStorageLocation](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28) is not in UPPER_CASE_WITH_UNDERSCORES - -contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L27-L28 - - - - [ ] ID-39 + - [ ] ID-30 Function [CCTCommon.__CMTAT_modules_init_unchained(ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes)](contracts/modules/standard/CCTCommon.sol#L130-L135) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L130-L135 - - [ ] ID-40 + - [ ] ID-31 Function [CCTCommon.__CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes)](contracts/modules/standard/CCTCommon.sol#L120-L125) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L120-L125 - - [ ] ID-41 + - [ ] ID-32 Parameter [CCTCMTATBasePolicyEngine.__CMTAT_openzeppelin_init_unchained(ICMTATConstructor.ERC20Attributes).ERC20Attributes_](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L118) is not in mixedCase contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L118 - - [ ] ID-42 + - [ ] ID-33 Parameter [CCTCommon.initialize(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643).ERC20Attributes_](contracts/modules/standard/CCTCommon.sol#L51) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L51 - - [ ] ID-43 -Function [PolicyProtectedUpgradeable.__PolicyProtected_init_unchained(address)](contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L42-L44) is not in mixedCase - -contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol#L42-L44 - - - - [ ] ID-44 + - [ ] ID-34 Parameter [CCTCommon.__CMTAT_init(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643).ERC20Attributes_](contracts/modules/standard/CCTCommon.sol#L90) is not in mixedCase contracts/modules/standard/CCTCommon.sol#L90 - - [ ] ID-45 + - [ ] ID-35 Parameter [CCTCMTATBasePolicyEngine.__CMTAT_init(address,ICMTATConstructor.ERC20Attributes,ICMTATConstructor.ExtraInformationAttributes,address,ISnapshotEngine,IERC1643).ERC20Attributes_](contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L87) is not in mixedCase contracts/modules/lite/CCTCMTATBasePolicyEngine.sol#L87 diff --git a/doc/coverage/coverage/base.css b/doc/coverage/base.css similarity index 100% rename from doc/coverage/coverage/base.css rename to doc/coverage/base.css diff --git a/doc/coverage/coverage-final.json b/doc/coverage/coverage-final.json new file mode 100644 index 0000000..2cbbf68 --- /dev/null +++ b/doc/coverage/coverage-final.json @@ -0,0 +1,17 @@ +{ +"contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol":{"l":{"34":51},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol","s":{"1":51},"b":{},"f":{"1":51},"fnMap":{"1":{"name":"constructor","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":42,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":1480}}},"branchMap":{}}, +"contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol":{"l":{"16":1},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol","s":{"1":1},"b":{},"f":{"1":1},"fnMap":{"1":{"name":"constructor","line":14,"loc":{"start":{"line":14,"column":4},"end":{"line":17,"column":4}}}},"statementMap":{"1":{"start":{"line":16,"column":8},"end":{"line":16,"column":29}}},"branchMap":{}}, +"contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol":{"l":{"19":1},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol","s":{"1":1},"b":{"1":[2,1]},"f":{"1":1,"2":2},"fnMap":{"1":{"name":"constructor","line":17,"loc":{"start":{"line":17,"column":4},"end":{"line":20,"column":4}}},"2":{"name":"_authorizeUpgrade","line":27,"loc":{"start":{"line":25,"column":4},"end":{"line":27,"column":79}}}},"statementMap":{"1":{"start":{"line":19,"column":8},"end":{"line":19,"column":29}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":49},"end":{"line":27,"column":49}},{"start":{"line":27,"column":49},"end":{"line":27,"column":49}}]}}}, +"contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol":{"l":{"34":8},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol","s":{"1":8},"b":{},"f":{"1":8},"fnMap":{"1":{"name":"constructor","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":42,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":1416}}},"branchMap":{}}, +"contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol":{"l":{"16":1},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol","s":{"1":1},"b":{},"f":{"1":1},"fnMap":{"1":{"name":"constructor","line":14,"loc":{"start":{"line":14,"column":4},"end":{"line":17,"column":4}}}},"statementMap":{"1":{"start":{"line":16,"column":8},"end":{"line":16,"column":29}}},"branchMap":{}}, +"contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol":{"l":{"17":1},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol","s":{"1":1},"b":{"1":[2,1]},"f":{"1":1,"2":2},"fnMap":{"1":{"name":"constructor","line":15,"loc":{"start":{"line":15,"column":4},"end":{"line":18,"column":4}}},"2":{"name":"_authorizeUpgrade","line":23,"loc":{"start":{"line":23,"column":4},"end":{"line":23,"column":112}}}},"statementMap":{"1":{"start":{"line":17,"column":8},"end":{"line":17,"column":29}}},"branchMap":{"1":{"line":23,"type":"if","locations":[{"start":{"line":23,"column":101},"end":{"line":23,"column":101}},{"start":{"line":23,"column":101},"end":{"line":23,"column":101}}]}}}, +"contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol":{"l":{"31":34,"32":34,"33":34,"34":34,"36":34,"37":30,"38":30,"39":30,"41":4,"42":4,"44":0,"47":34,"48":34,"49":34,"50":34,"51":34,"53":34},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol","s":{"1":34,"2":34,"3":34,"4":34,"5":34,"6":4,"7":34,"8":34},"b":{"1":[30,4],"2":[4,0]},"f":{"1":34},"fnMap":{"1":{"name":"extract","line":28,"loc":{"start":{"line":28,"column":4},"end":{"line":54,"column":4}}}},"statementMap":{"1":{"start":{"line":31,"column":8},"end":{"line":31,"column":23}},"2":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"3":{"start":{"line":33,"column":8},"end":{"line":33,"column":18}},"4":{"start":{"line":34,"column":8},"end":{"line":34,"column":22}},"5":{"start":{"line":36,"column":8},"end":{"line":36,"column":1498}},"6":{"start":{"line":40,"column":15},"end":{"line":40,"column":1711}},"7":{"start":{"line":47,"column":8},"end":{"line":47,"column":82}},"8":{"start":{"line":53,"column":8},"end":{"line":53,"column":21}}},"branchMap":{"1":{"line":36,"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":36,"column":8}},{"start":{"line":36,"column":8},"end":{"line":36,"column":8}}]},"2":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":15},"end":{"line":40,"column":15}},{"start":{"line":40,"column":15},"end":{"line":40,"column":15}}]}}}, +"contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol":{"l":{"34":4,"35":4,"37":4,"38":2,"40":1,"41":1,"43":1,"46":3,"47":3,"48":3,"49":3},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol","s":{"1":4,"2":4,"3":4,"4":2,"5":3,"6":3},"b":{"1":[2,2],"2":[1,1],"3":[1,1]},"f":{"1":4},"fnMap":{"1":{"name":"extract","line":31,"loc":{"start":{"line":31,"column":4},"end":{"line":50,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":23}},"2":{"start":{"line":35,"column":8},"end":{"line":35,"column":22}},"3":{"start":{"line":37,"column":8},"end":{"line":37,"column":1615}},"4":{"start":{"line":39,"column":15},"end":{"line":39,"column":1791}},"5":{"start":{"line":46,"column":8},"end":{"line":46,"column":82}},"6":{"start":{"line":49,"column":8},"end":{"line":49,"column":21}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":8},"end":{"line":37,"column":8}},{"start":{"line":37,"column":8},"end":{"line":37,"column":8}}]},"2":{"line":37,"type":"cond-expr","locations":[{"start":{"line":37,"column":12},"end":{"line":37,"column":44}},{"start":{"line":37,"column":49},"end":{"line":37,"column":86}}]},"3":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":15},"end":{"line":39,"column":15}},{"start":{"line":39,"column":15},"end":{"line":39,"column":15}}]}}}, +"contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol":{"l":{"40":77,"51":37,"52":34,"53":34,"54":34,"55":41,"56":41,"66":2,"67":2,"68":2,"69":2,"70":2,"71":2,"73":2,"80":1,"87":1,"103":39,"104":39,"106":39,"107":4,"110":35,"112":33,"113":33,"114":33,"115":33,"117":33,"118":35,"119":35,"120":13,"121":13,"126":2,"127":2,"128":2,"130":2,"131":2,"132":2,"133":1,"134":1,"139":21},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol","s":{"1":37,"2":34,"3":34,"4":34,"5":41,"6":41,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":1,"14":1,"15":39,"16":39,"17":39,"18":35,"19":33,"20":33,"21":33,"22":33,"23":33,"24":35,"25":35,"26":13,"27":2,"28":2,"29":2,"30":2,"31":2,"32":2,"33":1,"34":21},"b":{"1":[37,0],"2":[34,3],"3":[41,0],"4":[2,1],"5":[2,0],"6":[4,35],"7":[33,2],"8":[13,22],"9":[1,1]},"f":{"1":77,"2":37,"3":2,"4":1,"5":1,"6":39},"fnMap":{"1":{"name":"_getStorage","line":39,"loc":{"start":{"line":39,"column":4},"end":{"line":43,"column":4}}},"2":{"name":"configure","line":50,"loc":{"start":{"line":50,"column":4},"end":{"line":59,"column":4}}},"3":{"name":"setRules","line":65,"loc":{"start":{"line":65,"column":4},"end":{"line":74,"column":4}}},"4":{"name":"rules","line":79,"loc":{"start":{"line":79,"column":4},"end":{"line":81,"column":4}}},"5":{"name":"rulesCount","line":86,"loc":{"start":{"line":86,"column":4},"end":{"line":88,"column":4}}},"6":{"name":"run","line":96,"loc":{"start":{"line":96,"column":4},"end":{"line":140,"column":4}}}},"statementMap":{"1":{"start":{"line":51,"column":8},"end":{"line":51,"column":2053}},"2":{"start":{"line":52,"column":12},"end":{"line":52,"column":76}},"3":{"start":{"line":53,"column":12},"end":{"line":53,"column":63}},"4":{"start":{"line":54,"column":12},"end":{"line":54,"column":2241}},"5":{"start":{"line":55,"column":16},"end":{"line":55,"column":81}},"6":{"start":{"line":56,"column":16},"end":{"line":56,"column":48}},"7":{"start":{"line":66,"column":8},"end":{"line":66,"column":59}},"8":{"start":{"line":67,"column":8},"end":{"line":67,"column":46}},"9":{"start":{"line":69,"column":8},"end":{"line":69,"column":2782}},"10":{"start":{"line":70,"column":12},"end":{"line":70,"column":83}},"11":{"start":{"line":71,"column":12},"end":{"line":71,"column":34}},"12":{"start":{"line":73,"column":8},"end":{"line":73,"column":55}},"13":{"start":{"line":80,"column":8},"end":{"line":80,"column":34}},"14":{"start":{"line":87,"column":8},"end":{"line":87,"column":41}},"15":{"start":{"line":103,"column":8},"end":{"line":103,"column":59}},"16":{"start":{"line":104,"column":8},"end":{"line":104,"column":36}},"17":{"start":{"line":106,"column":8},"end":{"line":106,"column":3947}},"18":{"start":{"line":110,"column":8},"end":{"line":110,"column":4085}},"19":{"start":{"line":112,"column":12},"end":{"line":112,"column":66}},"20":{"start":{"line":113,"column":12},"end":{"line":113,"column":63}},"21":{"start":{"line":114,"column":12},"end":{"line":114,"column":61}},"22":{"start":{"line":115,"column":12},"end":{"line":115,"column":65}},"23":{"start":{"line":117,"column":12},"end":{"line":117,"column":4473}},"24":{"start":{"line":118,"column":16},"end":{"line":118,"column":96}},"25":{"start":{"line":119,"column":16},"end":{"line":119,"column":4627}},"26":{"start":{"line":120,"column":20},"end":{"line":120,"column":90}},"27":{"start":{"line":126,"column":12},"end":{"line":126,"column":63}},"28":{"start":{"line":127,"column":12},"end":{"line":127,"column":61}},"29":{"start":{"line":128,"column":12},"end":{"line":128,"column":65}},"30":{"start":{"line":130,"column":12},"end":{"line":130,"column":5120}},"31":{"start":{"line":131,"column":16},"end":{"line":131,"column":83}},"32":{"start":{"line":132,"column":16},"end":{"line":132,"column":5261}},"33":{"start":{"line":133,"column":20},"end":{"line":133,"column":90}},"34":{"start":{"line":139,"column":8},"end":{"line":139,"column":50}}},"branchMap":{"1":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":68},"end":{"line":50,"column":68}},{"start":{"line":50,"column":68},"end":{"line":50,"column":68}}]},"2":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":51,"column":8}},{"start":{"line":51,"column":8},"end":{"line":51,"column":8}}]},"3":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":16},"end":{"line":55,"column":16}},{"start":{"line":55,"column":16},"end":{"line":55,"column":16}}]},"4":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":56},"end":{"line":65,"column":56}},{"start":{"line":65,"column":56},"end":{"line":65,"column":56}}]},"5":{"line":70,"type":"if","locations":[{"start":{"line":70,"column":12},"end":{"line":70,"column":12}},{"start":{"line":70,"column":12},"end":{"line":70,"column":12}}]},"6":{"line":106,"type":"if","locations":[{"start":{"line":106,"column":8},"end":{"line":106,"column":8}},{"start":{"line":106,"column":8},"end":{"line":106,"column":8}}]},"7":{"line":110,"type":"if","locations":[{"start":{"line":110,"column":8},"end":{"line":110,"column":8}},{"start":{"line":110,"column":8},"end":{"line":110,"column":8}}]},"8":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":16},"end":{"line":119,"column":16}},{"start":{"line":119,"column":16},"end":{"line":119,"column":16}}]},"9":{"line":132,"type":"if","locations":[{"start":{"line":132,"column":16},"end":{"line":132,"column":16}},{"start":{"line":132,"column":16},"end":{"line":132,"column":16}}]}}}, +"contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol":{"l":{"21":30,"29":25,"38":23,"42":0,"51":0,"64":0,"68":0,"72":8,"88":3,"89":3,"93":14,"94":14,"95":12,"100":3,"108":12,"109":10,"110":6,"119":12,"123":0,"132":0,"145":0,"149":0,"153":6,"154":4,"155":0},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol","s":{"1":25,"2":23,"3":0,"4":0,"5":0,"6":0,"7":8,"8":3,"9":14,"10":12,"11":2,"12":10,"13":4,"14":6,"15":12,"16":0,"17":0,"18":0,"19":0,"20":6,"21":2,"22":4,"23":4,"24":0},"b":{"1":[8,17],"2":[8,0],"3":[3,0],"4":[3,0],"5":[2,10],"6":[4,6],"7":[0,0],"8":[2,4],"9":[4,0]},"f":{"1":30,"2":25,"3":23,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":8,"11":3,"12":14,"13":3,"14":12,"15":12,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":6},"fnMap":{"1":{"name":"constructor","line":20,"loc":{"start":{"line":20,"column":4},"end":{"line":22,"column":4}}},"2":{"name":"detectTransferRestriction","line":24,"loc":{"start":{"line":24,"column":4},"end":{"line":30,"column":4}}},"3":{"name":"detectTransferRestrictionFrom","line":32,"loc":{"start":{"line":32,"column":4},"end":{"line":39,"column":4}}},"4":{"name":"canTransfer","line":41,"loc":{"start":{"line":41,"column":4},"end":{"line":43,"column":4}}},"5":{"name":"canTransferFrom","line":45,"loc":{"start":{"line":45,"column":5},"end":{"line":52,"column":4}}},"6":{"name":"transferred","line":54,"loc":{"start":{"line":54,"column":4},"end":{"line":54,"column":108}}},"7":{"name":"transferred","line":56,"loc":{"start":{"line":56,"column":4},"end":{"line":61,"column":30}}},"8":{"name":"supportsInterface","line":63,"loc":{"start":{"line":63,"column":4},"end":{"line":65,"column":4}}},"9":{"name":"canReturnTransferRestrictionCode","line":67,"loc":{"start":{"line":67,"column":4},"end":{"line":69,"column":4}}},"10":{"name":"messageForTransferRestriction","line":71,"loc":{"start":{"line":71,"column":4},"end":{"line":73,"column":4}}},"11":{"name":"onlyOwner","line":87,"loc":{"start":{"line":87,"column":4},"end":{"line":90,"column":4}}},"12":{"name":"constructor","line":92,"loc":{"start":{"line":92,"column":4},"end":{"line":97,"column":4}}},"13":{"name":"setRestricted","line":99,"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":4}}},"14":{"name":"detectTransferRestriction","line":103,"loc":{"start":{"line":103,"column":4},"end":{"line":111,"column":4}}},"15":{"name":"detectTransferRestrictionFrom","line":113,"loc":{"start":{"line":113,"column":4},"end":{"line":120,"column":4}}},"16":{"name":"canTransfer","line":122,"loc":{"start":{"line":122,"column":4},"end":{"line":124,"column":4}}},"17":{"name":"canTransferFrom","line":126,"loc":{"start":{"line":126,"column":4},"end":{"line":133,"column":4}}},"18":{"name":"transferred","line":135,"loc":{"start":{"line":135,"column":4},"end":{"line":135,"column":108}}},"19":{"name":"transferred","line":137,"loc":{"start":{"line":137,"column":4},"end":{"line":142,"column":30}}},"20":{"name":"supportsInterface","line":144,"loc":{"start":{"line":144,"column":4},"end":{"line":146,"column":4}}},"21":{"name":"canReturnTransferRestrictionCode","line":148,"loc":{"start":{"line":148,"column":4},"end":{"line":150,"column":4}}},"22":{"name":"messageForTransferRestriction","line":152,"loc":{"start":{"line":152,"column":4},"end":{"line":156,"column":4}}}},"statementMap":{"1":{"start":{"line":29,"column":8},"end":{"line":29,"column":91}},"2":{"start":{"line":38,"column":8},"end":{"line":38,"column":58}},"3":{"start":{"line":42,"column":8},"end":{"line":42,"column":63}},"4":{"start":{"line":51,"column":8},"end":{"line":51,"column":44}},"5":{"start":{"line":64,"column":8},"end":{"line":64,"column":53}},"6":{"start":{"line":68,"column":8},"end":{"line":68,"column":38}},"7":{"start":{"line":72,"column":8},"end":{"line":72,"column":82}},"8":{"start":{"line":88,"column":8},"end":{"line":88,"column":49}},"9":{"start":{"line":94,"column":8},"end":{"line":94,"column":2794}},"10":{"start":{"line":108,"column":8},"end":{"line":108,"column":52}},"11":{"start":{"line":108,"column":30},"end":{"line":108,"column":52}},"12":{"start":{"line":109,"column":8},"end":{"line":109,"column":48}},"13":{"start":{"line":109,"column":28},"end":{"line":109,"column":48}},"14":{"start":{"line":110,"column":8},"end":{"line":110,"column":52}},"15":{"start":{"line":119,"column":8},"end":{"line":119,"column":58}},"16":{"start":{"line":123,"column":8},"end":{"line":123,"column":63}},"17":{"start":{"line":132,"column":8},"end":{"line":132,"column":44}},"18":{"start":{"line":145,"column":8},"end":{"line":145,"column":53}},"19":{"start":{"line":149,"column":8},"end":{"line":149,"column":63}},"20":{"start":{"line":153,"column":8},"end":{"line":153,"column":66}},"21":{"start":{"line":153,"column":37},"end":{"line":153,"column":66}},"22":{"start":{"line":154,"column":8},"end":{"line":154,"column":67}},"23":{"start":{"line":154,"column":35},"end":{"line":154,"column":67}},"24":{"start":{"line":155,"column":8},"end":{"line":155,"column":29}}},"branchMap":{"1":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":36},"end":{"line":29,"column":50}},{"start":{"line":29,"column":54},"end":{"line":29,"column":90}}]},"2":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":41},"end":{"line":72,"column":64}},{"start":{"line":72,"column":68},"end":{"line":72,"column":81}}]},"3":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":8}},{"start":{"line":88,"column":8},"end":{"line":88,"column":8}}]},"4":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":66},"end":{"line":99,"column":66}},{"start":{"line":99,"column":66},"end":{"line":99,"column":66}}]},"5":{"line":108,"type":"if","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":8}},{"start":{"line":108,"column":8},"end":{"line":108,"column":8}}]},"6":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"7":{"line":149,"type":"cond-expr","locations":[{"start":{"line":149,"column":15},"end":{"line":149,"column":37}},{"start":{"line":149,"column":42},"end":{"line":149,"column":62}}]},"8":{"line":153,"type":"if","locations":[{"start":{"line":153,"column":8},"end":{"line":153,"column":8}},{"start":{"line":153,"column":8},"end":{"line":153,"column":8}}]},"9":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":8},"end":{"line":154,"column":8}},{"start":{"line":154,"column":8},"end":{"line":154,"column":8}}]}}}, +"contracts/modules/lite/CCTCMTATBaseERC1404.sol":{"l":{"30":10,"34":1,"36":9,"48":233,"60":35,"71":8,"72":8,"73":1,"74":1,"75":1,"78":7,"84":6},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/lite/CCTCMTATBaseERC1404.sol","s":{"1":10,"2":1,"3":9,"4":233,"5":35,"6":8,"7":8,"8":1,"9":1,"10":1,"11":7,"12":6},"b":{"1":[1,9],"2":[1,7],"3":[1,0]},"f":{"1":10,"2":233,"3":35,"4":8,"5":6},"fnMap":{"1":{"name":"messageForTransferRestriction","line":27,"loc":{"start":{"line":27,"column":4},"end":{"line":38,"column":4}}},"2":{"name":"canTransfer","line":43,"loc":{"start":{"line":43,"column":4},"end":{"line":49,"column":4}}},"3":{"name":"canTransferFrom","line":54,"loc":{"start":{"line":54,"column":4},"end":{"line":61,"column":4}}},"4":{"name":"_detectTransferRestriction","line":66,"loc":{"start":{"line":66,"column":4},"end":{"line":79,"column":4}}},"5":{"name":"supportsInterface","line":81,"loc":{"start":{"line":81,"column":4},"end":{"line":85,"column":4}}}},"statementMap":{"1":{"start":{"line":30,"column":8},"end":{"line":30,"column":1324}},"2":{"start":{"line":34,"column":12},"end":{"line":34,"column":74}},"3":{"start":{"line":36,"column":12},"end":{"line":36,"column":95}},"4":{"start":{"line":48,"column":8},"end":{"line":48,"column":68}},"5":{"start":{"line":60,"column":8},"end":{"line":60,"column":81}},"6":{"start":{"line":71,"column":8},"end":{"line":71,"column":80}},"7":{"start":{"line":72,"column":8},"end":{"line":72,"column":2858}},"8":{"start":{"line":73,"column":12},"end":{"line":73,"column":88}},"9":{"start":{"line":74,"column":12},"end":{"line":74,"column":2993}},"10":{"start":{"line":75,"column":16},"end":{"line":75,"column":114}},"11":{"start":{"line":78,"column":8},"end":{"line":78,"column":88}},"12":{"start":{"line":84,"column":8},"end":{"line":84,"column":70}}},"branchMap":{"1":{"line":30,"type":"if","locations":[{"start":{"line":30,"column":8},"end":{"line":30,"column":8}},{"start":{"line":30,"column":8},"end":{"line":30,"column":8}}]},"2":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":8},"end":{"line":72,"column":8}},{"start":{"line":72,"column":8},"end":{"line":72,"column":8}}]},"3":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":12},"end":{"line":74,"column":12}},{"start":{"line":74,"column":12},"end":{"line":74,"column":12}}]}}}, +"contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol":{"l":{"29":119,"35":81,"45":29,"54":735,"55":720,"65":144,"66":120,"77":27,"78":18,"85":3,"92":10,"99":10,"106":12,"132":39,"167":943},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol","s":{"1":119,"2":81,"3":29,"4":735,"5":720,"6":144,"7":120,"8":27,"9":18,"10":3,"11":10,"12":10,"13":12,"14":39,"15":943},"b":{"1":[119,3],"2":[6,3],"3":[9,3],"4":[39,12],"5":[15,3],"6":[9,6],"7":[18,6],"8":[12,6]},"f":{"1":119,"2":81,"3":29,"4":735,"5":144,"6":27,"7":3,"8":10,"9":10,"10":12,"11":9,"12":39,"13":9,"14":12,"15":943},"fnMap":{"1":{"name":"approve","line":28,"loc":{"start":{"line":25,"column":4},"end":{"line":30,"column":4}}},"2":{"name":"transfer","line":31,"loc":{"start":{"line":31,"column":4},"end":{"line":36,"column":4}}},"3":{"name":"transferFrom","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":46,"column":4}}},"4":{"name":"_mintOverride","line":50,"loc":{"start":{"line":50,"column":4},"end":{"line":56,"column":4}}},"5":{"name":"_burnOverride","line":61,"loc":{"start":{"line":61,"column":4},"end":{"line":67,"column":4}}},"6":{"name":"_minterTransferOverride","line":72,"loc":{"start":{"line":72,"column":4},"end":{"line":79,"column":4}}},"7":{"name":"decimals","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":86,"column":4}}},"8":{"name":"name","line":91,"loc":{"start":{"line":91,"column":4},"end":{"line":93,"column":4}}},"9":{"name":"symbol","line":98,"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":4}}},"10":{"name":"supportsInterface","line":103,"loc":{"start":{"line":103,"column":4},"end":{"line":109,"column":4}}},"11":{"name":"_authorizeCCIPSetAdmin","line":120,"loc":{"start":{"line":120,"column":4},"end":{"line":120,"column":106}}},"12":{"name":"_checkTokenBridge","line":131,"loc":{"start":{"line":131,"column":4},"end":{"line":133,"column":4}}},"13":{"name":"_authorizeBurnFrom","line":145,"loc":{"start":{"line":140,"column":4},"end":{"line":146,"column":5}}},"14":{"name":"_authorizeSelfBurn","line":158,"loc":{"start":{"line":153,"column":4},"end":{"line":159,"column":5}}},"15":{"name":"_update","line":162,"loc":{"start":{"line":162,"column":4},"end":{"line":168,"column":4}}}},"statementMap":{"1":{"start":{"line":29,"column":8},"end":{"line":29,"column":55}},"2":{"start":{"line":35,"column":8},"end":{"line":35,"column":50}},"3":{"start":{"line":45,"column":8},"end":{"line":45,"column":60}},"4":{"start":{"line":54,"column":8},"end":{"line":54,"column":64}},"5":{"start":{"line":55,"column":8},"end":{"line":55,"column":60}},"6":{"start":{"line":65,"column":8},"end":{"line":65,"column":64}},"7":{"start":{"line":66,"column":8},"end":{"line":66,"column":60}},"8":{"start":{"line":77,"column":8},"end":{"line":77,"column":53}},"9":{"start":{"line":78,"column":8},"end":{"line":78,"column":71}},"10":{"start":{"line":85,"column":8},"end":{"line":85,"column":41}},"11":{"start":{"line":92,"column":8},"end":{"line":92,"column":37}},"12":{"start":{"line":99,"column":8},"end":{"line":99,"column":39}},"13":{"start":{"line":106,"column":8},"end":{"line":106,"column":3715}},"14":{"start":{"line":132,"column":8},"end":{"line":132,"column":68}},"15":{"start":{"line":167,"column":8},"end":{"line":167,"column":56}}},"branchMap":{"1":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":48},"end":{"line":28,"column":48}},{"start":{"line":28,"column":48},"end":{"line":28,"column":48}}]},"2":{"line":107,"type":"cond-expr","locations":[{"start":{"line":107,"column":12},"end":{"line":107,"column":64}},{"start":{"line":108,"column":12},"end":{"line":108,"column":62}}]},"3":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":76},"end":{"line":120,"column":76}},{"start":{"line":120,"column":76},"end":{"line":120,"column":76}}]},"4":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":96},"end":{"line":131,"column":96}},{"start":{"line":131,"column":96},"end":{"line":131,"column":96}}]},"5":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":8},"end":{"line":144,"column":8}},{"start":{"line":144,"column":8},"end":{"line":144,"column":8}}]},"6":{"line":145,"type":"if","locations":[{"start":{"line":145,"column":8},"end":{"line":145,"column":8}},{"start":{"line":145,"column":8},"end":{"line":145,"column":8}}]},"7":{"line":157,"type":"if","locations":[{"start":{"line":157,"column":8},"end":{"line":157,"column":8}},{"start":{"line":157,"column":8},"end":{"line":157,"column":8}}]},"8":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":8},"end":{"line":158,"column":8}},{"start":{"line":158,"column":8},"end":{"line":158,"column":8}}]}}}, +"contracts/modules/lite/CCTCMTATBasePolicyEngine.sol":{"l":{"51":55,"72":55,"95":55,"98":55,"101":55,"104":55,"107":55,"108":55,"111":55,"121":55,"132":0,"146":233,"147":233,"148":88,"150":145,"163":35,"164":35,"165":12,"167":23,"189":1016,"190":998,"199":6},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol","s":{"1":55,"2":55,"3":55,"4":55,"5":55,"6":55,"7":55,"8":55,"9":55,"10":55,"11":0,"12":233,"13":233,"14":88,"15":145,"16":35,"17":35,"18":12,"19":23,"20":1016,"21":998,"22":6},"b":{"1":[55,2],"2":[55,0],"3":[55,0],"4":[55,0],"5":[0,0],"6":[88,145],"7":[12,23],"8":[0,0],"9":[99,6],"10":[37,3],"11":[78,9],"12":[922,76],"13":[3,0]},"f":{"1":55,"2":55,"3":55,"4":55,"5":0,"6":233,"7":35,"8":0,"9":99,"10":37,"11":78,"12":1016,"13":6},"fnMap":{"1":{"name":"initialize","line":50,"loc":{"start":{"line":43,"column":4},"end":{"line":59,"column":4}}},"2":{"name":"_initialize","line":71,"loc":{"start":{"line":64,"column":4},"end":{"line":80,"column":4}}},"3":{"name":"__CMTAT_init","line":92,"loc":{"start":{"line":85,"column":4},"end":{"line":112,"column":4}}},"4":{"name":"__CMTAT_openzeppelin_init_unchained","line":119,"loc":{"start":{"line":117,"column":4},"end":{"line":122,"column":4}}},"5":{"name":"__CMTAT_modules_init_unchained","line":131,"loc":{"start":{"line":127,"column":4},"end":{"line":133,"column":4}}},"6":{"name":"canTransfer","line":141,"loc":{"start":{"line":141,"column":4},"end":{"line":152,"column":4}}},"7":{"name":"canTransferFrom","line":157,"loc":{"start":{"line":157,"column":4},"end":{"line":169,"column":4}}},"8":{"name":"_authorizeAttachPolicyEngine","line":171,"loc":{"start":{"line":171,"column":4},"end":{"line":171,"column":107}}},"9":{"name":"_authorizePause","line":177,"loc":{"start":{"line":177,"column":4},"end":{"line":177,"column":93}}},"10":{"name":"_authorizeDeactivate","line":178,"loc":{"start":{"line":178,"column":4},"end":{"line":178,"column":105}}},"11":{"name":"_authorizeFreeze","line":180,"loc":{"start":{"line":180,"column":4},"end":{"line":180,"column":102}}},"12":{"name":"_checkTransferred","line":183,"loc":{"start":{"line":183,"column":4},"end":{"line":194,"column":4}}},"13":{"name":"supportsInterface","line":196,"loc":{"start":{"line":196,"column":4},"end":{"line":202,"column":4}}}},"statementMap":{"1":{"start":{"line":51,"column":8},"end":{"line":51,"column":2308}},"2":{"start":{"line":72,"column":8},"end":{"line":72,"column":2936}},"3":{"start":{"line":95,"column":8},"end":{"line":95,"column":33}},"4":{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},"5":{"start":{"line":101,"column":8},"end":{"line":101,"column":60}},"6":{"start":{"line":104,"column":8},"end":{"line":104,"column":97}},"7":{"start":{"line":107,"column":8},"end":{"line":107,"column":61}},"8":{"start":{"line":108,"column":8},"end":{"line":108,"column":61}},"9":{"start":{"line":111,"column":8},"end":{"line":111,"column":58}},"10":{"start":{"line":121,"column":8},"end":{"line":121,"column":77}},"11":{"start":{"line":132,"column":8},"end":{"line":132,"column":97}},"12":{"start":{"line":146,"column":8},"end":{"line":146,"column":90}},"13":{"start":{"line":147,"column":8},"end":{"line":147,"column":5666}},"14":{"start":{"line":148,"column":12},"end":{"line":148,"column":24}},"15":{"start":{"line":150,"column":12},"end":{"line":150,"column":76}},"16":{"start":{"line":163,"column":8},"end":{"line":163,"column":90}},"17":{"start":{"line":164,"column":8},"end":{"line":164,"column":6185}},"18":{"start":{"line":165,"column":12},"end":{"line":165,"column":24}},"19":{"start":{"line":167,"column":12},"end":{"line":167,"column":89}},"20":{"start":{"line":189,"column":8},"end":{"line":189,"column":66}},"21":{"start":{"line":190,"column":8},"end":{"line":190,"column":7298}},"22":{"start":{"line":199,"column":8},"end":{"line":199,"column":7697}}},"branchMap":{"1":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":21},"end":{"line":50,"column":21}},{"start":{"line":50,"column":21},"end":{"line":50,"column":21}}]},"2":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":23},"end":{"line":71,"column":23}},{"start":{"line":71,"column":23},"end":{"line":71,"column":23}}]},"3":{"line":92,"type":"if","locations":[{"start":{"line":92,"column":23},"end":{"line":92,"column":23}},{"start":{"line":92,"column":23},"end":{"line":92,"column":23}}]},"4":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":23},"end":{"line":119,"column":23}},{"start":{"line":119,"column":23},"end":{"line":119,"column":23}}]},"5":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":23},"end":{"line":131,"column":23}},{"start":{"line":131,"column":23},"end":{"line":131,"column":23}}]},"6":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":8},"end":{"line":147,"column":8}},{"start":{"line":147,"column":8},"end":{"line":147,"column":8}}]},"7":{"line":164,"type":"if","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":8}},{"start":{"line":164,"column":8},"end":{"line":164,"column":8}}]},"8":{"line":171,"type":"if","locations":[{"start":{"line":171,"column":77},"end":{"line":171,"column":77}},{"start":{"line":171,"column":77},"end":{"line":171,"column":77}}]},"9":{"line":177,"type":"if","locations":[{"start":{"line":177,"column":70},"end":{"line":177,"column":70}},{"start":{"line":177,"column":70},"end":{"line":177,"column":70}}]},"10":{"line":178,"type":"if","locations":[{"start":{"line":178,"column":75},"end":{"line":178,"column":75}},{"start":{"line":178,"column":75},"end":{"line":178,"column":75}}]},"11":{"line":180,"type":"if","locations":[{"start":{"line":180,"column":77},"end":{"line":180,"column":77}},{"start":{"line":180,"column":77},"end":{"line":180,"column":77}}]},"12":{"line":190,"type":"if","locations":[{"start":{"line":190,"column":8},"end":{"line":190,"column":8}},{"start":{"line":190,"column":8},"end":{"line":190,"column":8}}]},"13":{"line":200,"type":"cond-expr","locations":[{"start":{"line":200,"column":12},"end":{"line":200,"column":64}},{"start":{"line":201,"column":12},"end":{"line":201,"column":72}}]}}}, +"contracts/modules/lite/PolicyValidationModuleERC1404.sol":{"l":{"45":9,"46":2,"48":1,"50":1,"52":1,"54":2,"56":1,"58":1,"75":6,"76":6,"77":5,"79":1,"89":3,"90":1,"92":2,"93":2,"94":1,"96":1,"113":7,"114":1,"116":1,"118":1,"120":2,"122":2},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/lite/PolicyValidationModuleERC1404.sol","s":{"1":9,"2":2,"3":7,"4":1,"5":6,"6":1,"7":5,"8":1,"9":4,"10":2,"11":2,"12":1,"13":1,"14":6,"15":6,"16":5,"17":1,"18":3,"19":1,"20":2,"21":2,"22":1,"23":1,"24":7,"25":1,"26":6,"27":1,"28":5,"29":1,"30":4,"31":2,"32":2},"b":{"1":[2,7],"2":[1,6],"3":[1,5],"4":[1,4],"5":[2,2],"6":[1,1],"7":[5,1],"8":[1,2],"9":[1,1],"10":[1,6],"11":[1,5],"12":[1,4],"13":[2,2]},"f":{"1":9,"2":6,"3":3,"4":7},"fnMap":{"1":{"name":"messageForTransferRestriction","line":42,"loc":{"start":{"line":42,"column":4},"end":{"line":60,"column":4}}},"2":{"name":"detectTransferRestriction","line":70,"loc":{"start":{"line":70,"column":4},"end":{"line":81,"column":4}}},"3":{"name":"detectTransferRestrictionFrom","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":99,"column":4}}},"4":{"name":"_detectTransferRestriction","line":108,"loc":{"start":{"line":108,"column":4},"end":{"line":124,"column":4}}}},"statementMap":{"1":{"start":{"line":45,"column":8},"end":{"line":45,"column":1876}},"2":{"start":{"line":46,"column":12},"end":{"line":46,"column":35}},"3":{"start":{"line":47,"column":15},"end":{"line":47,"column":2007}},"4":{"start":{"line":48,"column":12},"end":{"line":48,"column":48}},"5":{"start":{"line":49,"column":15},"end":{"line":49,"column":2164}},"6":{"start":{"line":50,"column":12},"end":{"line":50,"column":53}},"7":{"start":{"line":51,"column":15},"end":{"line":51,"column":2331}},"8":{"start":{"line":52,"column":12},"end":{"line":52,"column":53}},"9":{"start":{"line":53,"column":15},"end":{"line":53,"column":2498}},"10":{"start":{"line":54,"column":12},"end":{"line":54,"column":51}},"11":{"start":{"line":55,"column":15},"end":{"line":55,"column":2661}},"12":{"start":{"line":56,"column":12},"end":{"line":56,"column":56}},"13":{"start":{"line":58,"column":12},"end":{"line":58,"column":36}},"14":{"start":{"line":75,"column":8},"end":{"line":75,"column":70}},"15":{"start":{"line":76,"column":8},"end":{"line":76,"column":3513}},"16":{"start":{"line":77,"column":12},"end":{"line":77,"column":29}},"17":{"start":{"line":79,"column":12},"end":{"line":79,"column":71}},"18":{"start":{"line":89,"column":8},"end":{"line":89,"column":3940}},"19":{"start":{"line":90,"column":12},"end":{"line":90,"column":92}},"20":{"start":{"line":92,"column":12},"end":{"line":92,"column":74}},"21":{"start":{"line":93,"column":12},"end":{"line":93,"column":4168}},"22":{"start":{"line":94,"column":16},"end":{"line":94,"column":33}},"23":{"start":{"line":96,"column":16},"end":{"line":96,"column":75}},"24":{"start":{"line":113,"column":8},"end":{"line":113,"column":4844}},"25":{"start":{"line":114,"column":12},"end":{"line":114,"column":89}},"26":{"start":{"line":115,"column":15},"end":{"line":115,"column":4971}},"27":{"start":{"line":116,"column":12},"end":{"line":116,"column":84}},"28":{"start":{"line":117,"column":15},"end":{"line":117,"column":5088}},"29":{"start":{"line":118,"column":12},"end":{"line":118,"column":89}},"30":{"start":{"line":119,"column":15},"end":{"line":119,"column":5216}},"31":{"start":{"line":120,"column":12},"end":{"line":120,"column":87}},"32":{"start":{"line":122,"column":12},"end":{"line":122,"column":71}}},"branchMap":{"1":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":8},"end":{"line":45,"column":8}},{"start":{"line":45,"column":8},"end":{"line":45,"column":8}}]},"2":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":15},"end":{"line":47,"column":15}},{"start":{"line":47,"column":15},"end":{"line":47,"column":15}}]},"3":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":15},"end":{"line":49,"column":15}},{"start":{"line":49,"column":15},"end":{"line":49,"column":15}}]},"4":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":15},"end":{"line":51,"column":15}},{"start":{"line":51,"column":15},"end":{"line":51,"column":15}}]},"5":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":15},"end":{"line":53,"column":15}},{"start":{"line":53,"column":15},"end":{"line":53,"column":15}}]},"6":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":15},"end":{"line":55,"column":15}},{"start":{"line":55,"column":15},"end":{"line":55,"column":15}}]},"7":{"line":76,"type":"if","locations":[{"start":{"line":76,"column":8},"end":{"line":76,"column":8}},{"start":{"line":76,"column":8},"end":{"line":76,"column":8}}]},"8":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":8},"end":{"line":89,"column":8}},{"start":{"line":89,"column":8},"end":{"line":89,"column":8}}]},"9":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":12},"end":{"line":93,"column":12}},{"start":{"line":93,"column":12},"end":{"line":93,"column":12}}]},"10":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":113,"column":8}},{"start":{"line":113,"column":8},"end":{"line":113,"column":8}}]},"11":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":15},"end":{"line":115,"column":15}},{"start":{"line":115,"column":15},"end":{"line":115,"column":15}}]},"12":{"line":117,"type":"if","locations":[{"start":{"line":117,"column":15},"end":{"line":117,"column":15}},{"start":{"line":117,"column":15},"end":{"line":117,"column":15}}]},"13":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":15},"end":{"line":119,"column":15}},{"start":{"line":119,"column":15},"end":{"line":119,"column":15}}]}}}, +"contracts/modules/lite/ValidationModulePolicyEngine.sol":{"l":{"25":145,"38":23,"46":145,"47":39,"49":106,"59":23,"60":12,"62":11,"72":11,"80":106,"84":118,"85":118,"86":117,"87":117,"92":111,"94":6,"97":1,"108":1001,"109":932,"110":932,"111":931,"112":931,"115":924,"116":2,"119":925},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/lite/ValidationModulePolicyEngine.sol","s":{"1":145,"2":23,"3":145,"4":39,"5":106,"6":23,"7":12,"8":11,"9":11,"10":106,"11":118,"12":118,"13":117,"14":117,"15":111,"16":6,"17":1,"18":1001,"19":932,"20":932,"21":931,"22":931,"23":924,"24":2,"25":925},"b":{"1":[39,106],"2":[12,11],"3":[117,1],"4":[931,1],"5":[2,922]},"f":{"1":145,"2":23,"3":145,"4":23,"5":11,"6":106,"7":118,"8":1001},"fnMap":{"1":{"name":"canTransfer","line":20,"loc":{"start":{"line":20,"column":4},"end":{"line":26,"column":4}}},"2":{"name":"canTransferFrom","line":32,"loc":{"start":{"line":32,"column":4},"end":{"line":39,"column":4}}},"3":{"name":"_canTransfer","line":45,"loc":{"start":{"line":45,"column":4},"end":{"line":51,"column":4}}},"4":{"name":"_canTransferFrom","line":53,"loc":{"start":{"line":53,"column":4},"end":{"line":64,"column":4}}},"5":{"name":"_canTransferFromWithPolicyEngine","line":66,"loc":{"start":{"line":66,"column":4},"end":{"line":73,"column":4}}},"6":{"name":"_canTransferWithPolicyEngine","line":75,"loc":{"start":{"line":75,"column":4},"end":{"line":81,"column":4}}},"7":{"name":"_tryCheckPolicies","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":99,"column":4}}},"8":{"name":"_transferred","line":102,"loc":{"start":{"line":102,"column":4},"end":{"line":120,"column":4}}}},"statementMap":{"1":{"start":{"line":25,"column":8},"end":{"line":25,"column":44}},"2":{"start":{"line":38,"column":8},"end":{"line":38,"column":57}},"3":{"start":{"line":46,"column":8},"end":{"line":46,"column":1819}},"4":{"start":{"line":47,"column":12},"end":{"line":47,"column":24}},"5":{"start":{"line":49,"column":12},"end":{"line":49,"column":64}},"6":{"start":{"line":59,"column":8},"end":{"line":59,"column":2176}},"7":{"start":{"line":60,"column":12},"end":{"line":60,"column":24}},"8":{"start":{"line":62,"column":12},"end":{"line":62,"column":77}},"9":{"start":{"line":72,"column":8},"end":{"line":72,"column":100}},"10":{"start":{"line":80,"column":8},"end":{"line":80,"column":87}},"11":{"start":{"line":84,"column":8},"end":{"line":84,"column":70}},"12":{"start":{"line":85,"column":8},"end":{"line":85,"column":3118}},"13":{"start":{"line":86,"column":12},"end":{"line":86,"column":47}},"14":{"start":{"line":87,"column":12},"end":{"line":87,"column":3227}},"15":{"start":{"line":92,"column":16},"end":{"line":92,"column":27}},"16":{"start":{"line":94,"column":16},"end":{"line":94,"column":28}},"17":{"start":{"line":97,"column":12},"end":{"line":97,"column":23}},"18":{"start":{"line":108,"column":8},"end":{"line":108,"column":62}},"19":{"start":{"line":109,"column":8},"end":{"line":109,"column":70}},"20":{"start":{"line":110,"column":8},"end":{"line":110,"column":3919}},"21":{"start":{"line":111,"column":12},"end":{"line":111,"column":47}},"22":{"start":{"line":112,"column":12},"end":{"line":112,"column":4028}},"23":{"start":{"line":115,"column":12},"end":{"line":115,"column":4193}},"24":{"start":{"line":116,"column":16},"end":{"line":116,"column":29}},"25":{"start":{"line":119,"column":8},"end":{"line":119,"column":19}}},"branchMap":{"1":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":46,"column":8}},{"start":{"line":46,"column":8},"end":{"line":46,"column":8}}]},"2":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":8},"end":{"line":59,"column":8}},{"start":{"line":59,"column":8},"end":{"line":59,"column":8}}]},"3":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":8},"end":{"line":85,"column":8}},{"start":{"line":85,"column":8},"end":{"line":85,"column":8}}]},"4":{"line":110,"type":"if","locations":[{"start":{"line":110,"column":8},"end":{"line":110,"column":8}},{"start":{"line":110,"column":8},"end":{"line":110,"column":8}}]},"5":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":12},"end":{"line":115,"column":12}},{"start":{"line":115,"column":12},"end":{"line":115,"column":12}}]}}}, +"contracts/modules/standard/CCTCommon.sol":{"l":{"57":12,"75":12,"96":12,"99":12,"102":12,"105":12,"107":12,"110":12,"113":12,"114":12,"124":12,"134":12,"142":12,"148":12,"163":48,"173":12,"184":9,"191":13,"198":10,"204":9,"217":376,"227":48,"238":0,"328":478},"path":"/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/standard/CCTCommon.sol","s":{"1":12,"2":12,"3":12,"4":12,"5":12,"6":12,"7":12,"8":12,"9":12,"10":12,"11":12,"12":12,"13":12,"14":12,"15":48,"16":12,"17":9,"18":13,"19":10,"20":9,"21":376,"22":48,"23":0,"24":478},"b":{"1":[12,2],"2":[12,0],"3":[12,0],"4":[12,0],"5":[12,0],"6":[12,0],"7":[48,0],"8":[12,0],"9":[3,3],"10":[3,3],"11":[3,3],"12":[352,24],"13":[33,15],"14":[63,3],"15":[3,3],"16":[48,12],"17":[12,12],"18":[12,3],"19":[3,3],"20":[15,6],"21":[3,3],"22":[3,3]},"f":{"1":12,"2":12,"3":12,"4":12,"5":12,"6":12,"7":48,"8":12,"9":3,"10":9,"11":13,"12":10,"13":9,"14":376,"15":48,"16":0,"17":3,"18":352,"19":33,"20":63,"21":3,"22":48,"23":12,"24":12,"25":3,"26":15,"27":3,"28":3,"29":478},"fnMap":{"1":{"name":"initialize","line":56,"loc":{"start":{"line":49,"column":4},"end":{"line":65,"column":4}}},"2":{"name":"_initialize","line":74,"loc":{"start":{"line":67,"column":4},"end":{"line":83,"column":4}}},"3":{"name":"__CMTAT_init","line":95,"loc":{"start":{"line":88,"column":4},"end":{"line":115,"column":4}}},"4":{"name":"__CMTAT_openzeppelin_init_unchained","line":122,"loc":{"start":{"line":120,"column":4},"end":{"line":125,"column":4}}},"5":{"name":"__CMTAT_modules_init_unchained","line":133,"loc":{"start":{"line":130,"column":4},"end":{"line":135,"column":4}}},"6":{"name":"__CMTAT_commonModules_init_unchained","line":140,"loc":{"start":{"line":137,"column":4},"end":{"line":153,"column":4}}},"7":{"name":"transfer","line":162,"loc":{"start":{"line":159,"column":4},"end":{"line":164,"column":4}}},"8":{"name":"transferFrom","line":172,"loc":{"start":{"line":168,"column":4},"end":{"line":174,"column":4}}},"9":{"name":"_authorizeAttachPolicyEngine","line":176,"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":88}}},"10":{"name":"decimals","line":183,"loc":{"start":{"line":183,"column":4},"end":{"line":185,"column":4}}},"11":{"name":"name","line":190,"loc":{"start":{"line":190,"column":4},"end":{"line":192,"column":4}}},"12":{"name":"symbol","line":197,"loc":{"start":{"line":197,"column":4},"end":{"line":199,"column":4}}},"13":{"name":"supportsInterface","line":201,"loc":{"start":{"line":201,"column":4},"end":{"line":207,"column":4}}},"14":{"name":"_mintOverride","line":213,"loc":{"start":{"line":213,"column":4},"end":{"line":218,"column":4}}},"15":{"name":"_burnOverride","line":223,"loc":{"start":{"line":223,"column":4},"end":{"line":228,"column":4}}},"16":{"name":"_minterTransferOverride","line":233,"loc":{"start":{"line":233,"column":4},"end":{"line":239,"column":4}}},"17":{"name":"_authorizeERC20AttributeManagement","line":247,"loc":{"start":{"line":247,"column":4},"end":{"line":247,"column":104}}},"18":{"name":"_authorizeMint","line":253,"loc":{"start":{"line":253,"column":4},"end":{"line":253,"column":84}}},"19":{"name":"_authorizeBurn","line":259,"loc":{"start":{"line":259,"column":4},"end":{"line":259,"column":84}}},"20":{"name":"_authorizeDocumentManagement","line":265,"loc":{"start":{"line":265,"column":4},"end":{"line":265,"column":103}}},"21":{"name":"_authorizeExtraInfoManagement","line":271,"loc":{"start":{"line":271,"column":4},"end":{"line":271,"column":106}}},"22":{"name":"_authorizeERC20Enforcer","line":277,"loc":{"start":{"line":277,"column":4},"end":{"line":277,"column":100}}},"23":{"name":"_authorizeForcedTransfer","line":283,"loc":{"start":{"line":283,"column":4},"end":{"line":283,"column":101}}},"24":{"name":"_authorizeSnapshots","line":289,"loc":{"start":{"line":289,"column":4},"end":{"line":289,"column":94}}},"25":{"name":"_authorizeCCIPSetAdmin","line":295,"loc":{"start":{"line":295,"column":4},"end":{"line":295,"column":87}}},"26":{"name":"_checkTokenBridge","line":306,"loc":{"start":{"line":306,"column":4},"end":{"line":306,"column":107}}},"27":{"name":"_authorizeBurnFrom","line":313,"loc":{"start":{"line":313,"column":4},"end":{"line":313,"column":94}}},"28":{"name":"_authorizeSelfBurn","line":320,"loc":{"start":{"line":320,"column":4},"end":{"line":320,"column":94}}},"29":{"name":"_update","line":323,"loc":{"start":{"line":323,"column":4},"end":{"line":329,"column":4}}}},"statementMap":{"1":{"start":{"line":57,"column":8},"end":{"line":57,"column":2294}},"2":{"start":{"line":75,"column":8},"end":{"line":75,"column":2857}},"3":{"start":{"line":96,"column":8},"end":{"line":96,"column":38}},"4":{"start":{"line":99,"column":8},"end":{"line":99,"column":33}},"5":{"start":{"line":102,"column":8},"end":{"line":102,"column":32}},"6":{"start":{"line":105,"column":8},"end":{"line":105,"column":60}},"7":{"start":{"line":107,"column":8},"end":{"line":107,"column":57}},"8":{"start":{"line":110,"column":8},"end":{"line":110,"column":84}},"9":{"start":{"line":113,"column":8},"end":{"line":113,"column":61}},"10":{"start":{"line":114,"column":8},"end":{"line":114,"column":61}},"11":{"start":{"line":124,"column":8},"end":{"line":124,"column":77}},"12":{"start":{"line":134,"column":8},"end":{"line":134,"column":90}},"13":{"start":{"line":142,"column":8},"end":{"line":142,"column":5290}},"14":{"start":{"line":148,"column":8},"end":{"line":148,"column":5489}},"15":{"start":{"line":163,"column":8},"end":{"line":163,"column":50}},"16":{"start":{"line":173,"column":8},"end":{"line":173,"column":60}},"17":{"start":{"line":184,"column":8},"end":{"line":184,"column":41}},"18":{"start":{"line":191,"column":8},"end":{"line":191,"column":37}},"19":{"start":{"line":198,"column":8},"end":{"line":198,"column":39}},"20":{"start":{"line":204,"column":8},"end":{"line":204,"column":7490}},"21":{"start":{"line":217,"column":8},"end":{"line":217,"column":52}},"22":{"start":{"line":227,"column":8},"end":{"line":227,"column":52}},"23":{"start":{"line":238,"column":8},"end":{"line":238,"column":63}},"24":{"start":{"line":328,"column":8},"end":{"line":328,"column":56}}},"branchMap":{"1":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":21},"end":{"line":56,"column":21}},{"start":{"line":56,"column":21},"end":{"line":56,"column":21}}]},"2":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":23},"end":{"line":74,"column":23}},{"start":{"line":74,"column":23},"end":{"line":74,"column":23}}]},"3":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":23},"end":{"line":95,"column":23}},{"start":{"line":95,"column":23},"end":{"line":95,"column":23}}]},"4":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":23},"end":{"line":122,"column":23}},{"start":{"line":122,"column":23},"end":{"line":122,"column":23}}]},"5":{"line":133,"type":"if","locations":[{"start":{"line":133,"column":23},"end":{"line":133,"column":23}},{"start":{"line":133,"column":23},"end":{"line":133,"column":23}}]},"6":{"line":140,"type":"if","locations":[{"start":{"line":140,"column":23},"end":{"line":140,"column":23}},{"start":{"line":140,"column":23},"end":{"line":140,"column":23}}]},"7":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":65},"end":{"line":162,"column":65}},{"start":{"line":162,"column":65},"end":{"line":162,"column":65}}]},"8":{"line":172,"type":"if","locations":[{"start":{"line":172,"column":65},"end":{"line":172,"column":65}},{"start":{"line":172,"column":65},"end":{"line":172,"column":65}}]},"9":{"line":176,"type":"if","locations":[{"start":{"line":176,"column":77},"end":{"line":176,"column":77}},{"start":{"line":176,"column":77},"end":{"line":176,"column":77}}]},"10":{"line":205,"type":"cond-expr","locations":[{"start":{"line":205,"column":12},"end":{"line":205,"column":64}},{"start":{"line":206,"column":12},"end":{"line":206,"column":73}}]},"11":{"line":247,"type":"if","locations":[{"start":{"line":247,"column":93},"end":{"line":247,"column":93}},{"start":{"line":247,"column":93},"end":{"line":247,"column":93}}]},"12":{"line":253,"type":"if","locations":[{"start":{"line":253,"column":73},"end":{"line":253,"column":73}},{"start":{"line":253,"column":73},"end":{"line":253,"column":73}}]},"13":{"line":259,"type":"if","locations":[{"start":{"line":259,"column":73},"end":{"line":259,"column":73}},{"start":{"line":259,"column":73},"end":{"line":259,"column":73}}]},"14":{"line":265,"type":"if","locations":[{"start":{"line":265,"column":92},"end":{"line":265,"column":92}},{"start":{"line":265,"column":92},"end":{"line":265,"column":92}}]},"15":{"line":271,"type":"if","locations":[{"start":{"line":271,"column":95},"end":{"line":271,"column":95}},{"start":{"line":271,"column":95},"end":{"line":271,"column":95}}]},"16":{"line":277,"type":"if","locations":[{"start":{"line":277,"column":89},"end":{"line":277,"column":89}},{"start":{"line":277,"column":89},"end":{"line":277,"column":89}}]},"17":{"line":283,"type":"if","locations":[{"start":{"line":283,"column":90},"end":{"line":283,"column":90}},{"start":{"line":283,"column":90},"end":{"line":283,"column":90}}]},"18":{"line":289,"type":"if","locations":[{"start":{"line":289,"column":83},"end":{"line":289,"column":83}},{"start":{"line":289,"column":83},"end":{"line":289,"column":83}}]},"19":{"line":295,"type":"if","locations":[{"start":{"line":295,"column":76},"end":{"line":295,"column":76}},{"start":{"line":295,"column":76},"end":{"line":295,"column":76}}]},"20":{"line":306,"type":"if","locations":[{"start":{"line":306,"column":96},"end":{"line":306,"column":96}},{"start":{"line":306,"column":96},"end":{"line":306,"column":96}}]},"21":{"line":313,"type":"if","locations":[{"start":{"line":313,"column":83},"end":{"line":313,"column":83}},{"start":{"line":313,"column":83},"end":{"line":313,"column":83}}]},"22":{"line":320,"type":"if","locations":[{"start":{"line":320,"column":83},"end":{"line":320,"column":83}},{"start":{"line":320,"column":83},"end":{"line":320,"column":83}}]}}}} diff --git a/doc/coverage/coverage/coverage-final.json b/doc/coverage/coverage/coverage-final.json deleted file mode 100644 index bf2d76c..0000000 --- a/doc/coverage/coverage/coverage-final.json +++ /dev/null @@ -1,20 +0,0 @@ -{ -"contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol":{"l":{"34":47},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol","s":{"1":47},"b":{},"f":{"1":47},"fnMap":{"1":{"name":"constructor","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":42,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":1480}}},"branchMap":{}}, -"contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol":{"l":{"16":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol","s":{"1":1},"b":{},"f":{"1":1},"fnMap":{"1":{"name":"constructor","line":14,"loc":{"start":{"line":14,"column":4},"end":{"line":17,"column":4}}}},"statementMap":{"1":{"start":{"line":16,"column":8},"end":{"line":16,"column":29}}},"branchMap":{}}, -"contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol":{"l":{"19":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol","s":{"1":1},"b":{"1":[2,1]},"f":{"1":1,"2":2},"fnMap":{"1":{"name":"constructor","line":17,"loc":{"start":{"line":17,"column":4},"end":{"line":20,"column":4}}},"2":{"name":"_authorizeUpgrade","line":27,"loc":{"start":{"line":25,"column":4},"end":{"line":27,"column":79}}}},"statementMap":{"1":{"start":{"line":19,"column":8},"end":{"line":19,"column":29}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":49},"end":{"line":27,"column":49}},{"start":{"line":27,"column":49},"end":{"line":27,"column":49}}]}}}, -"contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol":{"l":{"34":8},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol","s":{"1":8},"b":{},"f":{"1":8},"fnMap":{"1":{"name":"constructor","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":42,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":1416}}},"branchMap":{}}, -"contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol":{"l":{"16":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol","s":{"1":1},"b":{},"f":{"1":1},"fnMap":{"1":{"name":"constructor","line":14,"loc":{"start":{"line":14,"column":4},"end":{"line":17,"column":4}}}},"statementMap":{"1":{"start":{"line":16,"column":8},"end":{"line":16,"column":29}}},"branchMap":{}}, -"contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol":{"l":{"17":1},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol","s":{"1":1},"b":{"1":[2,1]},"f":{"1":1,"2":2},"fnMap":{"1":{"name":"constructor","line":15,"loc":{"start":{"line":15,"column":4},"end":{"line":18,"column":4}}},"2":{"name":"_authorizeUpgrade","line":23,"loc":{"start":{"line":23,"column":4},"end":{"line":23,"column":112}}}},"statementMap":{"1":{"start":{"line":17,"column":8},"end":{"line":17,"column":29}}},"branchMap":{"1":{"line":23,"type":"if","locations":[{"start":{"line":23,"column":101},"end":{"line":23,"column":101}},{"start":{"line":23,"column":101},"end":{"line":23,"column":101}}]}}}, -"contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol":{"l":{"31":34,"32":34,"33":34,"34":34,"36":34,"37":30,"38":30,"39":30,"41":4,"42":4,"44":0,"47":34,"48":34,"49":34,"50":34,"51":34,"53":34},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol","s":{"1":34,"2":34,"3":34,"4":34,"5":34,"6":4,"7":34,"8":34},"b":{"1":[30,4],"2":[4,0]},"f":{"1":34},"fnMap":{"1":{"name":"extract","line":28,"loc":{"start":{"line":28,"column":4},"end":{"line":54,"column":4}}}},"statementMap":{"1":{"start":{"line":31,"column":8},"end":{"line":31,"column":23}},"2":{"start":{"line":32,"column":8},"end":{"line":32,"column":20}},"3":{"start":{"line":33,"column":8},"end":{"line":33,"column":18}},"4":{"start":{"line":34,"column":8},"end":{"line":34,"column":22}},"5":{"start":{"line":36,"column":8},"end":{"line":36,"column":1498}},"6":{"start":{"line":40,"column":15},"end":{"line":40,"column":1711}},"7":{"start":{"line":47,"column":8},"end":{"line":47,"column":82}},"8":{"start":{"line":53,"column":8},"end":{"line":53,"column":21}}},"branchMap":{"1":{"line":36,"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":36,"column":8}},{"start":{"line":36,"column":8},"end":{"line":36,"column":8}}]},"2":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":15},"end":{"line":40,"column":15}},{"start":{"line":40,"column":15},"end":{"line":40,"column":15}}]}}}, -"contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol":{"l":{"38":69,"49":33,"50":30,"51":30,"52":30,"53":37,"54":37,"64":2,"65":2,"66":2,"67":2,"68":2,"69":2,"71":2,"78":1,"85":1,"101":35,"102":35,"104":35,"106":33,"107":33,"108":33,"109":33,"111":33,"112":35,"113":35,"114":13,"115":13,"120":2,"121":2,"122":2,"124":2,"125":2,"126":2,"127":1,"128":1,"133":21},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol","s":{"1":33,"2":30,"3":30,"4":30,"5":37,"6":37,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":1,"14":1,"15":35,"16":35,"17":35,"18":33,"19":33,"20":33,"21":33,"22":33,"23":35,"24":35,"25":13,"26":2,"27":2,"28":2,"29":2,"30":2,"31":2,"32":1,"33":21},"b":{"1":[33,0],"2":[30,3],"3":[37,0],"4":[2,1],"5":[2,0],"6":[33,2],"7":[13,22],"8":[1,1]},"f":{"1":69,"2":33,"3":2,"4":1,"5":1,"6":35},"fnMap":{"1":{"name":"_getStorage","line":37,"loc":{"start":{"line":37,"column":4},"end":{"line":41,"column":4}}},"2":{"name":"configure","line":48,"loc":{"start":{"line":48,"column":4},"end":{"line":57,"column":4}}},"3":{"name":"setRules","line":63,"loc":{"start":{"line":63,"column":4},"end":{"line":72,"column":4}}},"4":{"name":"rules","line":77,"loc":{"start":{"line":77,"column":4},"end":{"line":79,"column":4}}},"5":{"name":"rulesCount","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":86,"column":4}}},"6":{"name":"run","line":94,"loc":{"start":{"line":94,"column":4},"end":{"line":134,"column":4}}}},"statementMap":{"1":{"start":{"line":49,"column":8},"end":{"line":49,"column":2016}},"2":{"start":{"line":50,"column":12},"end":{"line":50,"column":76}},"3":{"start":{"line":51,"column":12},"end":{"line":51,"column":63}},"4":{"start":{"line":52,"column":12},"end":{"line":52,"column":2204}},"5":{"start":{"line":53,"column":16},"end":{"line":53,"column":81}},"6":{"start":{"line":54,"column":16},"end":{"line":54,"column":48}},"7":{"start":{"line":64,"column":8},"end":{"line":64,"column":59}},"8":{"start":{"line":65,"column":8},"end":{"line":65,"column":46}},"9":{"start":{"line":67,"column":8},"end":{"line":67,"column":2745}},"10":{"start":{"line":68,"column":12},"end":{"line":68,"column":83}},"11":{"start":{"line":69,"column":12},"end":{"line":69,"column":34}},"12":{"start":{"line":71,"column":8},"end":{"line":71,"column":55}},"13":{"start":{"line":78,"column":8},"end":{"line":78,"column":34}},"14":{"start":{"line":85,"column":8},"end":{"line":85,"column":41}},"15":{"start":{"line":101,"column":8},"end":{"line":101,"column":59}},"16":{"start":{"line":102,"column":8},"end":{"line":102,"column":36}},"17":{"start":{"line":104,"column":8},"end":{"line":104,"column":3910}},"18":{"start":{"line":106,"column":12},"end":{"line":106,"column":66}},"19":{"start":{"line":107,"column":12},"end":{"line":107,"column":63}},"20":{"start":{"line":108,"column":12},"end":{"line":108,"column":61}},"21":{"start":{"line":109,"column":12},"end":{"line":109,"column":65}},"22":{"start":{"line":111,"column":12},"end":{"line":111,"column":4298}},"23":{"start":{"line":112,"column":16},"end":{"line":112,"column":96}},"24":{"start":{"line":113,"column":16},"end":{"line":113,"column":4452}},"25":{"start":{"line":114,"column":20},"end":{"line":114,"column":90}},"26":{"start":{"line":120,"column":12},"end":{"line":120,"column":63}},"27":{"start":{"line":121,"column":12},"end":{"line":121,"column":61}},"28":{"start":{"line":122,"column":12},"end":{"line":122,"column":65}},"29":{"start":{"line":124,"column":12},"end":{"line":124,"column":4945}},"30":{"start":{"line":125,"column":16},"end":{"line":125,"column":83}},"31":{"start":{"line":126,"column":16},"end":{"line":126,"column":5086}},"32":{"start":{"line":127,"column":20},"end":{"line":127,"column":90}},"33":{"start":{"line":133,"column":8},"end":{"line":133,"column":50}}},"branchMap":{"1":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":68},"end":{"line":48,"column":68}},{"start":{"line":48,"column":68},"end":{"line":48,"column":68}}]},"2":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":8},"end":{"line":49,"column":8}},{"start":{"line":49,"column":8},"end":{"line":49,"column":8}}]},"3":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":16},"end":{"line":53,"column":16}},{"start":{"line":53,"column":16},"end":{"line":53,"column":16}}]},"4":{"line":63,"type":"if","locations":[{"start":{"line":63,"column":56},"end":{"line":63,"column":56}},{"start":{"line":63,"column":56},"end":{"line":63,"column":56}}]},"5":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":12},"end":{"line":68,"column":12}},{"start":{"line":68,"column":12},"end":{"line":68,"column":12}}]},"6":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":8},"end":{"line":104,"column":8}},{"start":{"line":104,"column":8},"end":{"line":104,"column":8}}]},"7":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":16},"end":{"line":113,"column":16}},{"start":{"line":113,"column":16},"end":{"line":113,"column":16}}]},"8":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":16},"end":{"line":126,"column":16}},{"start":{"line":126,"column":16},"end":{"line":126,"column":16}}]}}}, -"contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol":{"l":{"16":1,"20":0,"24":8,"28":1,"29":1,"30":1,"35":5,"45":0,"51":0,"61":0,"67":0,"81":7,"87":1,"91":1,"95":1,"101":1,"117":1,"126":3},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol","s":{"1":0,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0,"8":7,"9":1,"10":1,"11":3},"b":{"1":[1,0],"2":[7,0],"3":[1,1],"4":[1,1],"5":[1,0],"6":[1,0]},"f":{"1":1,"2":0,"3":8,"4":1,"5":5,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":7,"21":1,"22":1,"23":1,"24":1,"25":1,"26":0,"27":0,"28":0,"29":0,"30":1,"31":3},"fnMap":{"1":{"name":"setDetachShouldRevert","line":15,"loc":{"start":{"line":15,"column":4},"end":{"line":17,"column":4}}},"2":{"name":"typeAndVersion","line":19,"loc":{"start":{"line":19,"column":4},"end":{"line":21,"column":4}}},"3":{"name":"attach","line":23,"loc":{"start":{"line":23,"column":4},"end":{"line":25,"column":4}}},"4":{"name":"detach","line":27,"loc":{"start":{"line":27,"column":4},"end":{"line":32,"column":4}}},"5":{"name":"run","line":34,"loc":{"start":{"line":34,"column":4},"end":{"line":36,"column":4}}},"6":{"name":"check","line":38,"loc":{"start":{"line":38,"column":4},"end":{"line":38,"column":61}}},"7":{"name":"setExtractor","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":40,"column":67}}},"8":{"name":"setExtractors","line":42,"loc":{"start":{"line":42,"column":4},"end":{"line":42,"column":79}}},"9":{"name":"getExtractor","line":44,"loc":{"start":{"line":44,"column":4},"end":{"line":46,"column":4}}},"10":{"name":"setPolicyMapper","line":48,"loc":{"start":{"line":48,"column":4},"end":{"line":48,"column":71}}},"11":{"name":"getPolicyMapper","line":50,"loc":{"start":{"line":50,"column":4},"end":{"line":52,"column":4}}},"12":{"name":"addPolicy","line":54,"loc":{"start":{"line":54,"column":4},"end":{"line":54,"column":93}}},"13":{"name":"addPolicyAt","line":56,"loc":{"start":{"line":56,"column":4},"end":{"line":56,"column":104}}},"14":{"name":"removePolicy","line":58,"loc":{"start":{"line":58,"column":4},"end":{"line":58,"column":76}}},"15":{"name":"getPolicies","line":60,"loc":{"start":{"line":60,"column":4},"end":{"line":62,"column":4}}},"16":{"name":"setPolicyConfiguration","line":64,"loc":{"start":{"line":64,"column":4},"end":{"line":64,"column":102}}},"17":{"name":"getPolicyConfigVersion","line":66,"loc":{"start":{"line":66,"column":4},"end":{"line":68,"column":4}}},"18":{"name":"setDefaultPolicyAllow","line":70,"loc":{"start":{"line":70,"column":4},"end":{"line":70,"column":65}}},"19":{"name":"setTargetDefaultPolicyAllow","line":72,"loc":{"start":{"line":72,"column":4},"end":{"line":72,"column":80}}},"20":{"name":"initialize","line":80,"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":4}}},"21":{"name":"_authorizeAttachPolicyEngine","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":84,"column":75}}},"22":{"name":"guardedRun","line":86,"loc":{"start":{"line":86,"column":4},"end":{"line":88,"column":4}}},"23":{"name":"guardedRunWithContext","line":90,"loc":{"start":{"line":90,"column":4},"end":{"line":92,"column":4}}},"24":{"name":"guardedRunAndRevert","line":94,"loc":{"start":{"line":94,"column":4},"end":{"line":96,"column":4}}},"25":{"name":"initializeWithPolicyEngine","line":100,"loc":{"start":{"line":100,"column":4},"end":{"line":102,"column":4}}},"26":{"name":"_authorizeAttachPolicyEngine","line":104,"loc":{"start":{"line":104,"column":4},"end":{"line":104,"column":75}}},"27":{"name":"_authorizePause","line":106,"loc":{"start":{"line":106,"column":4},"end":{"line":106,"column":55}}},"28":{"name":"_authorizeDeactivate","line":108,"loc":{"start":{"line":108,"column":4},"end":{"line":108,"column":60}}},"29":{"name":"_authorizeFreeze","line":110,"loc":{"start":{"line":110,"column":4},"end":{"line":110,"column":56}}},"30":{"name":"exposedTryCheckPolicies","line":112,"loc":{"start":{"line":112,"column":4},"end":{"line":118,"column":4}}},"31":{"name":"exposedTransferred","line":120,"loc":{"start":{"line":120,"column":4},"end":{"line":127,"column":4}}}},"statementMap":{"1":{"start":{"line":20,"column":8},"end":{"line":20,"column":39}},"2":{"start":{"line":29,"column":8},"end":{"line":29,"column":987}},"3":{"start":{"line":30,"column":12},"end":{"line":30,"column":52}},"4":{"start":{"line":45,"column":8},"end":{"line":45,"column":25}},"5":{"start":{"line":51,"column":8},"end":{"line":51,"column":25}},"6":{"start":{"line":61,"column":8},"end":{"line":61,"column":31}},"7":{"start":{"line":67,"column":8},"end":{"line":67,"column":16}},"8":{"start":{"line":81,"column":8},"end":{"line":81,"column":43}},"9":{"start":{"line":101,"column":8},"end":{"line":101,"column":43}},"10":{"start":{"line":117,"column":8},"end":{"line":117,"column":56}},"11":{"start":{"line":126,"column":8},"end":{"line":126,"column":53}}},"branchMap":{"1":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":8},"end":{"line":29,"column":8}},{"start":{"line":29,"column":8},"end":{"line":29,"column":8}}]},"2":{"line":80,"type":"if","locations":[{"start":{"line":80,"column":55},"end":{"line":80,"column":55}},{"start":{"line":80,"column":55},"end":{"line":80,"column":55}}]},"3":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":35},"end":{"line":86,"column":35}},{"start":{"line":86,"column":35},"end":{"line":86,"column":35}}]},"4":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":68},"end":{"line":90,"column":68}},{"start":{"line":90,"column":68},"end":{"line":90,"column":68}}]},"5":{"line":94,"type":"if","locations":[{"start":{"line":94,"column":44},"end":{"line":94,"column":44}},{"start":{"line":94,"column":44},"end":{"line":94,"column":44}}]},"6":{"line":100,"type":"if","locations":[{"start":{"line":100,"column":71},"end":{"line":100,"column":71}},{"start":{"line":100,"column":71},"end":{"line":100,"column":71}}]}}}, -"contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol":{"l":{"21":26,"29":25,"38":23,"42":0,"51":0,"64":0,"68":0,"72":8,"88":3,"89":3,"93":14,"94":14,"95":12,"100":3,"108":12,"109":10,"110":6,"119":12,"123":0,"132":0,"145":0,"149":0,"153":6,"154":4,"155":0},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol","s":{"1":25,"2":23,"3":0,"4":0,"5":0,"6":0,"7":8,"8":3,"9":14,"10":12,"11":2,"12":10,"13":4,"14":6,"15":12,"16":0,"17":0,"18":0,"19":0,"20":6,"21":2,"22":4,"23":4,"24":0},"b":{"1":[8,17],"2":[8,0],"3":[3,0],"4":[3,0],"5":[2,10],"6":[4,6],"7":[0,0],"8":[2,4],"9":[4,0]},"f":{"1":26,"2":25,"3":23,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":8,"11":3,"12":14,"13":3,"14":12,"15":12,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":6},"fnMap":{"1":{"name":"constructor","line":20,"loc":{"start":{"line":20,"column":4},"end":{"line":22,"column":4}}},"2":{"name":"detectTransferRestriction","line":24,"loc":{"start":{"line":24,"column":4},"end":{"line":30,"column":4}}},"3":{"name":"detectTransferRestrictionFrom","line":32,"loc":{"start":{"line":32,"column":4},"end":{"line":39,"column":4}}},"4":{"name":"canTransfer","line":41,"loc":{"start":{"line":41,"column":4},"end":{"line":43,"column":4}}},"5":{"name":"canTransferFrom","line":45,"loc":{"start":{"line":45,"column":4},"end":{"line":52,"column":4}}},"6":{"name":"transferred","line":54,"loc":{"start":{"line":54,"column":4},"end":{"line":54,"column":108}}},"7":{"name":"transferred","line":56,"loc":{"start":{"line":56,"column":4},"end":{"line":61,"column":30}}},"8":{"name":"supportsInterface","line":63,"loc":{"start":{"line":63,"column":4},"end":{"line":65,"column":4}}},"9":{"name":"canReturnTransferRestrictionCode","line":67,"loc":{"start":{"line":67,"column":4},"end":{"line":69,"column":4}}},"10":{"name":"messageForTransferRestriction","line":71,"loc":{"start":{"line":71,"column":4},"end":{"line":73,"column":4}}},"11":{"name":"onlyOwner","line":87,"loc":{"start":{"line":87,"column":4},"end":{"line":90,"column":4}}},"12":{"name":"constructor","line":92,"loc":{"start":{"line":92,"column":4},"end":{"line":97,"column":4}}},"13":{"name":"setRestricted","line":99,"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":4}}},"14":{"name":"detectTransferRestriction","line":103,"loc":{"start":{"line":103,"column":4},"end":{"line":111,"column":4}}},"15":{"name":"detectTransferRestrictionFrom","line":113,"loc":{"start":{"line":113,"column":4},"end":{"line":120,"column":4}}},"16":{"name":"canTransfer","line":122,"loc":{"start":{"line":122,"column":4},"end":{"line":124,"column":4}}},"17":{"name":"canTransferFrom","line":126,"loc":{"start":{"line":126,"column":4},"end":{"line":133,"column":4}}},"18":{"name":"transferred","line":135,"loc":{"start":{"line":135,"column":4},"end":{"line":135,"column":108}}},"19":{"name":"transferred","line":137,"loc":{"start":{"line":137,"column":4},"end":{"line":142,"column":30}}},"20":{"name":"supportsInterface","line":144,"loc":{"start":{"line":144,"column":4},"end":{"line":146,"column":4}}},"21":{"name":"canReturnTransferRestrictionCode","line":148,"loc":{"start":{"line":148,"column":4},"end":{"line":150,"column":4}}},"22":{"name":"messageForTransferRestriction","line":152,"loc":{"start":{"line":152,"column":4},"end":{"line":156,"column":4}}}},"statementMap":{"1":{"start":{"line":29,"column":8},"end":{"line":29,"column":91}},"2":{"start":{"line":38,"column":8},"end":{"line":38,"column":58}},"3":{"start":{"line":42,"column":8},"end":{"line":42,"column":63}},"4":{"start":{"line":51,"column":8},"end":{"line":51,"column":44}},"5":{"start":{"line":64,"column":8},"end":{"line":64,"column":53}},"6":{"start":{"line":68,"column":8},"end":{"line":68,"column":38}},"7":{"start":{"line":72,"column":8},"end":{"line":72,"column":82}},"8":{"start":{"line":88,"column":8},"end":{"line":88,"column":49}},"9":{"start":{"line":94,"column":8},"end":{"line":94,"column":2793}},"10":{"start":{"line":108,"column":8},"end":{"line":108,"column":52}},"11":{"start":{"line":108,"column":30},"end":{"line":108,"column":52}},"12":{"start":{"line":109,"column":8},"end":{"line":109,"column":48}},"13":{"start":{"line":109,"column":28},"end":{"line":109,"column":48}},"14":{"start":{"line":110,"column":8},"end":{"line":110,"column":52}},"15":{"start":{"line":119,"column":8},"end":{"line":119,"column":58}},"16":{"start":{"line":123,"column":8},"end":{"line":123,"column":63}},"17":{"start":{"line":132,"column":8},"end":{"line":132,"column":44}},"18":{"start":{"line":145,"column":8},"end":{"line":145,"column":53}},"19":{"start":{"line":149,"column":8},"end":{"line":149,"column":63}},"20":{"start":{"line":153,"column":8},"end":{"line":153,"column":66}},"21":{"start":{"line":153,"column":37},"end":{"line":153,"column":66}},"22":{"start":{"line":154,"column":8},"end":{"line":154,"column":67}},"23":{"start":{"line":154,"column":35},"end":{"line":154,"column":67}},"24":{"start":{"line":155,"column":8},"end":{"line":155,"column":29}}},"branchMap":{"1":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":36},"end":{"line":29,"column":50}},{"start":{"line":29,"column":54},"end":{"line":29,"column":90}}]},"2":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":41},"end":{"line":72,"column":64}},{"start":{"line":72,"column":68},"end":{"line":72,"column":81}}]},"3":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":8}},{"start":{"line":88,"column":8},"end":{"line":88,"column":8}}]},"4":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":66},"end":{"line":99,"column":66}},{"start":{"line":99,"column":66},"end":{"line":99,"column":66}}]},"5":{"line":108,"type":"if","locations":[{"start":{"line":108,"column":8},"end":{"line":108,"column":8}},{"start":{"line":108,"column":8},"end":{"line":108,"column":8}}]},"6":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"7":{"line":149,"type":"cond-expr","locations":[{"start":{"line":149,"column":15},"end":{"line":149,"column":37}},{"start":{"line":149,"column":42},"end":{"line":149,"column":62}}]},"8":{"line":153,"type":"if","locations":[{"start":{"line":153,"column":8},"end":{"line":153,"column":8}},{"start":{"line":153,"column":8},"end":{"line":153,"column":8}}]},"9":{"line":154,"type":"if","locations":[{"start":{"line":154,"column":8},"end":{"line":154,"column":8}},{"start":{"line":154,"column":8},"end":{"line":154,"column":8}}]}}}, -"contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol":{"l":{"34":4,"35":4,"37":4,"38":2,"40":1,"41":1,"43":1,"46":3,"47":3,"48":3,"49":3},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol","s":{"1":4,"2":4,"3":4,"4":2,"5":3,"6":3},"b":{"1":[2,2],"2":[1,1],"3":[1,1]},"f":{"1":4},"fnMap":{"1":{"name":"extract","line":31,"loc":{"start":{"line":31,"column":4},"end":{"line":50,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":23}},"2":{"start":{"line":35,"column":8},"end":{"line":35,"column":22}},"3":{"start":{"line":37,"column":8},"end":{"line":37,"column":1615}},"4":{"start":{"line":39,"column":15},"end":{"line":39,"column":1791}},"5":{"start":{"line":46,"column":8},"end":{"line":46,"column":82}},"6":{"start":{"line":49,"column":8},"end":{"line":49,"column":21}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":8},"end":{"line":37,"column":8}},{"start":{"line":37,"column":8},"end":{"line":37,"column":8}}]},"2":{"line":37,"type":"cond-expr","locations":[{"start":{"line":37,"column":12},"end":{"line":37,"column":44}},{"start":{"line":37,"column":49},"end":{"line":37,"column":86}}]},"3":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":15},"end":{"line":39,"column":15}},{"start":{"line":39,"column":15},"end":{"line":39,"column":15}}]}}}, -"contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol":{"l":{"32":4374,"38":8,"39":8,"43":71,"52":703,"53":1,"55":702,"56":702,"59":612,"60":593,"61":1,"70":2,"71":1,"73":1,"76":1,"83":7,"84":4,"88":75,"89":74,"90":4,"93":1,"96":74,"97":74,"98":74,"103":1054,"108":3,"113":1752,"118":4,"127":11},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol","s":{"1":8,"2":8,"3":71,"4":703,"5":702,"6":702,"7":593,"8":1,"9":2,"10":1,"11":7,"12":4,"13":75,"14":74,"15":4,"16":1,"17":74,"18":74,"19":1054,"20":1752,"21":11},"b":{"1":[8,0],"2":[71,0],"3":[1,702],"4":[1,592],"5":[1,1],"6":[74,1],"7":[4,70],"8":[4,0]},"f":{"1":4374,"2":8,"3":71,"4":703,"5":2,"6":7,"7":75,"8":1054,"9":3,"10":1752,"11":4,"12":11},"fnMap":{"1":{"name":"_policyProtectedStorage","line":30,"loc":{"start":{"line":30,"column":4},"end":{"line":35,"column":4}}},"2":{"name":"__PolicyProtected_init","line":37,"loc":{"start":{"line":37,"column":4},"end":{"line":40,"column":4}}},"3":{"name":"__PolicyProtected_init_unchained","line":42,"loc":{"start":{"line":42,"column":4},"end":{"line":44,"column":4}}},"4":{"name":"runPolicy","line":51,"loc":{"start":{"line":51,"column":4},"end":{"line":63,"column":4}}},"5":{"name":"runPolicyWithContext","line":69,"loc":{"start":{"line":69,"column":4},"end":{"line":77,"column":4}}},"6":{"name":"attachPolicyEngine","line":82,"loc":{"start":{"line":82,"column":4},"end":{"line":85,"column":4}}},"7":{"name":"_attachPolicyEngine","line":87,"loc":{"start":{"line":87,"column":4},"end":{"line":99,"column":4}}},"8":{"name":"getPolicyEngine","line":102,"loc":{"start":{"line":102,"column":4},"end":{"line":104,"column":4}}},"9":{"name":"setContext","line":107,"loc":{"start":{"line":107,"column":4},"end":{"line":109,"column":4}}},"10":{"name":"getContext","line":112,"loc":{"start":{"line":112,"column":4},"end":{"line":114,"column":4}}},"11":{"name":"clearContext","line":117,"loc":{"start":{"line":117,"column":4},"end":{"line":119,"column":4}}},"12":{"name":"supportsInterface","line":124,"loc":{"start":{"line":124,"column":4},"end":{"line":128,"column":4}}}},"statementMap":{"1":{"start":{"line":38,"column":8},"end":{"line":38,"column":22}},"2":{"start":{"line":39,"column":8},"end":{"line":39,"column":53}},"3":{"start":{"line":43,"column":8},"end":{"line":43,"column":40}},"4":{"start":{"line":52,"column":8},"end":{"line":52,"column":2588}},"5":{"start":{"line":55,"column":8},"end":{"line":55,"column":43}},"6":{"start":{"line":56,"column":8},"end":{"line":56,"column":2778}},"7":{"start":{"line":60,"column":8},"end":{"line":60,"column":2965}},"8":{"start":{"line":61,"column":12},"end":{"line":61,"column":25}},"9":{"start":{"line":70,"column":8},"end":{"line":70,"column":3303}},"10":{"start":{"line":73,"column":8},"end":{"line":73,"column":3448}},"11":{"start":{"line":83,"column":8},"end":{"line":83,"column":49}},"12":{"start":{"line":84,"column":8},"end":{"line":84,"column":40}},"13":{"start":{"line":88,"column":8},"end":{"line":88,"column":75}},"14":{"start":{"line":89,"column":8},"end":{"line":89,"column":4090}},"15":{"start":{"line":90,"column":12},"end":{"line":90,"column":4175}},"16":{"start":{"line":93,"column":16},"end":{"line":93,"column":102}},"17":{"start":{"line":97,"column":8},"end":{"line":97,"column":43}},"18":{"start":{"line":98,"column":8},"end":{"line":98,"column":47}},"19":{"start":{"line":103,"column":8},"end":{"line":103,"column":62}},"20":{"start":{"line":113,"column":8},"end":{"line":113,"column":66}},"21":{"start":{"line":127,"column":8},"end":{"line":127,"column":104}}},"branchMap":{"1":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":67},"end":{"line":37,"column":67}},{"start":{"line":37,"column":67},"end":{"line":37,"column":67}}]},"2":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":77},"end":{"line":42,"column":77}},{"start":{"line":42,"column":77},"end":{"line":42,"column":77}}]},"3":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":8},"end":{"line":52,"column":8}},{"start":{"line":52,"column":8},"end":{"line":52,"column":8}}]},"4":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":60,"column":8}},{"start":{"line":60,"column":8},"end":{"line":60,"column":8}}]},"5":{"line":70,"type":"if","locations":[{"start":{"line":70,"column":8},"end":{"line":70,"column":8}},{"start":{"line":70,"column":8},"end":{"line":70,"column":8}}]},"6":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":8}},{"start":{"line":88,"column":8},"end":{"line":88,"column":8}}]},"7":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":8},"end":{"line":89,"column":8}},{"start":{"line":89,"column":8},"end":{"line":89,"column":8}}]},"8":{"line":127,"type":"cond-expr","locations":[{"start":{"line":127,"column":15},"end":{"line":127,"column":63}},{"start":{"line":127,"column":68},"end":{"line":127,"column":103}}]}}}, -"contracts/modules/demo/DemoImports.sol":{"l":{},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/demo/DemoImports.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, -"contracts/modules/lite/CCTCMTATBaseERC1404.sol":{"l":{"31":10,"35":1,"37":9,"49":233,"61":35,"72":8,"73":8,"74":1,"75":1,"76":1,"79":7,"85":6},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC1404.sol","s":{"1":10,"2":1,"3":9,"4":233,"5":35,"6":8,"7":8,"8":1,"9":1,"10":1,"11":7,"12":6},"b":{"1":[1,9],"2":[1,7],"3":[1,0]},"f":{"1":10,"2":233,"3":35,"4":8,"5":6},"fnMap":{"1":{"name":"messageForTransferRestriction","line":28,"loc":{"start":{"line":28,"column":4},"end":{"line":39,"column":4}}},"2":{"name":"canTransfer","line":44,"loc":{"start":{"line":44,"column":4},"end":{"line":50,"column":4}}},"3":{"name":"canTransferFrom","line":55,"loc":{"start":{"line":55,"column":4},"end":{"line":62,"column":4}}},"4":{"name":"_detectTransferRestriction","line":67,"loc":{"start":{"line":67,"column":4},"end":{"line":80,"column":4}}},"5":{"name":"supportsInterface","line":82,"loc":{"start":{"line":82,"column":4},"end":{"line":86,"column":4}}}},"statementMap":{"1":{"start":{"line":31,"column":8},"end":{"line":31,"column":1405}},"2":{"start":{"line":35,"column":12},"end":{"line":35,"column":74}},"3":{"start":{"line":37,"column":12},"end":{"line":37,"column":95}},"4":{"start":{"line":49,"column":8},"end":{"line":49,"column":68}},"5":{"start":{"line":61,"column":8},"end":{"line":61,"column":81}},"6":{"start":{"line":72,"column":8},"end":{"line":72,"column":80}},"7":{"start":{"line":73,"column":8},"end":{"line":73,"column":2947}},"8":{"start":{"line":74,"column":12},"end":{"line":74,"column":88}},"9":{"start":{"line":75,"column":12},"end":{"line":75,"column":3082}},"10":{"start":{"line":76,"column":16},"end":{"line":76,"column":114}},"11":{"start":{"line":79,"column":8},"end":{"line":79,"column":88}},"12":{"start":{"line":85,"column":8},"end":{"line":85,"column":70}}},"branchMap":{"1":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":8},"end":{"line":31,"column":8}},{"start":{"line":31,"column":8},"end":{"line":31,"column":8}}]},"2":{"line":73,"type":"if","locations":[{"start":{"line":73,"column":8},"end":{"line":73,"column":8}},{"start":{"line":73,"column":8},"end":{"line":73,"column":8}}]},"3":{"line":75,"type":"if","locations":[{"start":{"line":75,"column":12},"end":{"line":75,"column":12}},{"start":{"line":75,"column":12},"end":{"line":75,"column":12}}]}}}, -"contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol":{"l":{"29":119,"35":81,"45":29,"54":731,"55":716,"65":144,"66":120,"77":27,"78":18,"85":3,"92":10,"99":10,"106":12,"132":39,"167":939},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol","s":{"1":119,"2":81,"3":29,"4":731,"5":716,"6":144,"7":120,"8":27,"9":18,"10":3,"11":10,"12":10,"13":12,"14":39,"15":939},"b":{"1":[119,3],"2":[6,3],"3":[9,3],"4":[39,12],"5":[15,3],"6":[9,6],"7":[18,6],"8":[12,6]},"f":{"1":119,"2":81,"3":29,"4":731,"5":144,"6":27,"7":3,"8":10,"9":10,"10":12,"11":9,"12":39,"13":9,"14":12,"15":939},"fnMap":{"1":{"name":"approve","line":28,"loc":{"start":{"line":25,"column":4},"end":{"line":30,"column":4}}},"2":{"name":"transfer","line":31,"loc":{"start":{"line":31,"column":4},"end":{"line":36,"column":4}}},"3":{"name":"transferFrom","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":46,"column":4}}},"4":{"name":"_mintOverride","line":50,"loc":{"start":{"line":50,"column":4},"end":{"line":56,"column":4}}},"5":{"name":"_burnOverride","line":61,"loc":{"start":{"line":61,"column":4},"end":{"line":67,"column":4}}},"6":{"name":"_minterTransferOverride","line":72,"loc":{"start":{"line":72,"column":4},"end":{"line":79,"column":4}}},"7":{"name":"decimals","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":86,"column":4}}},"8":{"name":"name","line":91,"loc":{"start":{"line":91,"column":4},"end":{"line":93,"column":4}}},"9":{"name":"symbol","line":98,"loc":{"start":{"line":98,"column":4},"end":{"line":100,"column":4}}},"10":{"name":"supportsInterface","line":103,"loc":{"start":{"line":103,"column":4},"end":{"line":109,"column":4}}},"11":{"name":"_authorizeCCIPSetAdmin","line":120,"loc":{"start":{"line":120,"column":4},"end":{"line":120,"column":106}}},"12":{"name":"_checkTokenBridge","line":131,"loc":{"start":{"line":131,"column":4},"end":{"line":133,"column":4}}},"13":{"name":"_authorizeBurnFrom","line":145,"loc":{"start":{"line":140,"column":4},"end":{"line":146,"column":5}}},"14":{"name":"_authorizeSelfBurn","line":158,"loc":{"start":{"line":153,"column":4},"end":{"line":159,"column":5}}},"15":{"name":"_update","line":162,"loc":{"start":{"line":162,"column":4},"end":{"line":168,"column":4}}}},"statementMap":{"1":{"start":{"line":29,"column":8},"end":{"line":29,"column":55}},"2":{"start":{"line":35,"column":8},"end":{"line":35,"column":50}},"3":{"start":{"line":45,"column":8},"end":{"line":45,"column":60}},"4":{"start":{"line":54,"column":8},"end":{"line":54,"column":64}},"5":{"start":{"line":55,"column":8},"end":{"line":55,"column":60}},"6":{"start":{"line":65,"column":8},"end":{"line":65,"column":64}},"7":{"start":{"line":66,"column":8},"end":{"line":66,"column":60}},"8":{"start":{"line":77,"column":8},"end":{"line":77,"column":53}},"9":{"start":{"line":78,"column":8},"end":{"line":78,"column":71}},"10":{"start":{"line":85,"column":8},"end":{"line":85,"column":41}},"11":{"start":{"line":92,"column":8},"end":{"line":92,"column":37}},"12":{"start":{"line":99,"column":8},"end":{"line":99,"column":39}},"13":{"start":{"line":106,"column":8},"end":{"line":106,"column":3715}},"14":{"start":{"line":132,"column":8},"end":{"line":132,"column":68}},"15":{"start":{"line":167,"column":8},"end":{"line":167,"column":56}}},"branchMap":{"1":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":48},"end":{"line":28,"column":48}},{"start":{"line":28,"column":48},"end":{"line":28,"column":48}}]},"2":{"line":107,"type":"cond-expr","locations":[{"start":{"line":107,"column":12},"end":{"line":107,"column":64}},{"start":{"line":108,"column":12},"end":{"line":108,"column":62}}]},"3":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":76},"end":{"line":120,"column":76}},{"start":{"line":120,"column":76},"end":{"line":120,"column":76}}]},"4":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":96},"end":{"line":131,"column":96}},{"start":{"line":131,"column":96},"end":{"line":131,"column":96}}]},"5":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":8},"end":{"line":144,"column":8}},{"start":{"line":144,"column":8},"end":{"line":144,"column":8}}]},"6":{"line":145,"type":"if","locations":[{"start":{"line":145,"column":8},"end":{"line":145,"column":8}},{"start":{"line":145,"column":8},"end":{"line":145,"column":8}}]},"7":{"line":157,"type":"if","locations":[{"start":{"line":157,"column":8},"end":{"line":157,"column":8}},{"start":{"line":157,"column":8},"end":{"line":157,"column":8}}]},"8":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":8},"end":{"line":158,"column":8}},{"start":{"line":158,"column":8},"end":{"line":158,"column":8}}]}}}, -"contracts/modules/lite/CCTCMTATBasePolicyEngine.sol":{"l":{"51":51,"72":51,"95":51,"98":51,"101":51,"104":51,"107":51,"108":51,"111":51,"121":51,"132":0,"146":233,"147":233,"148":88,"150":145,"163":35,"164":35,"165":12,"167":23,"189":1012,"190":994,"199":6},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol","s":{"1":51,"2":51,"3":51,"4":51,"5":51,"6":51,"7":51,"8":51,"9":51,"10":51,"11":0,"12":233,"13":233,"14":88,"15":145,"16":35,"17":35,"18":12,"19":23,"20":1012,"21":994,"22":6},"b":{"1":[51,2],"2":[51,0],"3":[51,0],"4":[51,0],"5":[0,0],"6":[88,145],"7":[12,23],"8":[0,0],"9":[99,6],"10":[37,3],"11":[78,9],"12":[918,76],"13":[3,0]},"f":{"1":51,"2":51,"3":51,"4":51,"5":0,"6":233,"7":35,"8":0,"9":99,"10":37,"11":78,"12":1012,"13":6},"fnMap":{"1":{"name":"initialize","line":50,"loc":{"start":{"line":43,"column":4},"end":{"line":59,"column":4}}},"2":{"name":"_initialize","line":71,"loc":{"start":{"line":64,"column":4},"end":{"line":80,"column":4}}},"3":{"name":"__CMTAT_init","line":92,"loc":{"start":{"line":85,"column":4},"end":{"line":112,"column":4}}},"4":{"name":"__CMTAT_openzeppelin_init_unchained","line":119,"loc":{"start":{"line":117,"column":4},"end":{"line":122,"column":4}}},"5":{"name":"__CMTAT_modules_init_unchained","line":131,"loc":{"start":{"line":127,"column":4},"end":{"line":133,"column":4}}},"6":{"name":"canTransfer","line":141,"loc":{"start":{"line":141,"column":4},"end":{"line":152,"column":4}}},"7":{"name":"canTransferFrom","line":157,"loc":{"start":{"line":157,"column":4},"end":{"line":169,"column":4}}},"8":{"name":"_authorizeAttachPolicyEngine","line":171,"loc":{"start":{"line":171,"column":4},"end":{"line":171,"column":107}}},"9":{"name":"_authorizePause","line":177,"loc":{"start":{"line":177,"column":4},"end":{"line":177,"column":93}}},"10":{"name":"_authorizeDeactivate","line":178,"loc":{"start":{"line":178,"column":4},"end":{"line":178,"column":105}}},"11":{"name":"_authorizeFreeze","line":180,"loc":{"start":{"line":180,"column":4},"end":{"line":180,"column":102}}},"12":{"name":"_checkTransferred","line":183,"loc":{"start":{"line":183,"column":4},"end":{"line":194,"column":4}}},"13":{"name":"supportsInterface","line":196,"loc":{"start":{"line":196,"column":4},"end":{"line":202,"column":4}}}},"statementMap":{"1":{"start":{"line":51,"column":8},"end":{"line":51,"column":2292}},"2":{"start":{"line":72,"column":8},"end":{"line":72,"column":2920}},"3":{"start":{"line":95,"column":8},"end":{"line":95,"column":33}},"4":{"start":{"line":98,"column":8},"end":{"line":98,"column":32}},"5":{"start":{"line":101,"column":8},"end":{"line":101,"column":60}},"6":{"start":{"line":104,"column":8},"end":{"line":104,"column":97}},"7":{"start":{"line":107,"column":8},"end":{"line":107,"column":61}},"8":{"start":{"line":108,"column":8},"end":{"line":108,"column":61}},"9":{"start":{"line":111,"column":8},"end":{"line":111,"column":54}},"10":{"start":{"line":121,"column":8},"end":{"line":121,"column":77}},"11":{"start":{"line":132,"column":8},"end":{"line":132,"column":97}},"12":{"start":{"line":146,"column":8},"end":{"line":146,"column":90}},"13":{"start":{"line":147,"column":8},"end":{"line":147,"column":5646}},"14":{"start":{"line":148,"column":12},"end":{"line":148,"column":24}},"15":{"start":{"line":150,"column":12},"end":{"line":150,"column":76}},"16":{"start":{"line":163,"column":8},"end":{"line":163,"column":90}},"17":{"start":{"line":164,"column":8},"end":{"line":164,"column":6165}},"18":{"start":{"line":165,"column":12},"end":{"line":165,"column":24}},"19":{"start":{"line":167,"column":12},"end":{"line":167,"column":89}},"20":{"start":{"line":189,"column":8},"end":{"line":189,"column":66}},"21":{"start":{"line":190,"column":8},"end":{"line":190,"column":7278}},"22":{"start":{"line":199,"column":8},"end":{"line":199,"column":7669}}},"branchMap":{"1":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":21},"end":{"line":50,"column":21}},{"start":{"line":50,"column":21},"end":{"line":50,"column":21}}]},"2":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":23},"end":{"line":71,"column":23}},{"start":{"line":71,"column":23},"end":{"line":71,"column":23}}]},"3":{"line":92,"type":"if","locations":[{"start":{"line":92,"column":23},"end":{"line":92,"column":23}},{"start":{"line":92,"column":23},"end":{"line":92,"column":23}}]},"4":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":23},"end":{"line":119,"column":23}},{"start":{"line":119,"column":23},"end":{"line":119,"column":23}}]},"5":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":23},"end":{"line":131,"column":23}},{"start":{"line":131,"column":23},"end":{"line":131,"column":23}}]},"6":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":8},"end":{"line":147,"column":8}},{"start":{"line":147,"column":8},"end":{"line":147,"column":8}}]},"7":{"line":164,"type":"if","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":8}},{"start":{"line":164,"column":8},"end":{"line":164,"column":8}}]},"8":{"line":171,"type":"if","locations":[{"start":{"line":171,"column":77},"end":{"line":171,"column":77}},{"start":{"line":171,"column":77},"end":{"line":171,"column":77}}]},"9":{"line":177,"type":"if","locations":[{"start":{"line":177,"column":70},"end":{"line":177,"column":70}},{"start":{"line":177,"column":70},"end":{"line":177,"column":70}}]},"10":{"line":178,"type":"if","locations":[{"start":{"line":178,"column":75},"end":{"line":178,"column":75}},{"start":{"line":178,"column":75},"end":{"line":178,"column":75}}]},"11":{"line":180,"type":"if","locations":[{"start":{"line":180,"column":77},"end":{"line":180,"column":77}},{"start":{"line":180,"column":77},"end":{"line":180,"column":77}}]},"12":{"line":190,"type":"if","locations":[{"start":{"line":190,"column":8},"end":{"line":190,"column":8}},{"start":{"line":190,"column":8},"end":{"line":190,"column":8}}]},"13":{"line":200,"type":"cond-expr","locations":[{"start":{"line":200,"column":12},"end":{"line":200,"column":64}},{"start":{"line":201,"column":12},"end":{"line":201,"column":68}}]}}}, -"contracts/modules/lite/PolicyValidationModuleERC1404.sol":{"l":{"45":9,"46":2,"48":1,"50":1,"52":1,"54":2,"56":1,"58":1,"75":6,"76":6,"77":5,"79":1,"89":3,"90":1,"92":2,"93":2,"94":1,"96":1,"113":7,"114":1,"116":1,"118":1,"120":2,"122":2},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/PolicyValidationModuleERC1404.sol","s":{"1":9,"2":2,"3":7,"4":1,"5":6,"6":1,"7":5,"8":1,"9":4,"10":2,"11":2,"12":1,"13":1,"14":6,"15":6,"16":5,"17":1,"18":3,"19":1,"20":2,"21":2,"22":1,"23":1,"24":7,"25":1,"26":6,"27":1,"28":5,"29":1,"30":4,"31":2,"32":2},"b":{"1":[2,7],"2":[1,6],"3":[1,5],"4":[1,4],"5":[2,2],"6":[1,1],"7":[5,1],"8":[1,2],"9":[1,1],"10":[1,6],"11":[1,5],"12":[1,4],"13":[2,2]},"f":{"1":9,"2":6,"3":3,"4":7},"fnMap":{"1":{"name":"messageForTransferRestriction","line":42,"loc":{"start":{"line":42,"column":4},"end":{"line":60,"column":4}}},"2":{"name":"detectTransferRestriction","line":70,"loc":{"start":{"line":70,"column":4},"end":{"line":81,"column":4}}},"3":{"name":"detectTransferRestrictionFrom","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":99,"column":4}}},"4":{"name":"_detectTransferRestriction","line":108,"loc":{"start":{"line":108,"column":4},"end":{"line":124,"column":4}}}},"statementMap":{"1":{"start":{"line":45,"column":8},"end":{"line":45,"column":1876}},"2":{"start":{"line":46,"column":12},"end":{"line":46,"column":35}},"3":{"start":{"line":47,"column":15},"end":{"line":47,"column":2007}},"4":{"start":{"line":48,"column":12},"end":{"line":48,"column":48}},"5":{"start":{"line":49,"column":15},"end":{"line":49,"column":2164}},"6":{"start":{"line":50,"column":12},"end":{"line":50,"column":53}},"7":{"start":{"line":51,"column":15},"end":{"line":51,"column":2331}},"8":{"start":{"line":52,"column":12},"end":{"line":52,"column":53}},"9":{"start":{"line":53,"column":15},"end":{"line":53,"column":2498}},"10":{"start":{"line":54,"column":12},"end":{"line":54,"column":51}},"11":{"start":{"line":55,"column":15},"end":{"line":55,"column":2661}},"12":{"start":{"line":56,"column":12},"end":{"line":56,"column":56}},"13":{"start":{"line":58,"column":12},"end":{"line":58,"column":36}},"14":{"start":{"line":75,"column":8},"end":{"line":75,"column":70}},"15":{"start":{"line":76,"column":8},"end":{"line":76,"column":3513}},"16":{"start":{"line":77,"column":12},"end":{"line":77,"column":29}},"17":{"start":{"line":79,"column":12},"end":{"line":79,"column":71}},"18":{"start":{"line":89,"column":8},"end":{"line":89,"column":3940}},"19":{"start":{"line":90,"column":12},"end":{"line":90,"column":92}},"20":{"start":{"line":92,"column":12},"end":{"line":92,"column":74}},"21":{"start":{"line":93,"column":12},"end":{"line":93,"column":4168}},"22":{"start":{"line":94,"column":16},"end":{"line":94,"column":33}},"23":{"start":{"line":96,"column":16},"end":{"line":96,"column":75}},"24":{"start":{"line":113,"column":8},"end":{"line":113,"column":4844}},"25":{"start":{"line":114,"column":12},"end":{"line":114,"column":89}},"26":{"start":{"line":115,"column":15},"end":{"line":115,"column":4971}},"27":{"start":{"line":116,"column":12},"end":{"line":116,"column":84}},"28":{"start":{"line":117,"column":15},"end":{"line":117,"column":5088}},"29":{"start":{"line":118,"column":12},"end":{"line":118,"column":89}},"30":{"start":{"line":119,"column":15},"end":{"line":119,"column":5216}},"31":{"start":{"line":120,"column":12},"end":{"line":120,"column":87}},"32":{"start":{"line":122,"column":12},"end":{"line":122,"column":71}}},"branchMap":{"1":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":8},"end":{"line":45,"column":8}},{"start":{"line":45,"column":8},"end":{"line":45,"column":8}}]},"2":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":15},"end":{"line":47,"column":15}},{"start":{"line":47,"column":15},"end":{"line":47,"column":15}}]},"3":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":15},"end":{"line":49,"column":15}},{"start":{"line":49,"column":15},"end":{"line":49,"column":15}}]},"4":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":15},"end":{"line":51,"column":15}},{"start":{"line":51,"column":15},"end":{"line":51,"column":15}}]},"5":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":15},"end":{"line":53,"column":15}},{"start":{"line":53,"column":15},"end":{"line":53,"column":15}}]},"6":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":15},"end":{"line":55,"column":15}},{"start":{"line":55,"column":15},"end":{"line":55,"column":15}}]},"7":{"line":76,"type":"if","locations":[{"start":{"line":76,"column":8},"end":{"line":76,"column":8}},{"start":{"line":76,"column":8},"end":{"line":76,"column":8}}]},"8":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":8},"end":{"line":89,"column":8}},{"start":{"line":89,"column":8},"end":{"line":89,"column":8}}]},"9":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":12},"end":{"line":93,"column":12}},{"start":{"line":93,"column":12},"end":{"line":93,"column":12}}]},"10":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":8},"end":{"line":113,"column":8}},{"start":{"line":113,"column":8},"end":{"line":113,"column":8}}]},"11":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":15},"end":{"line":115,"column":15}},{"start":{"line":115,"column":15},"end":{"line":115,"column":15}}]},"12":{"line":117,"type":"if","locations":[{"start":{"line":117,"column":15},"end":{"line":117,"column":15}},{"start":{"line":117,"column":15},"end":{"line":117,"column":15}}]},"13":{"line":119,"type":"if","locations":[{"start":{"line":119,"column":15},"end":{"line":119,"column":15}},{"start":{"line":119,"column":15},"end":{"line":119,"column":15}}]}}}, -"contracts/modules/lite/ValidationModulePolicyEngine.sol":{"l":{"25":145,"38":23,"46":145,"47":39,"49":106,"59":23,"60":12,"62":11,"72":11,"80":106,"84":118,"85":118,"86":117,"87":117,"92":111,"94":6,"97":1,"108":997,"109":928,"110":928,"111":927,"112":927,"115":920,"116":2,"119":921},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/ValidationModulePolicyEngine.sol","s":{"1":145,"2":23,"3":145,"4":39,"5":106,"6":23,"7":12,"8":11,"9":11,"10":106,"11":118,"12":118,"13":117,"14":117,"15":111,"16":6,"17":1,"18":997,"19":928,"20":928,"21":927,"22":927,"23":920,"24":2,"25":921},"b":{"1":[39,106],"2":[12,11],"3":[117,1],"4":[927,1],"5":[2,918]},"f":{"1":145,"2":23,"3":145,"4":23,"5":11,"6":106,"7":118,"8":997},"fnMap":{"1":{"name":"canTransfer","line":20,"loc":{"start":{"line":20,"column":4},"end":{"line":26,"column":4}}},"2":{"name":"canTransferFrom","line":32,"loc":{"start":{"line":32,"column":4},"end":{"line":39,"column":4}}},"3":{"name":"_canTransfer","line":45,"loc":{"start":{"line":45,"column":4},"end":{"line":51,"column":4}}},"4":{"name":"_canTransferFrom","line":53,"loc":{"start":{"line":53,"column":4},"end":{"line":64,"column":4}}},"5":{"name":"_canTransferFromWithPolicyEngine","line":66,"loc":{"start":{"line":66,"column":4},"end":{"line":73,"column":4}}},"6":{"name":"_canTransferWithPolicyEngine","line":75,"loc":{"start":{"line":75,"column":4},"end":{"line":81,"column":4}}},"7":{"name":"_tryCheckPolicies","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":99,"column":4}}},"8":{"name":"_transferred","line":102,"loc":{"start":{"line":102,"column":4},"end":{"line":120,"column":4}}}},"statementMap":{"1":{"start":{"line":25,"column":8},"end":{"line":25,"column":44}},"2":{"start":{"line":38,"column":8},"end":{"line":38,"column":57}},"3":{"start":{"line":46,"column":8},"end":{"line":46,"column":1793}},"4":{"start":{"line":47,"column":12},"end":{"line":47,"column":24}},"5":{"start":{"line":49,"column":12},"end":{"line":49,"column":64}},"6":{"start":{"line":59,"column":8},"end":{"line":59,"column":2150}},"7":{"start":{"line":60,"column":12},"end":{"line":60,"column":24}},"8":{"start":{"line":62,"column":12},"end":{"line":62,"column":77}},"9":{"start":{"line":72,"column":8},"end":{"line":72,"column":100}},"10":{"start":{"line":80,"column":8},"end":{"line":80,"column":87}},"11":{"start":{"line":84,"column":8},"end":{"line":84,"column":70}},"12":{"start":{"line":85,"column":8},"end":{"line":85,"column":3092}},"13":{"start":{"line":86,"column":12},"end":{"line":86,"column":47}},"14":{"start":{"line":87,"column":12},"end":{"line":87,"column":3201}},"15":{"start":{"line":92,"column":16},"end":{"line":92,"column":27}},"16":{"start":{"line":94,"column":16},"end":{"line":94,"column":28}},"17":{"start":{"line":97,"column":12},"end":{"line":97,"column":23}},"18":{"start":{"line":108,"column":8},"end":{"line":108,"column":62}},"19":{"start":{"line":109,"column":8},"end":{"line":109,"column":70}},"20":{"start":{"line":110,"column":8},"end":{"line":110,"column":3893}},"21":{"start":{"line":111,"column":12},"end":{"line":111,"column":47}},"22":{"start":{"line":112,"column":12},"end":{"line":112,"column":4002}},"23":{"start":{"line":115,"column":12},"end":{"line":115,"column":4167}},"24":{"start":{"line":116,"column":16},"end":{"line":116,"column":29}},"25":{"start":{"line":119,"column":8},"end":{"line":119,"column":19}}},"branchMap":{"1":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":46,"column":8}},{"start":{"line":46,"column":8},"end":{"line":46,"column":8}}]},"2":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":8},"end":{"line":59,"column":8}},{"start":{"line":59,"column":8},"end":{"line":59,"column":8}}]},"3":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":8},"end":{"line":85,"column":8}},{"start":{"line":85,"column":8},"end":{"line":85,"column":8}}]},"4":{"line":110,"type":"if","locations":[{"start":{"line":110,"column":8},"end":{"line":110,"column":8}},{"start":{"line":110,"column":8},"end":{"line":110,"column":8}}]},"5":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":12},"end":{"line":115,"column":12}},{"start":{"line":115,"column":12},"end":{"line":115,"column":12}}]}}}, -"contracts/modules/standard/CCTCommon.sol":{"l":{"57":12,"75":12,"96":12,"99":12,"102":12,"105":12,"107":12,"110":12,"113":12,"114":12,"124":12,"134":12,"142":12,"148":12,"163":48,"173":12,"184":9,"191":13,"198":10,"204":9,"217":376,"227":48,"238":0,"328":478},"path":"/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/standard/CCTCommon.sol","s":{"1":12,"2":12,"3":12,"4":12,"5":12,"6":12,"7":12,"8":12,"9":12,"10":12,"11":12,"12":12,"13":12,"14":12,"15":48,"16":12,"17":9,"18":13,"19":10,"20":9,"21":376,"22":48,"23":0,"24":478},"b":{"1":[12,2],"2":[12,0],"3":[12,0],"4":[12,0],"5":[12,0],"6":[12,0],"7":[48,0],"8":[12,0],"9":[3,3],"10":[3,3],"11":[3,3],"12":[352,24],"13":[33,15],"14":[63,3],"15":[3,3],"16":[48,12],"17":[12,12],"18":[12,3],"19":[3,3],"20":[15,6],"21":[3,3],"22":[3,3]},"f":{"1":12,"2":12,"3":12,"4":12,"5":12,"6":12,"7":48,"8":12,"9":3,"10":9,"11":13,"12":10,"13":9,"14":376,"15":48,"16":0,"17":3,"18":352,"19":33,"20":63,"21":3,"22":48,"23":12,"24":12,"25":3,"26":15,"27":3,"28":3,"29":478},"fnMap":{"1":{"name":"initialize","line":56,"loc":{"start":{"line":49,"column":4},"end":{"line":65,"column":4}}},"2":{"name":"_initialize","line":74,"loc":{"start":{"line":67,"column":4},"end":{"line":83,"column":4}}},"3":{"name":"__CMTAT_init","line":95,"loc":{"start":{"line":88,"column":4},"end":{"line":115,"column":4}}},"4":{"name":"__CMTAT_openzeppelin_init_unchained","line":122,"loc":{"start":{"line":120,"column":4},"end":{"line":125,"column":4}}},"5":{"name":"__CMTAT_modules_init_unchained","line":133,"loc":{"start":{"line":130,"column":4},"end":{"line":135,"column":4}}},"6":{"name":"__CMTAT_commonModules_init_unchained","line":140,"loc":{"start":{"line":137,"column":4},"end":{"line":153,"column":4}}},"7":{"name":"transfer","line":162,"loc":{"start":{"line":159,"column":4},"end":{"line":164,"column":4}}},"8":{"name":"transferFrom","line":172,"loc":{"start":{"line":168,"column":4},"end":{"line":174,"column":4}}},"9":{"name":"_authorizeAttachPolicyEngine","line":176,"loc":{"start":{"line":176,"column":4},"end":{"line":176,"column":88}}},"10":{"name":"decimals","line":183,"loc":{"start":{"line":183,"column":4},"end":{"line":185,"column":4}}},"11":{"name":"name","line":190,"loc":{"start":{"line":190,"column":4},"end":{"line":192,"column":4}}},"12":{"name":"symbol","line":197,"loc":{"start":{"line":197,"column":4},"end":{"line":199,"column":4}}},"13":{"name":"supportsInterface","line":201,"loc":{"start":{"line":201,"column":4},"end":{"line":207,"column":4}}},"14":{"name":"_mintOverride","line":213,"loc":{"start":{"line":213,"column":4},"end":{"line":218,"column":4}}},"15":{"name":"_burnOverride","line":223,"loc":{"start":{"line":223,"column":4},"end":{"line":228,"column":4}}},"16":{"name":"_minterTransferOverride","line":233,"loc":{"start":{"line":233,"column":4},"end":{"line":239,"column":4}}},"17":{"name":"_authorizeERC20AttributeManagement","line":247,"loc":{"start":{"line":247,"column":4},"end":{"line":247,"column":104}}},"18":{"name":"_authorizeMint","line":253,"loc":{"start":{"line":253,"column":4},"end":{"line":253,"column":84}}},"19":{"name":"_authorizeBurn","line":259,"loc":{"start":{"line":259,"column":4},"end":{"line":259,"column":84}}},"20":{"name":"_authorizeDocumentManagement","line":265,"loc":{"start":{"line":265,"column":4},"end":{"line":265,"column":103}}},"21":{"name":"_authorizeExtraInfoManagement","line":271,"loc":{"start":{"line":271,"column":4},"end":{"line":271,"column":106}}},"22":{"name":"_authorizeERC20Enforcer","line":277,"loc":{"start":{"line":277,"column":4},"end":{"line":277,"column":100}}},"23":{"name":"_authorizeForcedTransfer","line":283,"loc":{"start":{"line":283,"column":4},"end":{"line":283,"column":101}}},"24":{"name":"_authorizeSnapshots","line":289,"loc":{"start":{"line":289,"column":4},"end":{"line":289,"column":94}}},"25":{"name":"_authorizeCCIPSetAdmin","line":295,"loc":{"start":{"line":295,"column":4},"end":{"line":295,"column":87}}},"26":{"name":"_checkTokenBridge","line":306,"loc":{"start":{"line":306,"column":4},"end":{"line":306,"column":107}}},"27":{"name":"_authorizeBurnFrom","line":313,"loc":{"start":{"line":313,"column":4},"end":{"line":313,"column":94}}},"28":{"name":"_authorizeSelfBurn","line":320,"loc":{"start":{"line":320,"column":4},"end":{"line":320,"column":94}}},"29":{"name":"_update","line":323,"loc":{"start":{"line":323,"column":4},"end":{"line":329,"column":4}}}},"statementMap":{"1":{"start":{"line":57,"column":8},"end":{"line":57,"column":2274}},"2":{"start":{"line":75,"column":8},"end":{"line":75,"column":2837}},"3":{"start":{"line":96,"column":8},"end":{"line":96,"column":38}},"4":{"start":{"line":99,"column":8},"end":{"line":99,"column":33}},"5":{"start":{"line":102,"column":8},"end":{"line":102,"column":32}},"6":{"start":{"line":105,"column":8},"end":{"line":105,"column":60}},"7":{"start":{"line":107,"column":8},"end":{"line":107,"column":53}},"8":{"start":{"line":110,"column":8},"end":{"line":110,"column":84}},"9":{"start":{"line":113,"column":8},"end":{"line":113,"column":61}},"10":{"start":{"line":114,"column":8},"end":{"line":114,"column":61}},"11":{"start":{"line":124,"column":8},"end":{"line":124,"column":77}},"12":{"start":{"line":134,"column":8},"end":{"line":134,"column":90}},"13":{"start":{"line":142,"column":8},"end":{"line":142,"column":5266}},"14":{"start":{"line":148,"column":8},"end":{"line":148,"column":5465}},"15":{"start":{"line":163,"column":8},"end":{"line":163,"column":50}},"16":{"start":{"line":173,"column":8},"end":{"line":173,"column":60}},"17":{"start":{"line":184,"column":8},"end":{"line":184,"column":41}},"18":{"start":{"line":191,"column":8},"end":{"line":191,"column":37}},"19":{"start":{"line":198,"column":8},"end":{"line":198,"column":39}},"20":{"start":{"line":204,"column":8},"end":{"line":204,"column":7458}},"21":{"start":{"line":217,"column":8},"end":{"line":217,"column":52}},"22":{"start":{"line":227,"column":8},"end":{"line":227,"column":52}},"23":{"start":{"line":238,"column":8},"end":{"line":238,"column":63}},"24":{"start":{"line":328,"column":8},"end":{"line":328,"column":56}}},"branchMap":{"1":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":21},"end":{"line":56,"column":21}},{"start":{"line":56,"column":21},"end":{"line":56,"column":21}}]},"2":{"line":74,"type":"if","locations":[{"start":{"line":74,"column":23},"end":{"line":74,"column":23}},{"start":{"line":74,"column":23},"end":{"line":74,"column":23}}]},"3":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":23},"end":{"line":95,"column":23}},{"start":{"line":95,"column":23},"end":{"line":95,"column":23}}]},"4":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":23},"end":{"line":122,"column":23}},{"start":{"line":122,"column":23},"end":{"line":122,"column":23}}]},"5":{"line":133,"type":"if","locations":[{"start":{"line":133,"column":23},"end":{"line":133,"column":23}},{"start":{"line":133,"column":23},"end":{"line":133,"column":23}}]},"6":{"line":140,"type":"if","locations":[{"start":{"line":140,"column":23},"end":{"line":140,"column":23}},{"start":{"line":140,"column":23},"end":{"line":140,"column":23}}]},"7":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":65},"end":{"line":162,"column":65}},{"start":{"line":162,"column":65},"end":{"line":162,"column":65}}]},"8":{"line":172,"type":"if","locations":[{"start":{"line":172,"column":65},"end":{"line":172,"column":65}},{"start":{"line":172,"column":65},"end":{"line":172,"column":65}}]},"9":{"line":176,"type":"if","locations":[{"start":{"line":176,"column":77},"end":{"line":176,"column":77}},{"start":{"line":176,"column":77},"end":{"line":176,"column":77}}]},"10":{"line":205,"type":"cond-expr","locations":[{"start":{"line":205,"column":12},"end":{"line":205,"column":64}},{"start":{"line":206,"column":12},"end":{"line":206,"column":69}}]},"11":{"line":247,"type":"if","locations":[{"start":{"line":247,"column":93},"end":{"line":247,"column":93}},{"start":{"line":247,"column":93},"end":{"line":247,"column":93}}]},"12":{"line":253,"type":"if","locations":[{"start":{"line":253,"column":73},"end":{"line":253,"column":73}},{"start":{"line":253,"column":73},"end":{"line":253,"column":73}}]},"13":{"line":259,"type":"if","locations":[{"start":{"line":259,"column":73},"end":{"line":259,"column":73}},{"start":{"line":259,"column":73},"end":{"line":259,"column":73}}]},"14":{"line":265,"type":"if","locations":[{"start":{"line":265,"column":92},"end":{"line":265,"column":92}},{"start":{"line":265,"column":92},"end":{"line":265,"column":92}}]},"15":{"line":271,"type":"if","locations":[{"start":{"line":271,"column":95},"end":{"line":271,"column":95}},{"start":{"line":271,"column":95},"end":{"line":271,"column":95}}]},"16":{"line":277,"type":"if","locations":[{"start":{"line":277,"column":89},"end":{"line":277,"column":89}},{"start":{"line":277,"column":89},"end":{"line":277,"column":89}}]},"17":{"line":283,"type":"if","locations":[{"start":{"line":283,"column":90},"end":{"line":283,"column":90}},{"start":{"line":283,"column":90},"end":{"line":283,"column":90}}]},"18":{"line":289,"type":"if","locations":[{"start":{"line":289,"column":83},"end":{"line":289,"column":83}},{"start":{"line":289,"column":83},"end":{"line":289,"column":83}}]},"19":{"line":295,"type":"if","locations":[{"start":{"line":295,"column":76},"end":{"line":295,"column":76}},{"start":{"line":295,"column":76},"end":{"line":295,"column":76}}]},"20":{"line":306,"type":"if","locations":[{"start":{"line":306,"column":96},"end":{"line":306,"column":96}},{"start":{"line":306,"column":96},"end":{"line":306,"column":96}}]},"21":{"line":313,"type":"if","locations":[{"start":{"line":313,"column":83},"end":{"line":313,"column":83}},{"start":{"line":313,"column":83},"end":{"line":313,"column":83}}]},"22":{"line":320,"type":"if","locations":[{"start":{"line":320,"column":83},"end":{"line":320,"column":83}},{"start":{"line":320,"column":83},"end":{"line":320,"column":83}}]}}}} diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html deleted file mode 100644 index 39f703a..0000000 --- a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html +++ /dev/null @@ -1,452 +0,0 @@ - - - - Code coverage report for modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol - - - - - - - -
-
-

- all files / modules/chainlink-ace/modified/ PolicyProtectedUpgradeable.sol -

-
-
- 100% - Statements - 21/21 -
-
- 81.25% - Branches - 13/16 -
-
- 100% - Functions - 12/12 -
-
- 100% - Lines - 29/29 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4374× -  -  -  -  -  -8× -8× -  -  -  -71× -  -  -  -  -  -  -  -  -703× -1× -  -702× -702× -  -  -612× -593× -1× -  -  -  -  -  -  -  -  -2× -1× -  -1× -  -  -1× -  -  -  -  -  -  -7× -4× -  -  -  -75× -74× -4× -  -  -1× -  -  -74× -74× -74× -  -  -  -  -1054× -  -  -  -  -3× -  -  -  -  -1752× -  -  -  -  -4× -  -  -  -  -  -  -  -  -11× -  -  - 
// SPDX-License-Identifier: BUSL-1.1
-pragma solidity ^0.8.20;
- 
-import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
-import {IPolicyProtected} from "@chainlink/policy-management/interfaces/IPolicyProtected.sol";
-import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
-import {ERC165Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol";
-import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
- 
-/**
- * @title PolicyProtectedUpgradeable.sol
- * @dev Modified implementation for attaching a policy engine to an upgradeable smart contract. Uses ERC-7201 storage
- *      to not conflict with other storage slots of extending contracts. Provides modifiers to be attached to methods
- *      of the extending contract to run the policy engine before executing the method. Access control for attaching and detaching the policy engine
- *      is implemented in the extending contract.
- */
-abstract contract PolicyProtectedUpgradeable is Initializable, ERC165Upgradeable, IPolicyProtected {
-    /// @custom:storage-location erc7201:chainlink.ace.PolicyProtected
-    struct PolicyProtectedStorage {
-        IPolicyEngine policyEngine;
-        mapping(address sender => bytes context) senderContext; // use transient storage eventually
-    }
- 
-    // keccak256(abi.encode(uint256(keccak256("chainlink.ace.PolicyProtected")) - 1)) &
-    // ~bytes32(uint256(0xff))
-    // solhint-disable-next-line const-name-snakecase
-    bytes32 private constant policyProtectedStorageLocation =
-        0x5970a53874f73819f13c80052b0c1b19d6ce68b29b2ad28a7413019c8a409000;
- 
-    function _policyProtectedStorage() private pure returns (PolicyProtectedStorage storage $) {
-        // solhint-disable-next-line no-inline-assembly
-        assembly {
-            $.slot := policyProtectedStorageLocation
-        }
-    }
- 
-    function __PolicyProtected_init(address policyEngine) internal EonlyInitializing {
-        __ERC165_init();
-        __PolicyProtected_init_unchained(policyEngine);
-    }
- 
-    function __PolicyProtected_init_unchained(address policyEngine) internal EonlyInitializing {
-        _attachPolicyEngine(policyEngine);
-    }
-    /**
-     * @dev Modifier to run the policy engine on the current method.
-     * @notice Context is cleared only after successful execution of the guarded function.
-     *         If the guarded function reverts, this cleanup path is not reached and previously stored context remains.
-     */
- 
-    modifier runPolicy() {
-        if (address(_policyProtectedStorage().policyEngine) == address(0)) {
-            revert IPolicyEngine.PolicyEngineUndefined();
-        }
-        bytes memory context = getContext();
-        _policyProtectedStorage().policyEngine.run(
-            IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})
-        );
-        _;
-        if (context.length > 0) {
-            clearContext();
-        }
-    }
- 
-    /**
-     * @dev Modifier to run the policy engine on the current method with the provided context.
-     * @param context Additional information or authorization to perform the operation.
-     */
-    modifier runPolicyWithContext(bytes calldata context) {
-        if (address(_policyProtectedStorage().policyEngine) == address(0)) {
-            revert IPolicyEngine.PolicyEngineUndefined();
-        }
-        _policyProtectedStorage().policyEngine.run(
-            IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})
-        );
-        _;
-    }
- 
-    function _authorizeAttachPolicyEngine(address policyEngine) internal virtual;
- 
-    /// @inheritdoc IPolicyProtected
-    function attachPolicyEngine(address policyEngine) external virtual override {
-        _authorizeAttachPolicyEngine(policyEngine);
-        _attachPolicyEngine(policyEngine);
-    }
- 
-    function _attachPolicyEngine(address policyEngine) internal {
-        require(policyEngine != address(0), "Policy engine is zero address");
-        if (address(_policyProtectedStorage().policyEngine) != address(0)) {
-            try _policyProtectedStorage().policyEngine.detach() {
-                // Detachment succeeded
-            } catch (bytes memory reason) {
-                emit PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine), reason);
-            }
-        }
-        _policyProtectedStorage().policyEngine = IPolicyEngine(policyEngine);
-        IPolicyEngine(policyEngine).attach();
-        emit PolicyEngineAttached(policyEngine);
-    }
- 
-    /// @inheritdoc IPolicyProtected
-    function getPolicyEngine() public view virtual override returns (address) {
-        return address(_policyProtectedStorage().policyEngine);
-    }
- 
-    /// @inheritdoc IPolicyProtected
-    function setContext(bytes calldata context) public override {
-        _policyProtectedStorage().senderContext[msg.sender] = context;
-    }
- 
-    /// @inheritdoc IPolicyProtected
-    function getContext() public view override returns (bytes memory) {
-        return _policyProtectedStorage().senderContext[msg.sender];
-    }
- 
-    /// @inheritdoc IPolicyProtected
-    function clearContext() public override {
-        delete _policyProtectedStorage().senderContext[msg.sender];
-    }
- 
-    /**
-     * @dev See {IERC165-supportsInterface}.
-     */
-    function supportsInterface(
-        bytes4 interfaceId
-    ) public view virtual override(ERC165Upgradeable, IERC165) returns (bool) {
-        return interfaceId == type(IPolicyProtected).interfaceId || super.supportsInterface(interfaceId);
-    }
-}
- 
-
-
- - - - - - - diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/index.html b/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/index.html deleted file mode 100644 index f39a8f8..0000000 --- a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/index.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - Code coverage report for modules/chainlink-ace/modified/ - - - - - - - -
-
-

- all files modules/chainlink-ace/modified/ -

-
-
- 100% - Statements - 27/27 -
-
- 86.36% - Branches - 19/22 -
-
- 100% - Functions - 13/13 -
-
- 100% - Lines - 40/40 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
MintBurnExtractor.sol
100%6/6100%6/6100%1/1100%11/11
PolicyProtectedUpgradeable.sol
100%21/2181.25%13/16100%12/12100%29/29
-
-
- - - - - - - diff --git a/doc/coverage/coverage/lcov-report/modules/demo/DemoImports.sol.html b/doc/coverage/coverage/lcov-report/modules/demo/DemoImports.sol.html deleted file mode 100644 index 877b11a..0000000 --- a/doc/coverage/coverage/lcov-report/modules/demo/DemoImports.sol.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - Code coverage report for modules/demo/DemoImports.sol - - - - - - - -
-
-

- all files / modules/demo/ DemoImports.sol -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
// SPDX-License-Identifier: MPL-2.0
- 
-pragma solidity ^0.8.20;
- 
-// This import ensures Hardhat compiles MockV3Aggregator so it is available
-// as an artifact for deployment scripts.
- 
-import {MockV3Aggregator} from "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol";
-import {PolicyEngine} from "@chainlink/policy-management/core/PolicyEngine.sol";
-import {PausePolicy} from "@chainlink/policy-management/policies/PausePolicy.sol";
-import {RoleBasedAccessControlPolicy} from "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol";
-import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMintPolicy.sol";
-import {ERC20TransferExtractor} from "@chainlink/policy-management/extractors/ERC20TransferExtractor.sol";
-import {SnapshotEngineMock} from "CMTAT/mocks/SnapshotEngineMock.sol";
-import {DocumentEngineMock} from "CMTAT/mocks/DocumentEngineMock.sol";
- 
-
-
- - - - - - - diff --git a/doc/coverage/coverage/lcov-report/modules/demo/index.html b/doc/coverage/coverage/lcov-report/modules/demo/index.html deleted file mode 100644 index 8b4a3cf..0000000 --- a/doc/coverage/coverage/lcov-report/modules/demo/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for modules/demo/ - - - - - - - -
-
-

- all files modules/demo/ -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
DemoImports.sol
100%0/0100%0/0100%0/0100%0/0
-
-
- - - - - - - diff --git a/doc/coverage/coverage/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html b/doc/coverage/coverage/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html deleted file mode 100644 index 39f703a..0000000 --- a/doc/coverage/coverage/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol.html +++ /dev/null @@ -1,452 +0,0 @@ - - - - Code coverage report for modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol - - - - - - - -
-
-

- all files / modules/chainlink-ace/modified/ PolicyProtectedUpgradeable.sol -

-
-
- 100% - Statements - 21/21 -
-
- 81.25% - Branches - 13/16 -
-
- 100% - Functions - 12/12 -
-
- 100% - Lines - 29/29 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4374× -  -  -  -  -  -8× -8× -  -  -  -71× -  -  -  -  -  -  -  -  -703× -1× -  -702× -702× -  -  -612× -593× -1× -  -  -  -  -  -  -  -  -2× -1× -  -1× -  -  -1× -  -  -  -  -  -  -7× -4× -  -  -  -75× -74× -4× -  -  -1× -  -  -74× -74× -74× -  -  -  -  -1054× -  -  -  -  -3× -  -  -  -  -1752× -  -  -  -  -4× -  -  -  -  -  -  -  -  -11× -  -  - 
// SPDX-License-Identifier: BUSL-1.1
-pragma solidity ^0.8.20;
- 
-import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
-import {IPolicyProtected} from "@chainlink/policy-management/interfaces/IPolicyProtected.sol";
-import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
-import {ERC165Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol";
-import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
- 
-/**
- * @title PolicyProtectedUpgradeable.sol
- * @dev Modified implementation for attaching a policy engine to an upgradeable smart contract. Uses ERC-7201 storage
- *      to not conflict with other storage slots of extending contracts. Provides modifiers to be attached to methods
- *      of the extending contract to run the policy engine before executing the method. Access control for attaching and detaching the policy engine
- *      is implemented in the extending contract.
- */
-abstract contract PolicyProtectedUpgradeable is Initializable, ERC165Upgradeable, IPolicyProtected {
-    /// @custom:storage-location erc7201:chainlink.ace.PolicyProtected
-    struct PolicyProtectedStorage {
-        IPolicyEngine policyEngine;
-        mapping(address sender => bytes context) senderContext; // use transient storage eventually
-    }
- 
-    // keccak256(abi.encode(uint256(keccak256("chainlink.ace.PolicyProtected")) - 1)) &
-    // ~bytes32(uint256(0xff))
-    // solhint-disable-next-line const-name-snakecase
-    bytes32 private constant policyProtectedStorageLocation =
-        0x5970a53874f73819f13c80052b0c1b19d6ce68b29b2ad28a7413019c8a409000;
- 
-    function _policyProtectedStorage() private pure returns (PolicyProtectedStorage storage $) {
-        // solhint-disable-next-line no-inline-assembly
-        assembly {
-            $.slot := policyProtectedStorageLocation
-        }
-    }
- 
-    function __PolicyProtected_init(address policyEngine) internal EonlyInitializing {
-        __ERC165_init();
-        __PolicyProtected_init_unchained(policyEngine);
-    }
- 
-    function __PolicyProtected_init_unchained(address policyEngine) internal EonlyInitializing {
-        _attachPolicyEngine(policyEngine);
-    }
-    /**
-     * @dev Modifier to run the policy engine on the current method.
-     * @notice Context is cleared only after successful execution of the guarded function.
-     *         If the guarded function reverts, this cleanup path is not reached and previously stored context remains.
-     */
- 
-    modifier runPolicy() {
-        if (address(_policyProtectedStorage().policyEngine) == address(0)) {
-            revert IPolicyEngine.PolicyEngineUndefined();
-        }
-        bytes memory context = getContext();
-        _policyProtectedStorage().policyEngine.run(
-            IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})
-        );
-        _;
-        if (context.length > 0) {
-            clearContext();
-        }
-    }
- 
-    /**
-     * @dev Modifier to run the policy engine on the current method with the provided context.
-     * @param context Additional information or authorization to perform the operation.
-     */
-    modifier runPolicyWithContext(bytes calldata context) {
-        if (address(_policyProtectedStorage().policyEngine) == address(0)) {
-            revert IPolicyEngine.PolicyEngineUndefined();
-        }
-        _policyProtectedStorage().policyEngine.run(
-            IPolicyEngine.Payload({selector: msg.sig, sender: msg.sender, data: msg.data[4:], context: context})
-        );
-        _;
-    }
- 
-    function _authorizeAttachPolicyEngine(address policyEngine) internal virtual;
- 
-    /// @inheritdoc IPolicyProtected
-    function attachPolicyEngine(address policyEngine) external virtual override {
-        _authorizeAttachPolicyEngine(policyEngine);
-        _attachPolicyEngine(policyEngine);
-    }
- 
-    function _attachPolicyEngine(address policyEngine) internal {
-        require(policyEngine != address(0), "Policy engine is zero address");
-        if (address(_policyProtectedStorage().policyEngine) != address(0)) {
-            try _policyProtectedStorage().policyEngine.detach() {
-                // Detachment succeeded
-            } catch (bytes memory reason) {
-                emit PolicyEngineDetachFailed(address(_policyProtectedStorage().policyEngine), reason);
-            }
-        }
-        _policyProtectedStorage().policyEngine = IPolicyEngine(policyEngine);
-        IPolicyEngine(policyEngine).attach();
-        emit PolicyEngineAttached(policyEngine);
-    }
- 
-    /// @inheritdoc IPolicyProtected
-    function getPolicyEngine() public view virtual override returns (address) {
-        return address(_policyProtectedStorage().policyEngine);
-    }
- 
-    /// @inheritdoc IPolicyProtected
-    function setContext(bytes calldata context) public override {
-        _policyProtectedStorage().senderContext[msg.sender] = context;
-    }
- 
-    /// @inheritdoc IPolicyProtected
-    function getContext() public view override returns (bytes memory) {
-        return _policyProtectedStorage().senderContext[msg.sender];
-    }
- 
-    /// @inheritdoc IPolicyProtected
-    function clearContext() public override {
-        delete _policyProtectedStorage().senderContext[msg.sender];
-    }
- 
-    /**
-     * @dev See {IERC165-supportsInterface}.
-     */
-    function supportsInterface(
-        bytes4 interfaceId
-    ) public view virtual override(ERC165Upgradeable, IERC165) returns (bool) {
-        return interfaceId == type(IPolicyProtected).interfaceId || super.supportsInterface(interfaceId);
-    }
-}
- 
-
-
- - - - - - - diff --git a/doc/coverage/coverage/modules/chainlink-ace/modified/index.html b/doc/coverage/coverage/modules/chainlink-ace/modified/index.html deleted file mode 100644 index f39a8f8..0000000 --- a/doc/coverage/coverage/modules/chainlink-ace/modified/index.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - Code coverage report for modules/chainlink-ace/modified/ - - - - - - - -
-
-

- all files modules/chainlink-ace/modified/ -

-
-
- 100% - Statements - 27/27 -
-
- 86.36% - Branches - 19/22 -
-
- 100% - Functions - 13/13 -
-
- 100% - Lines - 40/40 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
MintBurnExtractor.sol
100%6/6100%6/6100%1/1100%11/11
PolicyProtectedUpgradeable.sol
100%21/2181.25%13/16100%12/12100%29/29
-
-
- - - - - - - diff --git a/doc/coverage/coverage/modules/demo/DemoImports.sol.html b/doc/coverage/coverage/modules/demo/DemoImports.sol.html deleted file mode 100644 index 877b11a..0000000 --- a/doc/coverage/coverage/modules/demo/DemoImports.sol.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - Code coverage report for modules/demo/DemoImports.sol - - - - - - - -
-
-

- all files / modules/demo/ DemoImports.sol -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
// SPDX-License-Identifier: MPL-2.0
- 
-pragma solidity ^0.8.20;
- 
-// This import ensures Hardhat compiles MockV3Aggregator so it is available
-// as an artifact for deployment scripts.
- 
-import {MockV3Aggregator} from "@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol";
-import {PolicyEngine} from "@chainlink/policy-management/core/PolicyEngine.sol";
-import {PausePolicy} from "@chainlink/policy-management/policies/PausePolicy.sol";
-import {RoleBasedAccessControlPolicy} from "@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol";
-import {SecureMintPolicy} from "@chainlink/policy-management/policies/SecureMintPolicy.sol";
-import {ERC20TransferExtractor} from "@chainlink/policy-management/extractors/ERC20TransferExtractor.sol";
-import {SnapshotEngineMock} from "CMTAT/mocks/SnapshotEngineMock.sol";
-import {DocumentEngineMock} from "CMTAT/mocks/DocumentEngineMock.sol";
- 
-
-
- - - - - - - diff --git a/doc/coverage/coverage/modules/demo/index.html b/doc/coverage/coverage/modules/demo/index.html deleted file mode 100644 index 8b4a3cf..0000000 --- a/doc/coverage/coverage/modules/demo/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for modules/demo/ - - - - - - - -
-
-

- all files modules/demo/ -

-
-
- 100% - Statements - 0/0 -
-
- 100% - Branches - 0/0 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 0/0 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
DemoImports.sol
100%0/0100%0/0100%0/0100%0/0
-
-
- - - - - - - diff --git a/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html b/doc/coverage/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html similarity index 97% rename from doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html rename to doc/coverage/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html index a086b16..7c0ca34 100644 --- a/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html +++ b/doc/coverage/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html @@ -119,7 +119,7 @@

      -47× +51×       @@ -178,7 +178,7 @@

diff --git a/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html b/doc/coverage/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html similarity index 98% rename from doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html rename to doc/coverage/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html index 6d90695..ce8322d 100644 --- a/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html +++ b/doc/coverage/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html @@ -133,7 +133,7 @@

diff --git a/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html b/doc/coverage/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html similarity index 97% rename from doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html rename to doc/coverage/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html index dd80672..eec4f7a 100644 --- a/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html +++ b/doc/coverage/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html @@ -103,7 +103,7 @@

diff --git a/doc/coverage/coverage/lcov-report/deployment/lite/index.html b/doc/coverage/deployment/lite/index.html similarity index 98% rename from doc/coverage/coverage/lcov-report/deployment/lite/index.html rename to doc/coverage/deployment/lite/index.html index 7a4c60e..f9c1e77 100644 --- a/doc/coverage/coverage/lcov-report/deployment/lite/index.html +++ b/doc/coverage/deployment/lite/index.html @@ -103,7 +103,7 @@

diff --git a/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATStandalone.sol.html b/doc/coverage/deployment/standard/ComplianceTokenCMTATStandalone.sol.html similarity index 98% rename from doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATStandalone.sol.html rename to doc/coverage/deployment/standard/ComplianceTokenCMTATStandalone.sol.html index d9d698e..b9e2df3 100644 --- a/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATStandalone.sol.html +++ b/doc/coverage/deployment/standard/ComplianceTokenCMTATStandalone.sol.html @@ -178,7 +178,7 @@

diff --git a/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html b/doc/coverage/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html similarity index 98% rename from doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html rename to doc/coverage/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html index 7d0310b..74ea59b 100644 --- a/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html +++ b/doc/coverage/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html @@ -121,7 +121,7 @@

diff --git a/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html b/doc/coverage/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html similarity index 97% rename from doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html rename to doc/coverage/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html index e74e663..6160346 100644 --- a/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html +++ b/doc/coverage/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html @@ -103,7 +103,7 @@

diff --git a/doc/coverage/coverage/lcov-report/deployment/standard/index.html b/doc/coverage/deployment/standard/index.html similarity index 98% rename from doc/coverage/coverage/lcov-report/deployment/standard/index.html rename to doc/coverage/deployment/standard/index.html index 1027076..9ba79e6 100644 --- a/doc/coverage/coverage/lcov-report/deployment/standard/index.html +++ b/doc/coverage/deployment/standard/index.html @@ -103,7 +103,7 @@

diff --git a/doc/coverage/coverage/index.html b/doc/coverage/index.html similarity index 68% rename from doc/coverage/coverage/index.html rename to doc/coverage/index.html index dca997d..510b328 100644 --- a/doc/coverage/coverage/index.html +++ b/doc/coverage/index.html @@ -20,24 +20,24 @@

- 93.31% + 94.71% Statements - 223/239 + 197/208
- 83.82% + 85.39% Branches - 171/204 + 152/178
- 78.06% + 86.61% Functions - 121/155 + 97/112
- 93.58% + 94.55% Lines - 248/265 + 208/220
@@ -88,52 +88,26 @@

modules/chainlink-ace/custom/
100% - 41/41 - 80% - 16/20 + 48/48 + 85.71% + 24/28 100% - 7/7 - 98.15% - 53/54 + 8/8 + 98.51% + 66/67 modules/chainlink-ace/mocks/ -
- 60% - 21/35 +
+ 62.5% + 15/24 66.67% - 20/30 - 41.51% - 22/53 - 67.44% - 29/43 - - - - modules/chainlink-ace/modified/ -
- 100% - 27/27 - 86.36% - 19/22 - 100% - 13/13 - 100% - 40/40 - - - - modules/demo/ -
- 100% - 0/0 - 100% - 0/0 - 100% - 0/0 - 100% - 0/0 + 12/18 + 45.45% + 10/22 + 64% + 16/25 @@ -168,7 +142,7 @@

diff --git a/doc/coverage/coverage/lcov-report/base.css b/doc/coverage/lcov-report/base.css similarity index 100% rename from doc/coverage/coverage/lcov-report/base.css rename to doc/coverage/lcov-report/base.css diff --git a/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html b/doc/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html similarity index 97% rename from doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html rename to doc/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html index a086b16..7c0ca34 100644 --- a/doc/coverage/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html +++ b/doc/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol.html @@ -119,7 +119,7 @@

      -47× +51×       @@ -178,7 +178,7 @@

diff --git a/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html b/doc/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html similarity index 98% rename from doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html rename to doc/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html index 6d90695..ce8322d 100644 --- a/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html +++ b/doc/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol.html @@ -133,7 +133,7 @@

diff --git a/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html b/doc/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html similarity index 97% rename from doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html rename to doc/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html index dd80672..eec4f7a 100644 --- a/doc/coverage/coverage/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html +++ b/doc/coverage/lcov-report/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol.html @@ -103,7 +103,7 @@

diff --git a/doc/coverage/coverage/deployment/lite/index.html b/doc/coverage/lcov-report/deployment/lite/index.html similarity index 98% rename from doc/coverage/coverage/deployment/lite/index.html rename to doc/coverage/lcov-report/deployment/lite/index.html index 7a4c60e..f9c1e77 100644 --- a/doc/coverage/coverage/deployment/lite/index.html +++ b/doc/coverage/lcov-report/deployment/lite/index.html @@ -103,7 +103,7 @@

diff --git a/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATStandalone.sol.html b/doc/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATStandalone.sol.html similarity index 98% rename from doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATStandalone.sol.html rename to doc/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATStandalone.sol.html index d9d698e..b9e2df3 100644 --- a/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATStandalone.sol.html +++ b/doc/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATStandalone.sol.html @@ -178,7 +178,7 @@

diff --git a/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html b/doc/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html similarity index 98% rename from doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html rename to doc/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html index 7d0310b..74ea59b 100644 --- a/doc/coverage/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html +++ b/doc/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol.html @@ -121,7 +121,7 @@

diff --git a/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html b/doc/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html similarity index 97% rename from doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html rename to doc/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html index e74e663..6160346 100644 --- a/doc/coverage/coverage/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html +++ b/doc/coverage/lcov-report/deployment/standard/ComplianceTokenCMTATUpgradeable.sol.html @@ -103,7 +103,7 @@

diff --git a/doc/coverage/coverage/deployment/standard/index.html b/doc/coverage/lcov-report/deployment/standard/index.html similarity index 98% rename from doc/coverage/coverage/deployment/standard/index.html rename to doc/coverage/lcov-report/deployment/standard/index.html index 1027076..9ba79e6 100644 --- a/doc/coverage/coverage/deployment/standard/index.html +++ b/doc/coverage/lcov-report/deployment/standard/index.html @@ -103,7 +103,7 @@

diff --git a/doc/coverage/coverage/lcov-report/index.html b/doc/coverage/lcov-report/index.html similarity index 68% rename from doc/coverage/coverage/lcov-report/index.html rename to doc/coverage/lcov-report/index.html index dca997d..510b328 100644 --- a/doc/coverage/coverage/lcov-report/index.html +++ b/doc/coverage/lcov-report/index.html @@ -20,24 +20,24 @@

- 93.31% + 94.71% Statements - 223/239 + 197/208
- 83.82% + 85.39% Branches - 171/204 + 152/178
- 78.06% + 86.61% Functions - 121/155 + 97/112
- 93.58% + 94.55% Lines - 248/265 + 208/220
@@ -88,52 +88,26 @@

modules/chainlink-ace/custom/
100% - 41/41 - 80% - 16/20 + 48/48 + 85.71% + 24/28 100% - 7/7 - 98.15% - 53/54 + 8/8 + 98.51% + 66/67 modules/chainlink-ace/mocks/ -
- 60% - 21/35 +
+ 62.5% + 15/24 66.67% - 20/30 - 41.51% - 22/53 - 67.44% - 29/43 - - - - modules/chainlink-ace/modified/ -
- 100% - 27/27 - 86.36% - 19/22 - 100% - 13/13 - 100% - 40/40 - - - - modules/demo/ -
- 100% - 0/0 - 100% - 0/0 - 100% - 0/0 - 100% - 0/0 + 12/18 + 45.45% + 10/22 + 64% + 16/25 @@ -168,7 +142,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html b/doc/coverage/lcov-report/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html similarity index 98% rename from doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html rename to doc/coverage/lcov-report/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html index abe097e..06a67f6 100644 --- a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html +++ b/doc/coverage/lcov-report/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html @@ -214,7 +214,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/MintBurnExtractor.sol.html b/doc/coverage/lcov-report/modules/chainlink-ace/custom/MintBurnExtractor.sol.html similarity index 96% rename from doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/MintBurnExtractor.sol.html rename to doc/coverage/lcov-report/modules/chainlink-ace/custom/MintBurnExtractor.sol.html index afcabb0..19d9657 100644 --- a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/modified/MintBurnExtractor.sol.html +++ b/doc/coverage/lcov-report/modules/chainlink-ace/custom/MintBurnExtractor.sol.html @@ -1,7 +1,7 @@ - Code coverage report for modules/chainlink-ace/modified/MintBurnExtractor.sol + Code coverage report for modules/chainlink-ace/custom/MintBurnExtractor.sol @@ -16,7 +16,7 @@

- all files / modules/chainlink-ace/modified/ MintBurnExtractor.sol + all files / modules/chainlink-ace/custom/ MintBurnExtractor.sol

@@ -202,7 +202,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html b/doc/coverage/lcov-report/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html similarity index 91% rename from doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html rename to doc/coverage/lcov-report/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html index f45a1cc..d77d463 100644 --- a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html +++ b/doc/coverage/lcov-report/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html @@ -22,12 +22,12 @@

100% Statements - 33/33 + 34/34
- 81.25% + 83.33% Branches - 13/16 + 15/18
100% @@ -37,7 +37,7 @@

100% Lines - 37/37 + 39/39

@@ -178,7 +178,13 @@

133 134 135 -136  +136 +137 +138 +139 +140 +141 +142        @@ -215,7 +221,9 @@

      -69× +  +  +77×       @@ -226,12 +234,12 @@

      -33× -30× -30× -30× -37× 37× +34× +34× +34× +41× +41×       @@ -278,8 +286,12 @@

      -35× -35× +39× +39× +  +39× +4× +    35×   @@ -319,7 +331,7 @@

  import {Policy} from "@chainlink/policy-management/core/Policy.sol"; import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; -import {IRule} from "../../../../submodules/RuleEngine/src/interfaces/IRule.sol"; +import {IRule} from "CMTAT/mocks/RuleEngine/interfaces/IRule.sol";   /** * @title TransferValidationPolicy @@ -338,6 +350,8 @@

* the policy reverts with PolicyRejected containing the rule's message. */ contract TransferValidationPolicy is Policy { + error InvalidParametersLength(uint256 length); +  string public constant override typeAndVersion = "TransferValidationPolicy 1.0.0"; event RulesUpdated(uint256 previousCount, uint256 newCount);   @@ -416,7 +430,11 @@

TransferValidationStorage storage $ = _getStorage(); uint256 len = $.rules.length;   - if (parameters.length >= 4) { + if (parameters.length != 3 && parameters.length != 4) { + revert InvalidParametersLength(parameters.length); + } +  + if (parameters.length == 4) { // ERC20TransferFromExtractor layout: [spender, from, to, amount] address spender = abi.decode(parameters[0], (address)); address from = abi.decode(parameters[1], (address)); @@ -454,7 +472,7 @@

diff --git a/doc/coverage/coverage/modules/chainlink-ace/custom/index.html b/doc/coverage/lcov-report/modules/chainlink-ace/custom/index.html similarity index 75% rename from doc/coverage/coverage/modules/chainlink-ace/custom/index.html rename to doc/coverage/lcov-report/modules/chainlink-ace/custom/index.html index 6426d9f..0c49bff 100644 --- a/doc/coverage/coverage/modules/chainlink-ace/custom/index.html +++ b/doc/coverage/lcov-report/modules/chainlink-ace/custom/index.html @@ -22,22 +22,22 @@

100% Statements - 41/41 + 48/48
- 80% + 85.71% Branches - 16/20 + 24/28
100% Functions - 7/7 + 8/8
- 98.15% + 98.51% Lines - 53/54 + 66/67
@@ -71,17 +71,30 @@

16/17 + + MintBurnExtractor.sol +
+ 100% + 6/6 + 100% + 6/6 + 100% + 1/1 + 100% + 11/11 + + TransferValidationPolicy.sol
100% - 33/33 - 81.25% - 13/16 + 34/34 + 83.33% + 15/18 100% 6/6 100% - 37/37 + 39/39 @@ -90,7 +103,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html b/doc/coverage/lcov-report/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html similarity index 76% rename from doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html rename to doc/coverage/lcov-report/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html index c9afb4c..db0ea57 100644 --- a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html +++ b/doc/coverage/lcov-report/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html @@ -20,28 +20,28 @@

- 54.55% + 30% Statements - 6/11 + 3/10
- 66.67% + 25% Branches - 8/12 + 1/4
- 38.71% + 18.52% Functions - 12/31 + 5/27
- 72.22% + 35.71% Lines - 13/18 + 5/14
-
+

+}
1 2 @@ -146,32 +146,7 @@

101 102 103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129

  +104        @@ -184,44 +159,26 @@

      -  -  -1× -  -  -          -8× +        1× -1× -1× -  -  -  -  -5× -  -  -  -  -  -          +  +          -  -  +2×       @@ -247,25 +204,19 @@

      -  -  -  -  -7× +            -1× +        -1×       -1×       @@ -298,13 +249,10 @@

  3×   -   

// SPDX-License-Identifier: BUSL-1.1
 pragma solidity ^0.8.20;
  
-import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
 import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
-import {PolicyProtectedUpgradeable} from "../modified/PolicyProtectedUpgradeable.sol";
 import {ValidationModulePolicyEngine} from "../../lite/ValidationModulePolicyEngine.sol";
  
 contract MockPolicyEngine is IPolicyEngine {
@@ -313,7 +261,7 @@ 

uint256 public detachCalls; bool public detachShouldRevert;   - function setDetachShouldRevert(bool value) external { + function setDetachShouldRevert(bool value) external { detachShouldRevert = value; }   @@ -325,10 +273,10 @@

attachCalls++; }   - function detach() external override { + function detach() external override { detachCalls++; - Eif (detachShouldRevert) { - revert("MockPolicyEngine: detach failed"); + if (detachShouldRevert) { + revert("MockPolicyEngine: detach failed"); } }   @@ -368,38 +316,16 @@

return 0; }   + function upgradePolicy(address, address, bytes calldata) external pure override {} function setDefaultPolicyAllow(bool) external pure override {}   function setTargetDefaultPolicyAllow(address, bool) external pure override {} }   -contract PolicyProtectedUpgradeableHarness is Initializable, PolicyProtectedUpgradeable { - uint256 public counter; -  - error ForcedRevert(); -  - function initialize(address policyEngine) external Einitializer { - __PolicyProtected_init(policyEngine); - } -  - function _authorizeAttachPolicyEngine(address) internal pure override {} -  - function guardedRun() external runPolicy { - counter += 1; - } -  - function guardedRunWithContext(bytes calldata context) external runPolicyWithContext(context) { - counter += 1; - } -  - function guardedRunAndRevert() external ErunPolicy { - revert ForcedRevert(); - } -} -  -contract ValidationModulePolicyEngineHarness is Initializable, ValidationModulePolicyEngine { +contract ValidationModulePolicyEngineHarness is ValidationModulePolicyEngine { function initializeWithPolicyEngine(address policyEngine) external Einitializer { - __PolicyProtected_init(policyEngine); + __PolicyProtectedBase_init(policyEngine); }   function _authorizeAttachPolicyEngine(address) internal pure override {} @@ -426,14 +352,13 @@

) external returns (bool) { return _transferred(spender, from, to, value); } -} - 

diff --git a/doc/coverage/coverage/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html b/doc/coverage/lcov-report/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html similarity index 98% rename from doc/coverage/coverage/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html rename to doc/coverage/lcov-report/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html index f6eef52..d47d98b 100644 --- a/doc/coverage/coverage/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html +++ b/doc/coverage/lcov-report/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html @@ -220,7 +220,7 @@

      -26× +30×       @@ -401,7 +401,7 @@

return detectTransferRestriction(from, to, amount) == 0; }   - function canTransferFrom( + function canTransferFrom( address /* spender */, address from, address to, @@ -520,7 +520,7 @@

diff --git a/doc/coverage/coverage/modules/chainlink-ace/mocks/index.html b/doc/coverage/lcov-report/modules/chainlink-ace/mocks/index.html similarity index 74% rename from doc/coverage/coverage/modules/chainlink-ace/mocks/index.html rename to doc/coverage/lcov-report/modules/chainlink-ace/mocks/index.html index ca94830..43b901a 100644 --- a/doc/coverage/coverage/modules/chainlink-ace/mocks/index.html +++ b/doc/coverage/lcov-report/modules/chainlink-ace/mocks/index.html @@ -20,24 +20,24 @@

- 60% + 62.5% Statements - 21/35 + 15/24
66.67% Branches - 20/30 + 12/18
- 41.51% + 45.45% Functions - 22/53 + 10/22
- 67.44% + 64% Lines - 29/43 + 16/25
@@ -59,19 +59,6 @@

- PolicyProtectedUpgradeableMocks.sol -
- 54.55% - 6/11 - 66.67% - 8/12 - 38.71% - 12/31 - 72.22% - 13/18 - - - TransferRuleMocks.sol
62.5% @@ -90,7 +77,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC1404.sol.html b/doc/coverage/lcov-report/modules/lite/CCTCMTATBaseERC1404.sol.html similarity index 96% rename from doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC1404.sol.html rename to doc/coverage/lcov-report/modules/lite/CCTCMTATBaseERC1404.sol.html index 7e72df8..44fc278 100644 --- a/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC1404.sol.html +++ b/doc/coverage/lcov-report/modules/lite/CCTCMTATBaseERC1404.sol.html @@ -129,9 +129,7 @@

84 85 86 -87 -88  -  +87        @@ -223,7 +221,6 @@

  import {CCTCMTATBasePolicyEngine} from "./CCTCMTATBasePolicyEngine.sol"; import {PolicyValidationModuleERC1404, IERC1404, IERC1404Extend} from "./PolicyValidationModuleERC1404.sol"; -import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import { @@ -258,7 +255,7 @@

}   /** - * @inheritdoc ValidationModulePolicyEngine + * @inheritdoc CCTCMTATBasePolicyEngine */ function canTransfer( address from, @@ -269,7 +266,7 @@

}   /** - * @inheritdoc ValidationModulePolicyEngine + * @inheritdoc CCTCMTATBasePolicyEngine */ function canTransferFrom( address spender, @@ -310,7 +307,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html b/doc/coverage/lcov-report/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html similarity index 98% rename from doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html rename to doc/coverage/lcov-report/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html index 8b4c61c..ce0c13d 100644 --- a/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html +++ b/doc/coverage/lcov-report/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html @@ -265,8 +265,8 @@

      -731× -716× +735× +720×       @@ -378,7 +378,7 @@

      -939× +943×      
// SPDX-License-Identifier: MPL-2.0
@@ -556,7 +556,7 @@ 

diff --git a/doc/coverage/coverage/modules/lite/CCTCMTATBasePolicyEngine.sol.html b/doc/coverage/lcov-report/modules/lite/CCTCMTATBasePolicyEngine.sol.html similarity index 95% rename from doc/coverage/coverage/modules/lite/CCTCMTATBasePolicyEngine.sol.html rename to doc/coverage/lcov-report/modules/lite/CCTCMTATBasePolicyEngine.sol.html index cf81183..f2e3cf8 100644 --- a/doc/coverage/coverage/modules/lite/CCTCMTATBasePolicyEngine.sol.html +++ b/doc/coverage/lcov-report/modules/lite/CCTCMTATBasePolicyEngine.sol.html @@ -296,7 +296,7 @@

      -51× +55×       @@ -317,7 +317,7 @@

      -51× +55×       @@ -340,23 +340,23 @@

      -51× +55×     -51× +55×     -51× +55×     -51× +55×     -51× -51× +55× +55×     -51× +55×       @@ -366,7 +366,7 @@

      -51× +55×       @@ -434,8 +434,8 @@

      -1012× -994× +1016× +998×       @@ -457,7 +457,7 @@

CMTATBaseCommon, CMTATBaseAccessControl } from "CMTAT/modules/1_CMTATBaseAccessControl.sol"; -import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedBaseUpgradeable} from "@chainlink/policy-management/core/PolicyProtectedBaseUpgradeable.sol"; import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "CMTAT/interfaces/tokenization/draft-IERC1643.sol"; @@ -559,7 +559,7 @@

__DocumentEngineModule_init_unchained(documentEngine_);   /* Chainlink-ACE policy module */ - __PolicyProtected_init_unchained(policyEngine_); + __PolicyProtectedBase_init_unchained(policyEngine_); }   /* @@ -646,10 +646,10 @@

  function supportsInterface( bytes4 interfaceId - ) public view virtual override(CMTATBaseAccessControl, PolicyProtectedUpgradeable) returns (bool) { + ) public view virtual override(CMTATBaseAccessControl, PolicyProtectedBaseUpgradeable) returns (bool) { return CMTATBaseAccessControl.supportsInterface(interfaceId) || - PolicyProtectedUpgradeable.supportsInterface(interfaceId); + PolicyProtectedBaseUpgradeable.supportsInterface(interfaceId); } }  

@@ -658,7 +658,7 @@

diff --git a/doc/coverage/coverage/modules/lite/PolicyValidationModuleERC1404.sol.html b/doc/coverage/lcov-report/modules/lite/PolicyValidationModuleERC1404.sol.html similarity index 99% rename from doc/coverage/coverage/modules/lite/PolicyValidationModuleERC1404.sol.html rename to doc/coverage/lcov-report/modules/lite/PolicyValidationModuleERC1404.sol.html index f4a71d2..55557a8 100644 --- a/doc/coverage/coverage/modules/lite/PolicyValidationModuleERC1404.sol.html +++ b/doc/coverage/lcov-report/modules/lite/PolicyValidationModuleERC1404.sol.html @@ -424,7 +424,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/lite/ValidationModulePolicyEngine.sol.html b/doc/coverage/lcov-report/modules/lite/ValidationModulePolicyEngine.sol.html similarity index 95% rename from doc/coverage/coverage/lcov-report/modules/lite/ValidationModulePolicyEngine.sol.html rename to doc/coverage/lcov-report/modules/lite/ValidationModulePolicyEngine.sol.html index 946b9d3..f44f4d0 100644 --- a/doc/coverage/coverage/lcov-report/modules/lite/ValidationModulePolicyEngine.sol.html +++ b/doc/coverage/lcov-report/modules/lite/ValidationModulePolicyEngine.sol.html @@ -271,18 +271,18 @@

      -997× -928× -928× -927× -927× +1001× +932× +932× +931× +931×     -920× +924× 2×     -921× +925×      
// SPDX-License-Identifier: MPL-2.0
@@ -290,11 +290,11 @@ 

pragma solidity ^0.8.20;   import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol"; -import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedBaseUpgradeable} from "@chainlink/policy-management/core/PolicyProtectedBaseUpgradeable.sol"; import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";   -abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedUpgradeable { +abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedBaseUpgradeable { /*////////////////////////////////////////////////////////////// PUBLIC/EXTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ @@ -302,7 +302,7 @@

/* ============ View functions ============ */ /** * @inheritdoc ValidationModuleCore - * @dev call the ruleEngine if set + * @dev call the policy engine if set */ function canTransfer( address from, @@ -314,7 +314,7 @@

  /** * @inheritdoc ValidationModuleCore - * @dev call the ruleEngine if set + * @dev call the policy engine if set */ function canTransferFrom( address spender, @@ -412,7 +412,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/lite/index.html b/doc/coverage/lcov-report/modules/lite/index.html similarity index 98% rename from doc/coverage/coverage/lcov-report/modules/lite/index.html rename to doc/coverage/lcov-report/modules/lite/index.html index b5c4260..b286953 100644 --- a/doc/coverage/coverage/lcov-report/modules/lite/index.html +++ b/doc/coverage/lcov-report/modules/lite/index.html @@ -129,7 +129,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/standard/CCTCommon.sol.html b/doc/coverage/lcov-report/modules/standard/CCTCommon.sol.html similarity index 98% rename from doc/coverage/coverage/lcov-report/modules/standard/CCTCommon.sol.html rename to doc/coverage/lcov-report/modules/standard/CCTCommon.sol.html index cc6db7a..4d8a056 100644 --- a/doc/coverage/coverage/lcov-report/modules/standard/CCTCommon.sol.html +++ b/doc/coverage/lcov-report/modules/standard/CCTCommon.sol.html @@ -742,12 +742,12 @@

import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol"; /* ==== Chainlink ACE === */ -import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedBaseUpgradeable} from "@chainlink/policy-management/core/PolicyProtectedBaseUpgradeable.sol";   abstract contract CCTCommon is OwnableUpgradeable, ERC20CrossChainModule, - PolicyProtectedUpgradeable, + PolicyProtectedBaseUpgradeable, CMTATBaseCommon, CCIPModule { @@ -809,7 +809,7 @@

// Openzeppelin __CMTAT_openzeppelin_init_unchained(ERC20Attributes_);   - __PolicyProtected_init_unchained(policyEngine); + __PolicyProtectedBase_init_unchained(policyEngine);   /* Wrapper modules */ __CMTAT_modules_init_unchained(ERC20Attributes_, ExtraInformationAttributes_); @@ -905,10 +905,10 @@

  function supportsInterface( bytes4 _interfaceId - ) public view virtual override(IERC165, ERC20CrossChainModule, PolicyProtectedUpgradeable) returns (bool) { + ) public view virtual override(IERC165, ERC20CrossChainModule, PolicyProtectedBaseUpgradeable) returns (bool) { return ERC20CrossChainModule.supportsInterface(_interfaceId) || - PolicyProtectedUpgradeable.supportsInterface(_interfaceId); + PolicyProtectedBaseUpgradeable.supportsInterface(_interfaceId); }   /* ==== Mint and Burn Operations ==== */ @@ -1039,7 +1039,7 @@

diff --git a/doc/coverage/coverage/modules/standard/index.html b/doc/coverage/lcov-report/modules/standard/index.html similarity index 97% rename from doc/coverage/coverage/modules/standard/index.html rename to doc/coverage/lcov-report/modules/standard/index.html index d4afee4..de598aa 100644 --- a/doc/coverage/coverage/modules/standard/index.html +++ b/doc/coverage/lcov-report/modules/standard/index.html @@ -77,7 +77,7 @@

diff --git a/doc/coverage/coverage/lcov-report/prettify.css b/doc/coverage/lcov-report/prettify.css similarity index 100% rename from doc/coverage/coverage/lcov-report/prettify.css rename to doc/coverage/lcov-report/prettify.css diff --git a/doc/coverage/coverage/lcov-report/prettify.js b/doc/coverage/lcov-report/prettify.js similarity index 100% rename from doc/coverage/coverage/lcov-report/prettify.js rename to doc/coverage/lcov-report/prettify.js diff --git a/doc/coverage/coverage/lcov-report/sort-arrow-sprite.png b/doc/coverage/lcov-report/sort-arrow-sprite.png similarity index 100% rename from doc/coverage/coverage/lcov-report/sort-arrow-sprite.png rename to doc/coverage/lcov-report/sort-arrow-sprite.png diff --git a/doc/coverage/coverage/lcov-report/sorter.js b/doc/coverage/lcov-report/sorter.js similarity index 100% rename from doc/coverage/coverage/lcov-report/sorter.js rename to doc/coverage/lcov-report/sorter.js diff --git a/doc/coverage/coverage/lcov.info b/doc/coverage/lcov.info similarity index 59% rename from doc/coverage/coverage/lcov.info rename to doc/coverage/lcov.info index 5c7c8fa..9bd74b1 100644 --- a/doc/coverage/coverage/lcov.info +++ b/doc/coverage/lcov.info @@ -1,17 +1,17 @@ TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/lite/ComplianceTokenCMTATLiteStandalone.sol FN:25,constructor FNF:1 FNH:1 -FNDA:47,constructor -DA:34,47 +FNDA:51,constructor +DA:34,51 LF:1 LH:1 BRF:0 BRH:0 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/lite/ComplianceTokenCMTATLiteUpgradeable.sol FN:14,constructor FNF:1 FNH:1 @@ -23,7 +23,7 @@ BRF:0 BRH:0 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/lite/ComplianceTokenCMTATLiteUUPSUpgradeable.sol FN:17,constructor FN:27,_authorizeUpgrade FNF:2 @@ -39,7 +39,7 @@ BRF:2 BRH:2 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/standard/ComplianceTokenCMTATStandalone.sol FN:25,constructor FNF:1 FNH:1 @@ -51,7 +51,7 @@ BRF:0 BRH:0 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/standard/ComplianceTokenCMTATUpgradeable.sol FN:14,constructor FNF:1 FNH:1 @@ -63,7 +63,7 @@ BRF:0 BRH:0 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/deployment/standard/ComplianceTokenCMTATUUPSUpgradeable.sol FN:15,constructor FN:23,_authorizeUpgrade FNF:2 @@ -79,7 +79,7 @@ BRF:2 BRH:2 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol FN:28,extract FNF:1 FNH:1 @@ -111,182 +111,113 @@ BRF:4 BRH:3 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol -FN:37,_getStorage -FN:48,configure -FN:63,setRules -FN:77,rules -FN:84,rulesCount -FN:94,run +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/chainlink-ace/custom/MintBurnExtractor.sol +FN:31,extract +FNF:1 +FNH:1 +FNDA:4,extract +DA:34,4 +DA:35,4 +DA:37,4 +DA:38,2 +DA:40,1 +DA:41,1 +DA:43,1 +DA:46,3 +DA:47,3 +DA:48,3 +DA:49,3 +LF:11 +LH:11 +BRDA:37,1,0,2 +BRDA:37,1,1,2 +BRDA:37,2,0,1 +BRDA:37,2,1,1 +BRDA:39,3,0,1 +BRDA:39,3,1,1 +BRF:6 +BRH:6 +end_of_record +TN: +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/chainlink-ace/custom/TransferValidationPolicy.sol +FN:39,_getStorage +FN:50,configure +FN:65,setRules +FN:79,rules +FN:86,rulesCount +FN:96,run FNF:6 FNH:6 -FNDA:69,_getStorage -FNDA:33,configure +FNDA:77,_getStorage +FNDA:37,configure FNDA:2,setRules FNDA:1,rules FNDA:1,rulesCount -FNDA:35,run -DA:38,69 -DA:49,33 -DA:50,30 -DA:51,30 -DA:52,30 -DA:53,37 -DA:54,37 -DA:64,2 -DA:65,2 +FNDA:39,run +DA:40,77 +DA:51,37 +DA:52,34 +DA:53,34 +DA:54,34 +DA:55,41 +DA:56,41 DA:66,2 DA:67,2 DA:68,2 DA:69,2 +DA:70,2 DA:71,2 -DA:78,1 -DA:85,1 -DA:101,35 -DA:102,35 -DA:104,35 -DA:106,33 -DA:107,33 -DA:108,33 -DA:109,33 -DA:111,33 -DA:112,35 -DA:113,35 -DA:114,13 -DA:115,13 -DA:120,2 -DA:121,2 -DA:122,2 -DA:124,2 -DA:125,2 -DA:126,2 -DA:127,1 -DA:128,1 -DA:133,21 -LF:37 -LH:37 -BRDA:48,1,0,33 -BRDA:48,1,1,0 -BRDA:49,2,0,30 -BRDA:49,2,1,3 -BRDA:53,3,0,37 -BRDA:53,3,1,0 -BRDA:63,4,0,2 -BRDA:63,4,1,1 -BRDA:68,5,0,2 -BRDA:68,5,1,0 -BRDA:104,6,0,33 -BRDA:104,6,1,2 -BRDA:113,7,0,13 -BRDA:113,7,1,22 -BRDA:126,8,0,1 -BRDA:126,8,1,1 -BRF:16 -BRH:13 -end_of_record -TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol -FN:15,setDetachShouldRevert -FN:19,typeAndVersion -FN:23,attach -FN:27,detach -FN:34,run -FN:38,check -FN:40,setExtractor -FN:42,setExtractors -FN:44,getExtractor -FN:48,setPolicyMapper -FN:50,getPolicyMapper -FN:54,addPolicy -FN:56,addPolicyAt -FN:58,removePolicy -FN:60,getPolicies -FN:64,setPolicyConfiguration -FN:66,getPolicyConfigVersion -FN:70,setDefaultPolicyAllow -FN:72,setTargetDefaultPolicyAllow -FN:80,initialize -FN:84,_authorizeAttachPolicyEngine -FN:86,guardedRun -FN:90,guardedRunWithContext -FN:94,guardedRunAndRevert -FN:100,initializeWithPolicyEngine -FN:104,_authorizeAttachPolicyEngine -FN:106,_authorizePause -FN:108,_authorizeDeactivate -FN:110,_authorizeFreeze -FN:112,exposedTryCheckPolicies -FN:120,exposedTransferred -FNF:31 -FNH:12 -FNDA:1,setDetachShouldRevert -FNDA:0,typeAndVersion -FNDA:8,attach -FNDA:1,detach -FNDA:5,run -FNDA:0,check -FNDA:0,setExtractor -FNDA:0,setExtractors -FNDA:0,getExtractor -FNDA:0,setPolicyMapper -FNDA:0,getPolicyMapper -FNDA:0,addPolicy -FNDA:0,addPolicyAt -FNDA:0,removePolicy -FNDA:0,getPolicies -FNDA:0,setPolicyConfiguration -FNDA:0,getPolicyConfigVersion -FNDA:0,setDefaultPolicyAllow -FNDA:0,setTargetDefaultPolicyAllow -FNDA:7,initialize -FNDA:1,_authorizeAttachPolicyEngine -FNDA:1,guardedRun -FNDA:1,guardedRunWithContext -FNDA:1,guardedRunAndRevert -FNDA:1,initializeWithPolicyEngine -FNDA:0,_authorizeAttachPolicyEngine -FNDA:0,_authorizePause -FNDA:0,_authorizeDeactivate -FNDA:0,_authorizeFreeze -FNDA:1,exposedTryCheckPolicies -FNDA:3,exposedTransferred -DA:16,1 -DA:20,0 -DA:24,8 -DA:28,1 -DA:29,1 -DA:30,1 -DA:35,5 -DA:45,0 -DA:51,0 -DA:61,0 -DA:67,0 -DA:81,7 +DA:73,2 +DA:80,1 DA:87,1 -DA:91,1 -DA:95,1 -DA:101,1 -DA:117,1 -DA:126,3 -LF:18 -LH:13 -BRDA:29,1,0,1 -BRDA:29,1,1,0 -BRDA:80,2,0,7 -BRDA:80,2,1,0 -BRDA:86,3,0,1 -BRDA:86,3,1,1 -BRDA:90,4,0,1 -BRDA:90,4,1,1 -BRDA:94,5,0,1 -BRDA:94,5,1,0 -BRDA:100,6,0,1 -BRDA:100,6,1,0 -BRF:12 -BRH:8 +DA:103,39 +DA:104,39 +DA:106,39 +DA:107,4 +DA:110,35 +DA:112,33 +DA:113,33 +DA:114,33 +DA:115,33 +DA:117,33 +DA:118,35 +DA:119,35 +DA:120,13 +DA:121,13 +DA:126,2 +DA:127,2 +DA:128,2 +DA:130,2 +DA:131,2 +DA:132,2 +DA:133,1 +DA:134,1 +DA:139,21 +LF:39 +LH:39 +BRDA:50,1,0,37 +BRDA:50,1,1,0 +BRDA:51,2,0,34 +BRDA:51,2,1,3 +BRDA:55,3,0,41 +BRDA:55,3,1,0 +BRDA:65,4,0,2 +BRDA:65,4,1,1 +BRDA:70,5,0,2 +BRDA:70,5,1,0 +BRDA:106,6,0,4 +BRDA:106,6,1,35 +BRDA:110,7,0,33 +BRDA:110,7,1,2 +BRDA:119,8,0,13 +BRDA:119,8,1,22 +BRDA:132,9,0,1 +BRDA:132,9,1,1 +BRF:18 +BRH:15 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/chainlink-ace/mocks/TransferRuleMocks.sol FN:20,constructor FN:24,detectTransferRestriction FN:32,detectTransferRestrictionFrom @@ -311,7 +242,7 @@ FN:148,canReturnTransferRestrictionCode FN:152,messageForTransferRestriction FNF:22 FNH:10 -FNDA:26,constructor +FNDA:30,constructor FNDA:25,detectTransferRestriction FNDA:23,detectTransferRestrictionFrom FNDA:0,canTransfer @@ -333,7 +264,7 @@ FNDA:0,transferred FNDA:0,supportsInterface FNDA:0,canReturnTransferRestrictionCode FNDA:6,messageForTransferRestriction -DA:21,26 +DA:21,30 DA:29,25 DA:38,23 DA:42,0 @@ -382,127 +313,12 @@ BRF:18 BRH:12 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/modified/MintBurnExtractor.sol -FN:31,extract -FNF:1 -FNH:1 -FNDA:4,extract -DA:34,4 -DA:35,4 -DA:37,4 -DA:38,2 -DA:40,1 -DA:41,1 -DA:43,1 -DA:46,3 -DA:47,3 -DA:48,3 -DA:49,3 -LF:11 -LH:11 -BRDA:37,1,0,2 -BRDA:37,1,1,2 -BRDA:37,2,0,1 -BRDA:37,2,1,1 -BRDA:39,3,0,1 -BRDA:39,3,1,1 -BRF:6 -BRH:6 -end_of_record -TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/chainlink-ace/modified/PolicyProtectedUpgradeable.sol -FN:30,_policyProtectedStorage -FN:37,__PolicyProtected_init -FN:42,__PolicyProtected_init_unchained -FN:51,runPolicy -FN:69,runPolicyWithContext -FN:82,attachPolicyEngine -FN:87,_attachPolicyEngine -FN:102,getPolicyEngine -FN:107,setContext -FN:112,getContext -FN:117,clearContext -FN:124,supportsInterface -FNF:12 -FNH:12 -FNDA:4374,_policyProtectedStorage -FNDA:8,__PolicyProtected_init -FNDA:71,__PolicyProtected_init_unchained -FNDA:703,runPolicy -FNDA:2,runPolicyWithContext -FNDA:7,attachPolicyEngine -FNDA:75,_attachPolicyEngine -FNDA:1054,getPolicyEngine -FNDA:3,setContext -FNDA:1752,getContext -FNDA:4,clearContext -FNDA:11,supportsInterface -DA:32,4374 -DA:38,8 -DA:39,8 -DA:43,71 -DA:52,703 -DA:53,1 -DA:55,702 -DA:56,702 -DA:59,612 -DA:60,593 -DA:61,1 -DA:70,2 -DA:71,1 -DA:73,1 -DA:76,1 -DA:83,7 -DA:84,4 -DA:88,75 -DA:89,74 -DA:90,4 -DA:93,1 -DA:96,74 -DA:97,74 -DA:98,74 -DA:103,1054 -DA:108,3 -DA:113,1752 -DA:118,4 -DA:127,11 -LF:29 -LH:29 -BRDA:37,1,0,8 -BRDA:37,1,1,0 -BRDA:42,2,0,71 -BRDA:42,2,1,0 -BRDA:52,3,0,1 -BRDA:52,3,1,702 -BRDA:60,4,0,1 -BRDA:60,4,1,592 -BRDA:70,5,0,1 -BRDA:70,5,1,1 -BRDA:88,6,0,74 -BRDA:88,6,1,1 -BRDA:89,7,0,4 -BRDA:89,7,1,70 -BRDA:127,8,0,4 -BRDA:127,8,1,0 -BRF:16 -BRH:13 -end_of_record -TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/demo/DemoImports.sol -FNF:0 -FNH:0 -LF:0 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC1404.sol -FN:28,messageForTransferRestriction -FN:44,canTransfer -FN:55,canTransferFrom -FN:67,_detectTransferRestriction -FN:82,supportsInterface +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/lite/CCTCMTATBaseERC1404.sol +FN:27,messageForTransferRestriction +FN:43,canTransfer +FN:54,canTransferFrom +FN:66,_detectTransferRestriction +FN:81,supportsInterface FNF:5 FNH:5 FNDA:10,messageForTransferRestriction @@ -510,31 +326,31 @@ FNDA:233,canTransfer FNDA:35,canTransferFrom FNDA:8,_detectTransferRestriction FNDA:6,supportsInterface -DA:31,10 -DA:35,1 -DA:37,9 -DA:49,233 -DA:61,35 +DA:30,10 +DA:34,1 +DA:36,9 +DA:48,233 +DA:60,35 +DA:71,8 DA:72,8 -DA:73,8 +DA:73,1 DA:74,1 DA:75,1 -DA:76,1 -DA:79,7 -DA:85,6 +DA:78,7 +DA:84,6 LF:12 LH:12 -BRDA:31,1,0,1 -BRDA:31,1,1,9 -BRDA:73,2,0,1 -BRDA:73,2,1,7 -BRDA:75,3,0,1 -BRDA:75,3,1,0 +BRDA:30,1,0,1 +BRDA:30,1,1,9 +BRDA:72,2,0,1 +BRDA:72,2,1,7 +BRDA:74,3,0,1 +BRDA:74,3,1,0 BRF:6 BRH:5 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/lite/CCTCMTATBaseERC20CrossChain.sol FN:28,approve FN:31,transfer FN:40,transferFrom @@ -555,7 +371,7 @@ FNH:15 FNDA:119,approve FNDA:81,transfer FNDA:29,transferFrom -FNDA:731,_mintOverride +FNDA:735,_mintOverride FNDA:144,_burnOverride FNDA:27,_minterTransferOverride FNDA:3,decimals @@ -566,12 +382,12 @@ FNDA:9,_authorizeCCIPSetAdmin FNDA:39,_checkTokenBridge FNDA:9,_authorizeBurnFrom FNDA:12,_authorizeSelfBurn -FNDA:939,_update +FNDA:943,_update DA:29,119 DA:35,81 DA:45,29 -DA:54,731 -DA:55,716 +DA:54,735 +DA:55,720 DA:65,144 DA:66,120 DA:77,27 @@ -581,7 +397,7 @@ DA:92,10 DA:99,10 DA:106,12 DA:132,39 -DA:167,939 +DA:167,943 LF:15 LH:15 BRDA:28,1,0,119 @@ -604,7 +420,7 @@ BRF:16 BRH:16 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/lite/CCTCMTATBasePolicyEngine.sol FN:50,initialize FN:71,_initialize FN:92,__CMTAT_init @@ -620,10 +436,10 @@ FN:183,_checkTransferred FN:196,supportsInterface FNF:13 FNH:11 -FNDA:51,initialize -FNDA:51,_initialize -FNDA:51,__CMTAT_init -FNDA:51,__CMTAT_openzeppelin_init_unchained +FNDA:55,initialize +FNDA:55,_initialize +FNDA:55,__CMTAT_init +FNDA:55,__CMTAT_openzeppelin_init_unchained FNDA:0,__CMTAT_modules_init_unchained FNDA:233,canTransfer FNDA:35,canTransferFrom @@ -631,18 +447,18 @@ FNDA:0,_authorizeAttachPolicyEngine FNDA:99,_authorizePause FNDA:37,_authorizeDeactivate FNDA:78,_authorizeFreeze -FNDA:1012,_checkTransferred +FNDA:1016,_checkTransferred FNDA:6,supportsInterface -DA:51,51 -DA:72,51 -DA:95,51 -DA:98,51 -DA:101,51 -DA:104,51 -DA:107,51 -DA:108,51 -DA:111,51 -DA:121,51 +DA:51,55 +DA:72,55 +DA:95,55 +DA:98,55 +DA:101,55 +DA:104,55 +DA:107,55 +DA:108,55 +DA:111,55 +DA:121,55 DA:132,0 DA:146,233 DA:147,233 @@ -652,18 +468,18 @@ DA:163,35 DA:164,35 DA:165,12 DA:167,23 -DA:189,1012 -DA:190,994 +DA:189,1016 +DA:190,998 DA:199,6 LF:22 LH:21 -BRDA:50,1,0,51 +BRDA:50,1,0,55 BRDA:50,1,1,2 -BRDA:71,2,0,51 +BRDA:71,2,0,55 BRDA:71,2,1,0 -BRDA:92,3,0,51 +BRDA:92,3,0,55 BRDA:92,3,1,0 -BRDA:119,4,0,51 +BRDA:119,4,0,55 BRDA:119,4,1,0 BRDA:131,5,0,0 BRDA:131,5,1,0 @@ -679,7 +495,7 @@ BRDA:178,10,0,37 BRDA:178,10,1,3 BRDA:180,11,0,78 BRDA:180,11,1,9 -BRDA:190,12,0,918 +BRDA:190,12,0,922 BRDA:190,12,1,76 BRDA:200,13,0,3 BRDA:200,13,1,0 @@ -687,7 +503,7 @@ BRF:26 BRH:18 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/PolicyValidationModuleERC1404.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/lite/PolicyValidationModuleERC1404.sol FN:42,messageForTransferRestriction FN:70,detectTransferRestriction FN:83,detectTransferRestrictionFrom @@ -754,7 +570,7 @@ BRF:26 BRH:26 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/lite/ValidationModulePolicyEngine.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/lite/ValidationModulePolicyEngine.sol FN:20,canTransfer FN:32,canTransferFrom FN:45,_canTransfer @@ -772,7 +588,7 @@ FNDA:23,_canTransferFrom FNDA:11,_canTransferFromWithPolicyEngine FNDA:106,_canTransferWithPolicyEngine FNDA:118,_tryCheckPolicies -FNDA:997,_transferred +FNDA:1001,_transferred DA:25,145 DA:38,23 DA:46,145 @@ -790,14 +606,14 @@ DA:87,117 DA:92,111 DA:94,6 DA:97,1 -DA:108,997 -DA:109,928 -DA:110,928 -DA:111,927 -DA:112,927 -DA:115,920 +DA:108,1001 +DA:109,932 +DA:110,932 +DA:111,931 +DA:112,931 +DA:115,924 DA:116,2 -DA:119,921 +DA:119,925 LF:25 LH:25 BRDA:46,1,0,39 @@ -806,15 +622,15 @@ BRDA:59,2,0,12 BRDA:59,2,1,11 BRDA:85,3,0,117 BRDA:85,3,1,1 -BRDA:110,4,0,927 +BRDA:110,4,0,931 BRDA:110,4,1,1 BRDA:115,5,0,2 -BRDA:115,5,1,918 +BRDA:115,5,1,922 BRF:10 BRH:10 end_of_record TN: -SF:/home/ryan/Pictures/dev/CMTAT-ACE/contracts/modules/standard/CCTCommon.sol +SF:/Users/mark/dev/bcm/bcm-solutions/accounts/cmta/contracts/modules/standard/CCTCommon.sol FN:56,initialize FN:74,_initialize FN:95,__CMTAT_init diff --git a/doc/coverage/coverage/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html b/doc/coverage/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html similarity index 98% rename from doc/coverage/coverage/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html rename to doc/coverage/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html index abe097e..06a67f6 100644 --- a/doc/coverage/coverage/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html +++ b/doc/coverage/modules/chainlink-ace/custom/ERC20TransferFromExtractor.sol.html @@ -214,7 +214,7 @@

diff --git a/doc/coverage/coverage/modules/chainlink-ace/modified/MintBurnExtractor.sol.html b/doc/coverage/modules/chainlink-ace/custom/MintBurnExtractor.sol.html similarity index 96% rename from doc/coverage/coverage/modules/chainlink-ace/modified/MintBurnExtractor.sol.html rename to doc/coverage/modules/chainlink-ace/custom/MintBurnExtractor.sol.html index afcabb0..19d9657 100644 --- a/doc/coverage/coverage/modules/chainlink-ace/modified/MintBurnExtractor.sol.html +++ b/doc/coverage/modules/chainlink-ace/custom/MintBurnExtractor.sol.html @@ -1,7 +1,7 @@ - Code coverage report for modules/chainlink-ace/modified/MintBurnExtractor.sol + Code coverage report for modules/chainlink-ace/custom/MintBurnExtractor.sol @@ -16,7 +16,7 @@

- all files / modules/chainlink-ace/modified/ MintBurnExtractor.sol + all files / modules/chainlink-ace/custom/ MintBurnExtractor.sol

@@ -202,7 +202,7 @@

diff --git a/doc/coverage/coverage/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html b/doc/coverage/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html similarity index 91% rename from doc/coverage/coverage/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html rename to doc/coverage/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html index f45a1cc..d77d463 100644 --- a/doc/coverage/coverage/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html +++ b/doc/coverage/modules/chainlink-ace/custom/TransferValidationPolicy.sol.html @@ -22,12 +22,12 @@

100% Statements - 33/33 + 34/34
- 81.25% + 83.33% Branches - 13/16 + 15/18
100% @@ -37,7 +37,7 @@

100% Lines - 37/37 + 39/39

@@ -178,7 +178,13 @@

133 134 135 -136  +136 +137 +138 +139 +140 +141 +142        @@ -215,7 +221,9 @@

      -69× +  +  +77×       @@ -226,12 +234,12 @@

      -33× -30× -30× -30× -37× 37× +34× +34× +34× +41× +41×       @@ -278,8 +286,12 @@

      -35× -35× +39× +39× +  +39× +4× +    35×   @@ -319,7 +331,7 @@

  import {Policy} from "@chainlink/policy-management/core/Policy.sol"; import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; -import {IRule} from "../../../../submodules/RuleEngine/src/interfaces/IRule.sol"; +import {IRule} from "CMTAT/mocks/RuleEngine/interfaces/IRule.sol";   /** * @title TransferValidationPolicy @@ -338,6 +350,8 @@

* the policy reverts with PolicyRejected containing the rule's message. */ contract TransferValidationPolicy is Policy { + error InvalidParametersLength(uint256 length); +  string public constant override typeAndVersion = "TransferValidationPolicy 1.0.0"; event RulesUpdated(uint256 previousCount, uint256 newCount);   @@ -416,7 +430,11 @@

TransferValidationStorage storage $ = _getStorage(); uint256 len = $.rules.length;   - if (parameters.length >= 4) { + if (parameters.length != 3 && parameters.length != 4) { + revert InvalidParametersLength(parameters.length); + } +  + if (parameters.length == 4) { // ERC20TransferFromExtractor layout: [spender, from, to, amount] address spender = abi.decode(parameters[0], (address)); address from = abi.decode(parameters[1], (address)); @@ -454,7 +472,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/index.html b/doc/coverage/modules/chainlink-ace/custom/index.html similarity index 75% rename from doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/index.html rename to doc/coverage/modules/chainlink-ace/custom/index.html index 6426d9f..0c49bff 100644 --- a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/custom/index.html +++ b/doc/coverage/modules/chainlink-ace/custom/index.html @@ -22,22 +22,22 @@

100% Statements - 41/41 + 48/48
- 80% + 85.71% Branches - 16/20 + 24/28
100% Functions - 7/7 + 8/8
- 98.15% + 98.51% Lines - 53/54 + 66/67
@@ -71,17 +71,30 @@

16/17 + + MintBurnExtractor.sol +
+ 100% + 6/6 + 100% + 6/6 + 100% + 1/1 + 100% + 11/11 + + TransferValidationPolicy.sol
100% - 33/33 - 81.25% - 13/16 + 34/34 + 83.33% + 15/18 100% 6/6 100% - 37/37 + 39/39 @@ -90,7 +103,7 @@

diff --git a/doc/coverage/coverage/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html b/doc/coverage/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html similarity index 76% rename from doc/coverage/coverage/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html rename to doc/coverage/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html index c9afb4c..db0ea57 100644 --- a/doc/coverage/coverage/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html +++ b/doc/coverage/modules/chainlink-ace/mocks/PolicyProtectedUpgradeableMocks.sol.html @@ -20,28 +20,28 @@

- 54.55% + 30% Statements - 6/11 + 3/10
- 66.67% + 25% Branches - 8/12 + 1/4
- 38.71% + 18.52% Functions - 12/31 + 5/27
- 72.22% + 35.71% Lines - 13/18 + 5/14
-
+

+}
1 2 @@ -146,32 +146,7 @@

101 102 103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129

  +104        @@ -184,44 +159,26 @@

      -  -  -1× -  -  -          -8× +        1× -1× -1× -  -  -  -  -5× -  -  -  -  -  -          +  +          -  -  +2×       @@ -247,25 +204,19 @@

      -  -  -  -  -7× +            -1× +        -1×       -1×       @@ -298,13 +249,10 @@

  3×   -   

// SPDX-License-Identifier: BUSL-1.1
 pragma solidity ^0.8.20;
  
-import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
 import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol";
-import {PolicyProtectedUpgradeable} from "../modified/PolicyProtectedUpgradeable.sol";
 import {ValidationModulePolicyEngine} from "../../lite/ValidationModulePolicyEngine.sol";
  
 contract MockPolicyEngine is IPolicyEngine {
@@ -313,7 +261,7 @@ 

uint256 public detachCalls; bool public detachShouldRevert;   - function setDetachShouldRevert(bool value) external { + function setDetachShouldRevert(bool value) external { detachShouldRevert = value; }   @@ -325,10 +273,10 @@

attachCalls++; }   - function detach() external override { + function detach() external override { detachCalls++; - Eif (detachShouldRevert) { - revert("MockPolicyEngine: detach failed"); + if (detachShouldRevert) { + revert("MockPolicyEngine: detach failed"); } }   @@ -368,38 +316,16 @@

return 0; }   + function upgradePolicy(address, address, bytes calldata) external pure override {} function setDefaultPolicyAllow(bool) external pure override {}   function setTargetDefaultPolicyAllow(address, bool) external pure override {} }   -contract PolicyProtectedUpgradeableHarness is Initializable, PolicyProtectedUpgradeable { - uint256 public counter; -  - error ForcedRevert(); -  - function initialize(address policyEngine) external Einitializer { - __PolicyProtected_init(policyEngine); - } -  - function _authorizeAttachPolicyEngine(address) internal pure override {} -  - function guardedRun() external runPolicy { - counter += 1; - } -  - function guardedRunWithContext(bytes calldata context) external runPolicyWithContext(context) { - counter += 1; - } -  - function guardedRunAndRevert() external ErunPolicy { - revert ForcedRevert(); - } -} -  -contract ValidationModulePolicyEngineHarness is Initializable, ValidationModulePolicyEngine { +contract ValidationModulePolicyEngineHarness is ValidationModulePolicyEngine { function initializeWithPolicyEngine(address policyEngine) external Einitializer { - __PolicyProtected_init(policyEngine); + __PolicyProtectedBase_init(policyEngine); }   function _authorizeAttachPolicyEngine(address) internal pure override {} @@ -426,14 +352,13 @@

) external returns (bool) { return _transferred(spender, from, to, value); } -} - 

diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html b/doc/coverage/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html similarity index 98% rename from doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html rename to doc/coverage/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html index f6eef52..d47d98b 100644 --- a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html +++ b/doc/coverage/modules/chainlink-ace/mocks/TransferRuleMocks.sol.html @@ -220,7 +220,7 @@

      -26× +30×       @@ -401,7 +401,7 @@

return detectTransferRestriction(from, to, amount) == 0; }   - function canTransferFrom( + function canTransferFrom( address /* spender */, address from, address to, @@ -520,7 +520,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/index.html b/doc/coverage/modules/chainlink-ace/mocks/index.html similarity index 74% rename from doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/index.html rename to doc/coverage/modules/chainlink-ace/mocks/index.html index ca94830..43b901a 100644 --- a/doc/coverage/coverage/lcov-report/modules/chainlink-ace/mocks/index.html +++ b/doc/coverage/modules/chainlink-ace/mocks/index.html @@ -20,24 +20,24 @@

- 60% + 62.5% Statements - 21/35 + 15/24
66.67% Branches - 20/30 + 12/18
- 41.51% + 45.45% Functions - 22/53 + 10/22
- 67.44% + 64% Lines - 29/43 + 16/25
@@ -59,19 +59,6 @@

- PolicyProtectedUpgradeableMocks.sol -
- 54.55% - 6/11 - 66.67% - 8/12 - 38.71% - 12/31 - 72.22% - 13/18 - - - TransferRuleMocks.sol
62.5% @@ -90,7 +77,7 @@

diff --git a/doc/coverage/coverage/modules/lite/CCTCMTATBaseERC1404.sol.html b/doc/coverage/modules/lite/CCTCMTATBaseERC1404.sol.html similarity index 96% rename from doc/coverage/coverage/modules/lite/CCTCMTATBaseERC1404.sol.html rename to doc/coverage/modules/lite/CCTCMTATBaseERC1404.sol.html index 7e72df8..44fc278 100644 --- a/doc/coverage/coverage/modules/lite/CCTCMTATBaseERC1404.sol.html +++ b/doc/coverage/modules/lite/CCTCMTATBaseERC1404.sol.html @@ -129,9 +129,7 @@

84 85 86 -87 -88  -  +87        @@ -223,7 +221,6 @@

  import {CCTCMTATBasePolicyEngine} from "./CCTCMTATBasePolicyEngine.sol"; import {PolicyValidationModuleERC1404, IERC1404, IERC1404Extend} from "./PolicyValidationModuleERC1404.sol"; -import {ValidationModulePolicyEngine} from "./ValidationModulePolicyEngine.sol"; import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol"; import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import { @@ -258,7 +255,7 @@

}   /** - * @inheritdoc ValidationModulePolicyEngine + * @inheritdoc CCTCMTATBasePolicyEngine */ function canTransfer( address from, @@ -269,7 +266,7 @@

}   /** - * @inheritdoc ValidationModulePolicyEngine + * @inheritdoc CCTCMTATBasePolicyEngine */ function canTransferFrom( address spender, @@ -310,7 +307,7 @@

diff --git a/doc/coverage/coverage/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html b/doc/coverage/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html similarity index 98% rename from doc/coverage/coverage/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html rename to doc/coverage/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html index 8b4c61c..ce0c13d 100644 --- a/doc/coverage/coverage/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html +++ b/doc/coverage/modules/lite/CCTCMTATBaseERC20CrossChain.sol.html @@ -265,8 +265,8 @@

      -731× -716× +735× +720×       @@ -378,7 +378,7 @@

      -939× +943×      
// SPDX-License-Identifier: MPL-2.0
@@ -556,7 +556,7 @@ 

diff --git a/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBasePolicyEngine.sol.html b/doc/coverage/modules/lite/CCTCMTATBasePolicyEngine.sol.html similarity index 95% rename from doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBasePolicyEngine.sol.html rename to doc/coverage/modules/lite/CCTCMTATBasePolicyEngine.sol.html index cf81183..f2e3cf8 100644 --- a/doc/coverage/coverage/lcov-report/modules/lite/CCTCMTATBasePolicyEngine.sol.html +++ b/doc/coverage/modules/lite/CCTCMTATBasePolicyEngine.sol.html @@ -296,7 +296,7 @@

      -51× +55×       @@ -317,7 +317,7 @@

      -51× +55×       @@ -340,23 +340,23 @@

      -51× +55×     -51× +55×     -51× +55×     -51× +55×     -51× -51× +55× +55×     -51× +55×       @@ -366,7 +366,7 @@

      -51× +55×       @@ -434,8 +434,8 @@

      -1012× -994× +1016× +998×       @@ -457,7 +457,7 @@

CMTATBaseCommon, CMTATBaseAccessControl } from "CMTAT/modules/1_CMTATBaseAccessControl.sol"; -import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedBaseUpgradeable} from "@chainlink/policy-management/core/PolicyProtectedBaseUpgradeable.sol"; import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol"; import {IERC1643} from "CMTAT/interfaces/tokenization/draft-IERC1643.sol"; @@ -559,7 +559,7 @@

__DocumentEngineModule_init_unchained(documentEngine_);   /* Chainlink-ACE policy module */ - __PolicyProtected_init_unchained(policyEngine_); + __PolicyProtectedBase_init_unchained(policyEngine_); }   /* @@ -646,10 +646,10 @@

  function supportsInterface( bytes4 interfaceId - ) public view virtual override(CMTATBaseAccessControl, PolicyProtectedUpgradeable) returns (bool) { + ) public view virtual override(CMTATBaseAccessControl, PolicyProtectedBaseUpgradeable) returns (bool) { return CMTATBaseAccessControl.supportsInterface(interfaceId) || - PolicyProtectedUpgradeable.supportsInterface(interfaceId); + PolicyProtectedBaseUpgradeable.supportsInterface(interfaceId); } }  

@@ -658,7 +658,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/lite/PolicyValidationModuleERC1404.sol.html b/doc/coverage/modules/lite/PolicyValidationModuleERC1404.sol.html similarity index 99% rename from doc/coverage/coverage/lcov-report/modules/lite/PolicyValidationModuleERC1404.sol.html rename to doc/coverage/modules/lite/PolicyValidationModuleERC1404.sol.html index f4a71d2..55557a8 100644 --- a/doc/coverage/coverage/lcov-report/modules/lite/PolicyValidationModuleERC1404.sol.html +++ b/doc/coverage/modules/lite/PolicyValidationModuleERC1404.sol.html @@ -424,7 +424,7 @@

diff --git a/doc/coverage/coverage/modules/lite/ValidationModulePolicyEngine.sol.html b/doc/coverage/modules/lite/ValidationModulePolicyEngine.sol.html similarity index 95% rename from doc/coverage/coverage/modules/lite/ValidationModulePolicyEngine.sol.html rename to doc/coverage/modules/lite/ValidationModulePolicyEngine.sol.html index 946b9d3..f44f4d0 100644 --- a/doc/coverage/coverage/modules/lite/ValidationModulePolicyEngine.sol.html +++ b/doc/coverage/modules/lite/ValidationModulePolicyEngine.sol.html @@ -271,18 +271,18 @@

      -997× -928× -928× -927× -927× +1001× +932× +932× +931× +931×     -920× +924× 2×     -921× +925×      
// SPDX-License-Identifier: MPL-2.0
@@ -290,11 +290,11 @@ 

pragma solidity ^0.8.20;   import {ValidationModuleCore} from "CMTAT/modules/wrapper/core/ValidationModuleCore.sol"; -import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedBaseUpgradeable} from "@chainlink/policy-management/core/PolicyProtectedBaseUpgradeable.sol"; import {IPolicyEngine} from "@chainlink/policy-management/interfaces/IPolicyEngine.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";   -abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedUpgradeable { +abstract contract ValidationModulePolicyEngine is ValidationModuleCore, PolicyProtectedBaseUpgradeable { /*////////////////////////////////////////////////////////////// PUBLIC/EXTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ @@ -302,7 +302,7 @@

/* ============ View functions ============ */ /** * @inheritdoc ValidationModuleCore - * @dev call the ruleEngine if set + * @dev call the policy engine if set */ function canTransfer( address from, @@ -314,7 +314,7 @@

  /** * @inheritdoc ValidationModuleCore - * @dev call the ruleEngine if set + * @dev call the policy engine if set */ function canTransferFrom( address spender, @@ -412,7 +412,7 @@

diff --git a/doc/coverage/coverage/modules/lite/index.html b/doc/coverage/modules/lite/index.html similarity index 98% rename from doc/coverage/coverage/modules/lite/index.html rename to doc/coverage/modules/lite/index.html index b5c4260..b286953 100644 --- a/doc/coverage/coverage/modules/lite/index.html +++ b/doc/coverage/modules/lite/index.html @@ -129,7 +129,7 @@

diff --git a/doc/coverage/coverage/modules/standard/CCTCommon.sol.html b/doc/coverage/modules/standard/CCTCommon.sol.html similarity index 98% rename from doc/coverage/coverage/modules/standard/CCTCommon.sol.html rename to doc/coverage/modules/standard/CCTCommon.sol.html index cc6db7a..4d8a056 100644 --- a/doc/coverage/coverage/modules/standard/CCTCommon.sol.html +++ b/doc/coverage/modules/standard/CCTCommon.sol.html @@ -742,12 +742,12 @@

import {ICMTATConstructor} from "CMTAT/interfaces/technical/ICMTATConstructor.sol"; import {ISnapshotEngine} from "CMTAT/interfaces/engine/ISnapshotEngine.sol"; /* ==== Chainlink ACE === */ -import {PolicyProtectedUpgradeable} from "../chainlink-ace/modified/PolicyProtectedUpgradeable.sol"; +import {PolicyProtectedBaseUpgradeable} from "@chainlink/policy-management/core/PolicyProtectedBaseUpgradeable.sol";   abstract contract CCTCommon is OwnableUpgradeable, ERC20CrossChainModule, - PolicyProtectedUpgradeable, + PolicyProtectedBaseUpgradeable, CMTATBaseCommon, CCIPModule { @@ -809,7 +809,7 @@

// Openzeppelin __CMTAT_openzeppelin_init_unchained(ERC20Attributes_);   - __PolicyProtected_init_unchained(policyEngine); + __PolicyProtectedBase_init_unchained(policyEngine);   /* Wrapper modules */ __CMTAT_modules_init_unchained(ERC20Attributes_, ExtraInformationAttributes_); @@ -905,10 +905,10 @@

  function supportsInterface( bytes4 _interfaceId - ) public view virtual override(IERC165, ERC20CrossChainModule, PolicyProtectedUpgradeable) returns (bool) { + ) public view virtual override(IERC165, ERC20CrossChainModule, PolicyProtectedBaseUpgradeable) returns (bool) { return ERC20CrossChainModule.supportsInterface(_interfaceId) || - PolicyProtectedUpgradeable.supportsInterface(_interfaceId); + PolicyProtectedBaseUpgradeable.supportsInterface(_interfaceId); }   /* ==== Mint and Burn Operations ==== */ @@ -1039,7 +1039,7 @@

diff --git a/doc/coverage/coverage/lcov-report/modules/standard/index.html b/doc/coverage/modules/standard/index.html similarity index 97% rename from doc/coverage/coverage/lcov-report/modules/standard/index.html rename to doc/coverage/modules/standard/index.html index d4afee4..de598aa 100644 --- a/doc/coverage/coverage/lcov-report/modules/standard/index.html +++ b/doc/coverage/modules/standard/index.html @@ -77,7 +77,7 @@

diff --git a/doc/coverage/coverage/prettify.css b/doc/coverage/prettify.css similarity index 100% rename from doc/coverage/coverage/prettify.css rename to doc/coverage/prettify.css diff --git a/doc/coverage/coverage/prettify.js b/doc/coverage/prettify.js similarity index 100% rename from doc/coverage/coverage/prettify.js rename to doc/coverage/prettify.js diff --git a/doc/coverage/coverage/sort-arrow-sprite.png b/doc/coverage/sort-arrow-sprite.png similarity index 100% rename from doc/coverage/coverage/sort-arrow-sprite.png rename to doc/coverage/sort-arrow-sprite.png diff --git a/doc/coverage/coverage/sorter.js b/doc/coverage/sorter.js similarity index 100% rename from doc/coverage/coverage/sorter.js rename to doc/coverage/sorter.js diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..f4b002e --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,54 @@ +const js = require('@eslint/js'); +const prettier = require('eslint-config-prettier'); + +module.exports = [ + { + ignores: [ + 'node_modules/**', + 'submodules/**', + 'artifacts/**', + 'cache_hardhat/**', + 'typechain-types/**', + 'cct/**', + 'doc/**', + ], + }, + js.configs.recommended, + prettier, + { + files: ['test/**/*.js'], + languageOptions: { + globals: { + before: 'readonly', + after: 'readonly', + beforeEach: 'readonly', + afterEach: 'readonly', + describe: 'readonly', + it: 'readonly', + context: 'readonly', + }, + }, + }, + { + languageOptions: { + ecmaVersion: 'latest', + sourceType: 'commonjs', + globals: { + require: 'readonly', + module: 'readonly', + exports: 'readonly', + __dirname: 'readonly', + __filename: 'readonly', + process: 'readonly', + Buffer: 'readonly', + setTimeout: 'readonly', + clearTimeout: 'readonly', + console: 'readonly', + ethers: 'readonly', + }, + }, + rules: { + 'no-unused-vars': ['warn', { argsIgnorePattern: '^_' }], + }, + }, +]; diff --git a/hardhat.config.js b/hardhat.config.js index ea5798f..0a94789 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,7 +1,8 @@ require('@nomicfoundation/hardhat-foundry'); require('@nomicfoundation/hardhat-chai-matchers'); require('@openzeppelin/hardhat-upgrades'); -require('solidity-coverage') +require('hardhat-dependency-compiler'); +require('solidity-coverage'); const { silenceWarnings } = require('@openzeppelin/upgrades-core'); silenceWarnings(); @@ -36,4 +37,16 @@ module.exports = { sources: './contracts', tests: './test', }, + dependencyCompiler: { + paths: [ + '@chainlink/contracts/src/v0.8/tests/MockV3Aggregator.sol', + '@chainlink/policy-management/core/PolicyEngine.sol', + '@chainlink/policy-management/policies/PausePolicy.sol', + '@chainlink/policy-management/policies/RoleBasedAccessControlPolicy.sol', + '@chainlink/policy-management/policies/SecureMintPolicy.sol', + '@chainlink/policy-management/extractors/ERC20TransferExtractor.sol', + 'CMTAT/mocks/SnapshotEngineMock.sol', + 'CMTAT/mocks/DocumentEngineMock.sol', + ], + }, }; diff --git a/package-lock.json b/package-lock.json index 65887c6..a10865d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,12 +7,10 @@ "": { "name": "cmtat-ace", "version": "1.0.0", - "dependencies": { - "solidity-coverage": "^0.8.17" - }, "devDependencies": { - "@chainlink/ace": "1.0.0", + "@chainlink/ace": "1.1.1", "@chainlink/contracts": "1.3.0", + "@eslint/js": "^10.0.1", "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", "@nomicfoundation/hardhat-foundry": "^1.2.1", "@nomicfoundation/hardhat-network-helpers": "^1.1.2", @@ -20,12 +18,15 @@ "@openzeppelin/contracts-upgradeable": "5.6.1", "@openzeppelin/hardhat-upgrades": "^3.2.0", "@openzeppelin/upgrades-core": "^1.44.1", - "eslint": "^8.57.1", + "eslint": "^10.4.1", "eslint-config-prettier": "^10.1.8", "hardhat": "^2.28.0", "hardhat-contract-sizer": "^2.10.0", + "hardhat-dependency-compiler": "^1.2.1", "hardhat-gas-reporter": "^1.0.9", + "prettier": "^3.8.4", "prettier-plugin-solidity": "^2.3.1", + "solidity-coverage": "^0.8.17", "surya": "^0.4.13" } }, @@ -832,9 +833,9 @@ "dev": true }, "node_modules/@chainlink/ace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@chainlink/ace/-/ace-1.0.0.tgz", - "integrity": "sha512-lamF+fabw5cyIQ+7PA5QkEl0GyHmmH3lc875jrspo9VxsxiKbMxDcRDGPEuubFQS3Zcx7H/Z80C72+Xm/FgeqA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@chainlink/ace/-/ace-1.1.1.tgz", + "integrity": "sha512-SgfFFUn3PQ2MkHP8811UP2GEZ30bxtSdbQbm9z1VEejOitZW6PW63cjWhgwHChZnwiVhc+EQSrJtSW6zFjEbPQ==", "dev": true, "license": "BUSL-1.1" }, @@ -1253,62 +1254,129 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-array/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.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" + "balanced-match": "^4.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "18 || 20 || >=22" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "node_modules/@eslint/config-helpers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^1.1.7" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": "*" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eth-optimism/core-utils": { @@ -1339,6 +1407,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "dev": true, "bin": { "rlp": "bin/rlp.cjs" }, @@ -1350,6 +1419,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", + "dev": true, "dependencies": { "@ethereumjs/rlp": "^5.0.2", "ethereum-cryptography": "^2.2.1" @@ -1362,6 +1432,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, "dependencies": { "@noble/hashes": "1.4.0" }, @@ -1373,6 +1444,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, "engines": { "node": ">= 16" }, @@ -1384,6 +1456,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -1395,6 +1468,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "dev": true, "funding": [ { "type": "individual", @@ -1421,6 +1495,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "dev": true, "funding": [ { "type": "individual", @@ -1445,6 +1520,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "dev": true, "funding": [ { "type": "individual", @@ -1467,6 +1543,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "dev": true, "funding": [ { "type": "individual", @@ -1489,6 +1566,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "dev": true, "funding": [ { "type": "individual", @@ -1527,6 +1605,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "dev": true, "funding": [ { "type": "individual", @@ -1547,6 +1626,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "dev": true, "funding": [ { "type": "individual", @@ -1565,6 +1645,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "dev": true, "funding": [ { "type": "individual", @@ -1611,6 +1692,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "dev": true, "funding": [ { "type": "individual", @@ -1704,6 +1786,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "dev": true, "funding": [ { "type": "individual", @@ -1723,6 +1806,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "dev": true, "funding": [ { "type": "individual", @@ -1738,6 +1822,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "dev": true, "funding": [ { "type": "individual", @@ -1776,6 +1861,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "dev": true, "funding": [ { "type": "individual", @@ -1873,6 +1959,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "dev": true, "funding": [ { "type": "individual", @@ -1913,6 +2000,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "dev": true, "funding": [ { "type": "individual", @@ -1960,6 +2048,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "dev": true, "funding": [ { "type": "individual", @@ -1980,6 +2069,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "dev": true, "funding": [ { "type": "individual", @@ -2060,6 +2150,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "dev": true, "funding": [ { "type": "individual", @@ -2105,48 +2196,47 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, "engines": { "node": ">=14" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/types": "^0.15.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "Apache-2.0", "engines": { - "node": "*" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -2163,13 +2253,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@manypkg/find-root": { "version": "1.1.0", @@ -2261,6 +2357,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true, "funding": [ { "type": "individual", @@ -2285,6 +2382,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2297,6 +2395,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "engines": { "node": ">= 8" } @@ -2305,6 +2404,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2317,6 +2417,7 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.23.tgz", "integrity": "sha512-F2/6HZh8Q9RsgkOIkRrckldbhPjIZY7d4mT9LYuW68miwGQ5l7CkAgcz9fRRiurA0+YJhtsbx/EyrD9DmX9BOw==", + "dev": true, "license": "MIT", "dependencies": { "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.23", @@ -2335,6 +2436,7 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.23.tgz", "integrity": "sha512-Amh7mRoDzZyJJ4efqoePqdoZOzharmSOttZuJDlVE5yy07BoE8hL6ZRpa5fNYn0LCqn/KoWs8OHANWxhKDGhvQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2344,6 +2446,7 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.23.tgz", "integrity": "sha512-9wn489FIQm7m0UCD+HhktjWx6vskZzeZD9oDc2k9ZvbBzdXwPp5tiDqUBJ+eQpByAzCDfteAJwRn2lQCE0U+Iw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2353,6 +2456,7 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.23.tgz", "integrity": "sha512-nlk5EejSzEUfEngv0Jkhqq3/wINIfF2ED9wAofc22w/V1DV99ASh9l3/e/MIHOQFecIZ9MDqt0Em9/oDyB1Uew==", + "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2362,6 +2466,7 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.23.tgz", "integrity": "sha512-SJuPBp3Rc6vM92UtVTUxZQ/QlLhLfwTftt2XUiYohmGKB3RjGzpgduEFMCA0LEnucUckU6UHrJNFHiDm77C4PQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2371,6 +2476,7 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.23.tgz", "integrity": "sha512-NU+Qs3u7Qt6t3bJFdmmjd5CsvgI2bPPzO31KifM2Ez96/jsXYho5debtTQnimlb5NAqiHTSlxjh/F8ROcptmeQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2380,6 +2486,7 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.23.tgz", "integrity": "sha512-F78fZA2h6/ssiCSZOovlgIu0dUeI7ItKPsDDF3UUlIibef052GCXmliMinC90jVPbrjUADMd1BUwjfI0Z8OllQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2389,6 +2496,7 @@ "version": "0.12.0-next.23", "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.23.tgz", "integrity": "sha512-IfJZQJn7d/YyqhmguBIGoCKjE9dKjbu6V6iNEPApfwf5JyyjHYyyfkLU4rf7hygj57bfH4sl1jtQ6r8HnT62lw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2466,6 +2574,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "dev": true, "engines": { "node": ">= 12" }, @@ -2483,6 +2592,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2492,6 +2602,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2501,6 +2612,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2510,6 +2622,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2519,6 +2632,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2528,6 +2642,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2537,6 +2652,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", + "dev": true, "optional": true, "engines": { "node": ">= 12" @@ -2677,6 +2793,7 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "dev": true, "funding": { "url": "https://paulmillr.com/funding/" } @@ -2685,6 +2802,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -2698,6 +2816,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, "dependencies": { "@noble/hashes": "1.4.0" }, @@ -2709,6 +2828,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, "engines": { "node": ">= 16" }, @@ -2720,6 +2840,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, "funding": { "url": "https://paulmillr.com/funding/" } @@ -2728,6 +2849,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -2740,6 +2862,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, "engines": { "node": ">= 16" }, @@ -2751,6 +2874,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, "funding": { "url": "https://paulmillr.com/funding/" } @@ -2759,6 +2883,7 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -2773,12 +2898,14 @@ "node_modules/@sentry/core/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@sentry/hub": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, "dependencies": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", @@ -2791,12 +2918,14 @@ "node_modules/@sentry/hub/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@sentry/minimal": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", @@ -2809,12 +2938,14 @@ "node_modules/@sentry/minimal/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@sentry/node": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, "dependencies": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -2833,12 +2964,14 @@ "node_modules/@sentry/node/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@sentry/tracing": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -2853,12 +2986,14 @@ "node_modules/@sentry/tracing/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@sentry/types": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, "engines": { "node": ">=6" } @@ -2867,6 +3002,7 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, "dependencies": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" @@ -2878,7 +3014,8 @@ "node_modules/@sentry/utils/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@smithy/config-resolver": { "version": "4.4.17", @@ -3628,6 +3765,20 @@ "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/form-data": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", @@ -3641,22 +3792,32 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, "license": "MIT", "dependencies": { "@types/minimatch": "*", "@types/node": "*" } }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "12.20.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true }, "node_modules/@types/pbkdf2": { "version": "3.1.2", @@ -3682,13 +3843,6 @@ "@types/node": "*" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", @@ -3717,12 +3871,13 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true, "license": "ISC" }, "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", "bin": { @@ -3746,6 +3901,7 @@ "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, "engines": { "node": ">=0.3.0" } @@ -3761,6 +3917,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "dependencies": { "debug": "4" }, @@ -3772,6 +3929,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -3781,9 +3939,9 @@ } }, "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -3842,6 +4000,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, "license": "BSD-3-Clause OR MIT", "optional": true, "engines": { @@ -3852,6 +4011,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, "dependencies": { "string-width": "^4.1.0" } @@ -3860,6 +4020,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "engines": { "node": ">=6" } @@ -3868,6 +4029,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -3882,6 +4044,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3890,6 +4053,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3910,6 +4074,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3921,12 +4086,14 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, "engines": { "node": ">=8" } @@ -3959,6 +4126,7 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true, "license": "MIT" }, "node_modules/async-retry": { @@ -4015,7 +4183,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base-x": { "version": "3.0.11", @@ -4077,6 +4246,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "engines": { "node": ">=8" }, @@ -4094,6 +4264,7 @@ "version": "5.2.3", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", + "dev": true, "license": "MIT" }, "node_modules/bowser": { @@ -4107,6 +4278,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -4128,6 +4300,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -4139,6 +4312,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -4148,6 +4322,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -4158,12 +4333,14 @@ "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/browserify-aes": { "version": "1.2.0", @@ -4213,7 +4390,8 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "node_modules/buffer-xor": { "version": "1.0.3", @@ -4234,6 +4412,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, "engines": { "node": ">= 0.8" } @@ -4292,20 +4471,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "engines": { "node": ">=10" }, @@ -4374,6 +4544,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4416,6 +4587,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, "dependencies": { "readdirp": "^4.0.1" }, @@ -4459,6 +4631,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, "engines": { "node": ">=6" } @@ -4467,6 +4640,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, "engines": { "node": ">=6" }, @@ -4493,6 +4667,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -4503,6 +4678,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4513,7 +4689,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/colors": { "version": "1.4.0", @@ -4539,12 +4716,14 @@ "node_modules/command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, "engines": { "node": ">= 12" } @@ -4558,7 +4737,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", @@ -4609,6 +4789,7 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -4689,12 +4870,14 @@ "node_modules/death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==" + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", + "dev": true }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "dependencies": { "ms": "^2.1.3" }, @@ -4711,6 +4894,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -4734,6 +4918,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, "license": "MIT" }, "node_modules/define-data-property": { @@ -4766,6 +4951,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, "engines": { "node": ">= 0.8" } @@ -4783,6 +4969,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -4792,6 +4979,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "dev": true, "dependencies": { "heap": ">= 0.2.0" }, @@ -4803,6 +4991,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -4810,19 +4999,6 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dotenv": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", @@ -4850,6 +5026,7 @@ "version": "6.6.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -4864,17 +5041,20 @@ "version": "4.12.3", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true, "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -4887,6 +5067,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, "engines": { "node": ">=6" } @@ -4940,6 +5121,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, "engines": { "node": ">=6" } @@ -4948,6 +5130,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -4959,6 +5142,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "esprima": "^2.7.1", @@ -4981,6 +5165,7 @@ "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -4994,6 +5179,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5002,6 +5188,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", @@ -5015,6 +5202,7 @@ "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, "license": "MIT", "dependencies": { "deep-is": "~0.1.3", @@ -5032,6 +5220,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, "engines": { "node": ">= 0.8.0" } @@ -5040,6 +5229,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, "optional": true, "dependencies": { "amdefine": ">=0.0.4" @@ -5052,6 +5242,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" @@ -5061,60 +5252,62 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.5.0.tgz", + "integrity": "sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==", "dev": true, "license": "MIT", + "workspaces": [ + "packages/*" + ], "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.2", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^10.2.4", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { @@ -5134,17 +5327,19 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -5163,15 +5358,27 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/eslint/node_modules/cross-spawn": { @@ -5189,6 +5396,19 @@ "node": ">= 8" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -5236,16 +5456,19 @@ } }, "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/eslint/node_modules/p-limit": { @@ -5330,18 +5553,31 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^5.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -5400,6 +5636,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -5611,6 +5848,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "dev": true, "license": "MIT", "dependencies": { "@noble/hashes": "^1.4.0" @@ -5620,6 +5858,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, "license": "MIT", "engines": { "node": "^14.21.3 || >=16" @@ -5717,6 +5956,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, "license": "MIT", "dependencies": { "bn.js": "4.11.6", @@ -5731,6 +5971,7 @@ "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true, "license": "MIT" }, "node_modules/evp_bytestokey": { @@ -5780,6 +6021,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5802,6 +6044,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, "license": "MIT" }, "node_modules/fast-xml-builder": { @@ -5847,27 +6090,29 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5901,86 +6146,23 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "keyv": "^4.5.4" }, "engines": { - "node": "*" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { @@ -5994,6 +6176,7 @@ "version": "1.16.0", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "dev": true, "funding": [ { "type": "individual", @@ -6044,12 +6227,14 @@ "node_modules/fp-ts": { "version": "1.19.3", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true }, "node_modules/fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -6068,12 +6253,14 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -6097,6 +6284,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -6160,6 +6348,7 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "dev": true, "license": "ISC", "dependencies": { "chalk": "^2.4.2", @@ -6173,6 +6362,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -6185,6 +6375,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -6199,6 +6390,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -6208,12 +6400,14 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, "license": "MIT" }, "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -6223,6 +6417,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -6232,6 +6427,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -6245,6 +6441,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6263,6 +6460,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -6274,6 +6472,7 @@ "version": "5.1.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -6286,6 +6485,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, "license": "MIT", "dependencies": { "global-prefix": "^3.0.0" @@ -6298,6 +6498,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, "license": "MIT", "dependencies": { "ini": "^1.3.5", @@ -6308,35 +6509,6 @@ "node": ">=6" } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -6372,14 +6544,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphviz": { "version": "0.0.9", @@ -6398,6 +6564,7 @@ "version": "4.7.9", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.5", @@ -6419,6 +6586,7 @@ "version": "2.28.6", "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.6.tgz", "integrity": "sha512-zQze7qe+8ltwHvhX5NQ8sN1N37WWZGw8L63y+2XcPxGwAjc/SMF829z3NS6o1krX0sryhAsVBK/xrwUqlsot4Q==", + "dev": true, "license": "MIT", "dependencies": { "@ethereumjs/util": "^9.1.0", @@ -6491,6 +6659,19 @@ "hardhat": "^2.0.0" } }, + "node_modules/hardhat-dependency-compiler": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/hardhat-dependency-compiler/-/hardhat-dependency-compiler-1.2.1.tgz", + "integrity": "sha512-xG5iwbspTtxOEiP5UsPngEYQ1Hg+fjTjliapIjdTQmwGkCPofrsDhQDV2O/dopcYzcR68nTx2X8xTewYHgA2rQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.0" + } + }, "node_modules/hardhat-gas-reporter": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", @@ -6509,6 +6690,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, "funding": [ { "type": "individual", @@ -6520,6 +6702,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, "funding": { "url": "https://paulmillr.com/funding/" } @@ -6528,6 +6711,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, "funding": [ { "type": "individual", @@ -6544,6 +6728,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, "funding": [ { "type": "individual", @@ -6558,12 +6743,14 @@ "node_modules/hardhat/node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, "node_modules/hardhat/node_modules/ethereum-cryptography": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, "dependencies": { "@noble/hashes": "1.2.0", "@noble/secp256k1": "1.7.1", @@ -6575,6 +6762,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -6590,6 +6778,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -6604,6 +6793,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -6618,6 +6808,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -6632,6 +6823,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -6640,6 +6832,7 @@ "version": "5.29.0", "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "dev": true, "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -6651,6 +6844,7 @@ "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, "engines": { "node": ">=8.3.0" }, @@ -6671,6 +6865,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -6769,6 +6964,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -6817,6 +7013,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, "bin": { "he": "bin/he" } @@ -6825,12 +7022,14 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true, "license": "MIT" }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -6856,6 +7055,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", @@ -6890,6 +7090,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -6908,6 +7109,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -6939,6 +7141,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, "engines": { "node": ">= 4" } @@ -6947,34 +7150,8 @@ "version": "4.3.8", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz", "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==", - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, - "license": "MIT", - "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://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } + "license": "MIT" }, "node_modules/imurmurhash": { "version": "0.1.4", @@ -6990,6 +7167,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, "engines": { "node": ">=8" } @@ -6999,6 +7177,7 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7007,18 +7186,21 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, "license": "ISC" }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" @@ -7028,6 +7210,7 @@ "version": "1.10.4", "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, "dependencies": { "fp-ts": "^1.0.0" } @@ -7036,6 +7219,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7092,6 +7276,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7100,6 +7285,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -7108,6 +7294,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -7119,6 +7306,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.5.0", @@ -7129,24 +7317,16 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.12.0" } }, "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, "engines": { "node": ">=8" } @@ -7195,6 +7375,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "engines": { "node": ">=10" }, @@ -7232,7 +7413,8 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isomorphic-unfetch": { "version": "3.1.0", @@ -7253,12 +7435,14 @@ "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -7291,6 +7475,7 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "dev": true, "engines": { "node": ">=7.10.1" } @@ -7299,6 +7484,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -7307,6 +7493,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "dev": true, "license": "MIT", "engines": { "node": "*" @@ -7316,6 +7503,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "dev": true, "hasInstallScript": true, "dependencies": { "node-addon-api": "^2.0.0", @@ -7340,6 +7528,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7384,6 +7573,7 @@ "version": "4.18.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, "license": "MIT" }, "node_modules/lodash.isequal": { @@ -7394,13 +7584,6 @@ "dev": true, "peer": true }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.startcase": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", @@ -7411,6 +7594,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -7434,7 +7618,8 @@ "node_modules/lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true }, "node_modules/markdown-table": { "version": "1.1.3", @@ -7466,6 +7651,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, "engines": { "node": ">= 0.10.0" } @@ -7474,6 +7660,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { "node": ">= 8" } @@ -7482,6 +7669,7 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", + "dev": true, "dependencies": { "@noble/curves": "~1.8.1", "@noble/hashes": "~1.7.1", @@ -7492,6 +7680,7 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "dev": true, "dependencies": { "@noble/hashes": "1.7.2" }, @@ -7506,6 +7695,7 @@ "version": "1.7.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "dev": true, "engines": { "node": "^14.21.3 || >=16" }, @@ -7517,12 +7707,14 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "dev": true, "license": "MIT" }, "node_modules/micro-packed": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", + "dev": true, "dependencies": { "@scure/base": "~1.2.5" }, @@ -7534,6 +7726,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -7566,12 +7759,14 @@ "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true }, "node_modules/minimatch": { "version": "9.0.9", @@ -7593,6 +7788,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7601,6 +7797,7 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.6" @@ -7613,6 +7810,7 @@ "version": "0.38.5", "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, "dependencies": { "obliterator": "^2.0.0" } @@ -7621,6 +7819,7 @@ "version": "10.8.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -7655,6 +7854,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -7678,6 +7878,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7693,6 +7894,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -7707,6 +7909,7 @@ "version": "5.1.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -7719,6 +7922,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -7733,6 +7937,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -7747,6 +7952,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -7758,6 +7964,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -7780,7 +7987,8 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", @@ -7793,6 +8001,7 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, "license": "MIT" }, "node_modules/nice-try": { @@ -7804,12 +8013,14 @@ "node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, "license": "MIT", "dependencies": { "lodash": "^4.17.21" @@ -7839,6 +8050,7 @@ "version": "4.8.4", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -7858,6 +8070,7 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, "license": "ISC", "dependencies": { "abbrev": "1" @@ -7870,6 +8083,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7878,6 +8092,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, "license": "MIT", "dependencies": { "bn.js": "4.11.6", @@ -7892,6 +8107,7 @@ "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true, "license": "MIT" }, "node_modules/object-assign": { @@ -7918,12 +8134,14 @@ "node_modules/obliterator": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", - "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==" + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", + "dev": true }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } @@ -7972,6 +8190,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8034,6 +8253,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -8062,19 +8282,6 @@ "quansync": "^0.2.7" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "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", @@ -8168,6 +8375,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -8192,6 +8400,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8208,12 +8417,14 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, "engines": { "node": ">=8" } @@ -8247,12 +8458,14 @@ "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -8265,6 +8478,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, "engines": { "node": ">=6" } @@ -8289,12 +8503,11 @@ } }, "node_modules/prettier": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", - "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.4.tgz", + "integrity": "sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -8438,6 +8651,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -8457,6 +8671,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -8465,6 +8680,7 @@ "version": "2.5.3", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", @@ -8516,6 +8732,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -8529,6 +8746,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, "engines": { "node": ">= 14.18.0" }, @@ -8541,6 +8759,7 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, "dependencies": { "resolve": "^1.1.6" }, @@ -8552,6 +8771,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, "license": "MIT", "dependencies": { "minimatch": "^3.0.5" @@ -8564,6 +8784,7 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -8574,6 +8795,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -8619,6 +8841,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8627,6 +8850,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, "dependencies": { "path-parse": "^1.0.6" }, @@ -8656,6 +8880,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -8748,6 +8973,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -8770,6 +8996,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -8788,12 +9015,14 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/sc-istanbul": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "abbrev": "1.0.x", @@ -8819,6 +9048,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -8828,6 +9058,7 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -8838,6 +9069,7 @@ "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -8852,6 +9084,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, "license": "ISC", "dependencies": { "inflight": "^1.0.4", @@ -8868,6 +9101,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8877,6 +9111,7 @@ "version": "3.14.2", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -8890,6 +9125,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -8903,6 +9139,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -8915,12 +9152,14 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true, "license": "MIT" }, "node_modules/sc-istanbul/node_modules/supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^1.0.0" @@ -8962,6 +9201,7 @@ "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -8974,6 +9214,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, "dependencies": { "randombytes": "^2.1.0" } @@ -9004,7 +9245,8 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true }, "node_modules/sha.js": { "version": "2.4.12", @@ -9077,6 +9319,7 @@ "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", @@ -9094,6 +9337,7 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -9105,6 +9349,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -9125,6 +9370,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -9215,6 +9461,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { "node": ">=8" } @@ -9223,6 +9470,7 @@ "version": "0.8.26", "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "dev": true, "dependencies": { "command-exists": "^1.2.8", "commander": "^8.1.0", @@ -9243,6 +9491,7 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -9257,6 +9506,7 @@ "version": "0.8.17", "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.17.tgz", "integrity": "sha512-5P8vnB6qVX9tt1MfuONtCTEaEGO/O4WuEidPHIAJjx4sktHHKhO3rFvnE0q8L30nWJPTrcqGQMT7jpE29B2qow==", + "dev": true, "license": "ISC", "dependencies": { "@ethersproject/abi": "^5.0.9", @@ -9290,12 +9540,14 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", + "dev": true, "license": "MIT" }, "node_modules/solidity-coverage/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -9308,6 +9560,7 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -9318,6 +9571,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -9332,6 +9586,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -9341,12 +9596,14 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, "license": "MIT" }, "node_modules/solidity-coverage/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -9356,6 +9613,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -9371,6 +9629,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -9391,6 +9650,7 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, "license": "MIT", "dependencies": { "@types/glob": "^7.1.1", @@ -9410,6 +9670,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -9419,6 +9680,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -9431,6 +9693,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -9443,6 +9706,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -9451,6 +9715,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -9540,12 +9805,14 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, "node_modules/stacktrace-parser": { "version": "0.1.11", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "dev": true, "dependencies": { "type-fest": "^0.7.1" }, @@ -9557,6 +9824,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, "engines": { "node": ">=8" } @@ -9565,6 +9833,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, "engines": { "node": ">= 0.8" } @@ -9573,6 +9842,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -9581,6 +9851,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9594,6 +9865,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -9614,6 +9886,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, "license": "MIT", "dependencies": { "is-hex-prefixed": "1.0.0" @@ -9627,6 +9900,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -9651,6 +9925,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -9775,13 +10050,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/then-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", @@ -9831,6 +10099,7 @@ "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" @@ -9846,6 +10115,7 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, "engines": { "node": ">=12.0.0" }, @@ -9862,6 +10132,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -9874,6 +10145,7 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -9905,6 +10177,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -9916,6 +10189,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, "engines": { "node": ">=0.6" } @@ -9945,7 +10219,8 @@ "node_modules/tsort": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true }, "node_modules/type-check": { "version": "0.4.0", @@ -9973,6 +10248,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "engines": { "node": ">=10" }, @@ -10004,6 +10280,7 @@ "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, "license": "BSD-2-Clause", "optional": true, "bin": { @@ -10040,6 +10317,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, "engines": { "node": ">= 4.0.0" } @@ -10048,6 +10326,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, "engines": { "node": ">= 0.8" } @@ -10066,17 +10345,20 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true, "license": "MIT" }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -10085,6 +10367,7 @@ "version": "1.10.4", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "dev": true, "license": "LGPL-3.0", "dependencies": { "@ethereumjs/util": "^8.1.0", @@ -10104,6 +10387,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "dev": true, "license": "MPL-2.0", "bin": { "rlp": "bin/rlp" @@ -10116,6 +10400,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dev": true, "license": "MPL-2.0", "dependencies": { "@ethereumjs/rlp": "^4.0.1", @@ -10130,6 +10415,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, "license": "MIT", "dependencies": { "@noble/hashes": "1.4.0" @@ -10142,6 +10428,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 16" @@ -10154,6 +10441,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, "license": "MIT", "dependencies": { "@noble/curves": "1.4.2", @@ -10182,6 +10470,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -10214,6 +10503,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, "dependencies": { "string-width": "^4.0.0" }, @@ -10225,6 +10515,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10234,17 +10525,20 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, "license": "MIT" }, "node_modules/workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==" + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -10260,7 +10554,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/ws": { "version": "8.17.1", @@ -10304,6 +10599,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { "node": ">=10" } @@ -10322,6 +10618,7 @@ "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -10339,6 +10636,7 @@ "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, "engines": { "node": ">=10" } @@ -10347,6 +10645,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -10361,6 +10660,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 01e543a..a66650b 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,9 @@ "author": "", "homepage": "https://github.com/CMTA/CMTAT-ACE#readme", "devDependencies": { - "@chainlink/ace": "1.0.0", + "@chainlink/ace": "1.1.1", "@chainlink/contracts": "1.3.0", + "@eslint/js": "^10.0.1", "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", "@nomicfoundation/hardhat-foundry": "^1.2.1", "@nomicfoundation/hardhat-network-helpers": "^1.1.2", @@ -26,15 +27,15 @@ "@openzeppelin/contracts-upgradeable": "5.6.1", "@openzeppelin/hardhat-upgrades": "^3.2.0", "@openzeppelin/upgrades-core": "^1.44.1", - "eslint": "^8.57.1", + "eslint": "^10.4.1", "eslint-config-prettier": "^10.1.8", "hardhat": "^2.28.0", "hardhat-contract-sizer": "^2.10.0", + "hardhat-dependency-compiler": "^1.2.1", "hardhat-gas-reporter": "^1.0.9", + "prettier": "^3.8.4", "prettier-plugin-solidity": "^2.3.1", + "solidity-coverage": "^0.8.17", "surya": "^0.4.13" - }, - "dependencies": { - "solidity-coverage": "^0.8.17" } } diff --git a/scripts/slither.sh b/scripts/slither.sh index f068c3c..18c2c37 100755 --- a/scripts/slither.sh +++ b/scripts/slither.sh @@ -1,23 +1,12 @@ #!/usr/bin/env bash set -euo pipefail -REPORTS_DIR="reports" -TIMESTAMP=$(date +"%Y%m%d_%H%M%S") -JSON_REPORT="${REPORTS_DIR}/slither-report-${TIMESTAMP}.json" -MD_REPORT="${REPORTS_DIR}/slither-report-${TIMESTAMP}.md" +REPORT_PATH="doc/audits/tools/slither-report.md" -mkdir -p "$REPORTS_DIR" - -# Compile first so Slither can skip its own compile step -echo "Compiling contracts..." -forge build - -echo "Running Slither analysis..." - -# Run Slither with JSON output -slither . --json "$JSON_REPORT" --checklist --markdown-root "$(pwd)/" > "$MD_REPORT" 2>&1 || true +# Run Slither with JSON output (non-zero exit is normal when findings exist) +slither . --checklist > $REPORT_PATH || true echo "" echo "Reports generated:" -echo " JSON: $JSON_REPORT" -echo " Markdown: $MD_REPORT" +echo "Markdown: $REPORT_PATH" +exit 0 \ No newline at end of file diff --git a/slither.config.json b/slither.config.json index 0f6729f..feff532 100644 --- a/slither.config.json +++ b/slither.config.json @@ -1,4 +1,4 @@ { - "filter_paths": "node_modules,submodules,test", + "filter_paths": "node_modules,submodules,test,forge-std,mocks", "compile_force_framework": "foundry" } diff --git a/test/custom/erc1404ValidationAndExtractor.test.js b/test/custom/erc1404ValidationAndExtractor.test.js index d987f1c..8811b9f 100644 --- a/test/custom/erc1404ValidationAndExtractor.test.js +++ b/test/custom/erc1404ValidationAndExtractor.test.js @@ -134,7 +134,10 @@ describe('ERC1404 validation and MintBurnExtractor coverage', function () { const payload = { selector: '0x40c10f19', sender: this.admin.address, - data: ethers.AbiCoder.defaultAbiCoder().encode(['address', 'uint256'], [this.address1.address, 123n]), + data: ethers.AbiCoder.defaultAbiCoder().encode( + ['address', 'uint256'], + [this.address1.address, 123n], + ), context: '0x', }; @@ -144,14 +147,19 @@ describe('ERC1404 validation and MintBurnExtractor coverage', function () { expect(ethers.AbiCoder.defaultAbiCoder().decode(['address'], params[0].value)[0]).to.equal( this.address1.address, ); - expect(ethers.AbiCoder.defaultAbiCoder().decode(['uint256'], params[1].value)[0]).to.equal(123n); + expect(ethers.AbiCoder.defaultAbiCoder().decode(['uint256'], params[1].value)[0]).to.equal( + 123n, + ); }); it('extracts account and amount for burnFrom(address,uint256)', async function () { const payload = { selector: '0x79cc6790', sender: this.admin.address, - data: ethers.AbiCoder.defaultAbiCoder().encode(['address', 'uint256'], [this.address2.address, 50n]), + data: ethers.AbiCoder.defaultAbiCoder().encode( + ['address', 'uint256'], + [this.address2.address, 50n], + ), context: '0x', }; @@ -159,7 +167,9 @@ describe('ERC1404 validation and MintBurnExtractor coverage', function () { expect(ethers.AbiCoder.defaultAbiCoder().decode(['address'], params[0].value)[0]).to.equal( this.address2.address, ); - expect(ethers.AbiCoder.defaultAbiCoder().decode(['uint256'], params[1].value)[0]).to.equal(50n); + expect(ethers.AbiCoder.defaultAbiCoder().decode(['uint256'], params[1].value)[0]).to.equal( + 50n, + ); }); it('uses sender as account for burn(uint256)', async function () { @@ -174,7 +184,9 @@ describe('ERC1404 validation and MintBurnExtractor coverage', function () { expect(ethers.AbiCoder.defaultAbiCoder().decode(['address'], params[0].value)[0]).to.equal( this.address3.address, ); - expect(ethers.AbiCoder.defaultAbiCoder().decode(['uint256'], params[1].value)[0]).to.equal(77n); + expect(ethers.AbiCoder.defaultAbiCoder().decode(['uint256'], params[1].value)[0]).to.equal( + 77n, + ); }); it('reverts on unsupported selector', async function () { diff --git a/test/custom/policyProtectedUpgradeable.test.js b/test/custom/policyProtectedUpgradeable.test.js deleted file mode 100644 index e773072..0000000 --- a/test/custom/policyProtectedUpgradeable.test.js +++ /dev/null @@ -1,131 +0,0 @@ -const { expect } = require('chai'); -const { ethers } = require('hardhat'); - -describe('PolicyProtectedUpgradeable', function () { - const iPolicyProtected = new ethers.Interface([ - 'function attachPolicyEngine(address policyEngine)', - 'function getPolicyEngine() view returns (address)', - 'function setContext(bytes context)', - 'function getContext() view returns (bytes)', - 'function clearContext()', - ]); - - const toErrorStringData = (reason) => - ethers.concat([ - '0x08c379a0', - ethers.AbiCoder.defaultAbiCoder().encode(['string'], [reason]), - ]); - - const iPolicyProtectedInterfaceId = (() => { - const selectors = [ - iPolicyProtected.getFunction('attachPolicyEngine').selector, - iPolicyProtected.getFunction('getPolicyEngine').selector, - iPolicyProtected.getFunction('setContext').selector, - iPolicyProtected.getFunction('getContext').selector, - iPolicyProtected.getFunction('clearContext').selector, - ].map((selector) => BigInt(selector)); - const interfaceId = selectors.reduce((acc, selector) => acc ^ selector, 0n) & 0xffffffffn; - return `0x${interfaceId.toString(16).padStart(8, '0')}`; - })(); - - async function deployInitializedHarness() { - const engine = await ethers.deployContract('MockPolicyEngine'); - const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); - await harness.initialize(await engine.getAddress()); - return { engine, harness }; - } - - describe('initialization and attach flow', function () { - it('initializes through __PolicyProtected_init and attaches engine', async function () { - const engine = await ethers.deployContract('MockPolicyEngine'); - const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); - - await expect(harness.initialize(await engine.getAddress())) - .to.emit(harness, 'PolicyEngineAttached') - .withArgs(await engine.getAddress()); - - expect(await harness.getPolicyEngine()).to.equal(await engine.getAddress()); - expect(await engine.attachCalls()).to.equal(1n); - }); - - it('reverts initialize with zero policy engine', async function () { - const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); - await expect(harness.initialize(ethers.ZeroAddress)).to.be.revertedWith('Policy engine is zero address'); - }); - - it('detaches previous engine on attach and emits detach failed if detach reverts', async function () { - const oldEngine = await ethers.deployContract('MockPolicyEngine'); - const newEngine = await ethers.deployContract('MockPolicyEngine'); - const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); - await harness.initialize(await oldEngine.getAddress()); - - await oldEngine.setDetachShouldRevert(true); - - await expect(harness.attachPolicyEngine(await newEngine.getAddress())) - .to.emit(harness, 'PolicyEngineDetachFailed') - .withArgs( - await oldEngine.getAddress(), - toErrorStringData('MockPolicyEngine: detach failed'), - ); - - expect(await harness.getPolicyEngine()).to.equal(await newEngine.getAddress()); - expect(await newEngine.attachCalls()).to.equal(1n); - }); - }); - - describe('policy execution and context', function () { - it('reverts runPolicy when engine is undefined', async function () { - const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); - - await expect(harness.guardedRun()).to.be.reverted; - await expect(harness.guardedRunWithContext('0x1234')).to.be.reverted; - }); - - it('stores, reads and clears sender context through runPolicy cleanup', async function () { - const { engine, harness } = await deployInitializedHarness(); - const context = '0x123456'; - - await harness.setContext(context); - expect(await harness.getContext()).to.equal(context); - - await harness.guardedRun(); - - const payload = await engine.lastPayload(); - expect(payload.context).to.equal(context); - expect(await harness.getContext()).to.equal('0x'); - expect(await harness.counter()).to.equal(1n); - }); - - it('does not clear context when guarded function reverts', async function () { - const harness = await ethers.deployContract('PolicyProtectedUpgradeableHarness'); - const engine = await ethers.deployContract('MockPolicyEngine'); - await harness.initialize(await engine.getAddress()); - - await harness.setContext('0xabcd'); - await expect(harness.guardedRunAndRevert()).to.be.revertedWithCustomError(harness, 'ForcedRevert'); - expect(await harness.getContext()).to.equal('0xabcd'); - - await harness.clearContext(); - expect(await harness.getContext()).to.equal('0x'); - }); - - it('passes explicit context through runPolicyWithContext', async function () { - const { engine, harness } = await deployInitializedHarness(); - const runContext = '0xdeadbeef'; - - await harness.guardedRunWithContext(runContext); - - const payload = await engine.lastPayload(); - expect(payload.context).to.equal(runContext); - expect(await harness.counter()).to.equal(1n); - }); - }); - - describe('ERC165', function () { - it('supports IPolicyProtected and rejects unknown interface', async function () { - const { harness } = await deployInitializedHarness(); - expect(await harness.supportsInterface(iPolicyProtectedInterfaceId)).to.equal(true); - expect(await harness.supportsInterface('0xffffffff')).to.equal(false); - }); - }); -}); From 211907319c0cc775a845378c390e20a6f52632bf Mon Sep 17 00:00:00 2001 From: Mark Hoang Date: Mon, 15 Jun 2026 15:17:46 +0100 Subject: [PATCH 57/57] Run format --- .github/workflows/ci.yml | 1 - CHANGELOG.md | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index decdd94..f0ce2d4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,6 @@ jobs: with: version: nightly - - name: Setup NodeJS 20.5.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 #v4.4.0 with: diff --git a/CHANGELOG.md b/CHANGELOG.md index c64ffee..fdc8388 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,8 @@ Please follow [https://changelog.md](https://changelog.md) conventions and the o Given a version number MAJOR.MINOR.PATCH, increment the: 1. MAJOR version when the new version makes: - - Incompatible proxy **storage** change internally or through the upgrade of an external library (OpenZeppelin) - - A significant change in external APIs (public/external functions) or in the internal architecture + - Incompatible proxy **storage** change internally or through the upgrade of an external library (OpenZeppelin) + - A significant change in external APIs (public/external functions) or in the internal architecture 2. MINOR version when the new version adds functionality in a backward compatible manner 3. PATCH version when the new version makes backward compatible bug fixes @@ -29,9 +29,10 @@ Reference: [keepachangelog.com/en/1.1.0/](https://keepachangelog.com/en/1.1.0/) Custom changelog tag: `Dependencies`, `Documentation`, `Testing` -## [0.1.0] - +## [0.1.0] - ### Added + - Initial release of **CMTAT-ACE**, integrating CMTAT modules with Chainlink ACE PolicyEngine. - Two deployment variants: - **Standard**: policy-authoritative access and compliance through ACE `runPolicy`.