diff --git a/governance/package.json b/governance/package.json index 994913acd9f..61e4f0e8978 100644 --- a/governance/package.json +++ b/governance/package.json @@ -3,6 +3,8 @@ "description": "Scripts for the management of the Unlock Protocol", "private": true, "dependencies": { + "@arbitrum/nitro-contracts": "1.0.2", + "@arbitrum/sdk": "3.1.9", "@matterlabs/hardhat-zksync-deploy": "1.1.2", "@matterlabs/hardhat-zksync-solc": "1.1.0", "@matterlabs/hardhat-zksync-upgradable": "1.2.4", @@ -21,8 +23,10 @@ "@unlock-protocol/hardhat-helpers": "workspace:^", "@unlock-protocol/hardhat-plugin": "workspace:^", "@unlock-protocol/networks": "workspace:./packages/networks", + "arb-shared-dependencies": "1.0.0", "eslint": "8.54.0", "ethers": "6.10.0", + "ethers5": "npm:ethers@5", "fs-extra": "11.2.0", "hardhat": "2.20.1", "solhint": "4.5.2", diff --git a/governance/proposals/010-arbitrum-l1-l2-messaging.js b/governance/proposals/010-arbitrum-l1-l2-messaging.js new file mode 100644 index 00000000000..0c8da68e7ed --- /dev/null +++ b/governance/proposals/010-arbitrum-l1-l2-messaging.js @@ -0,0 +1,215 @@ +const ethers = require('ethers5') +const { + L1ToL2MessageGasEstimator, +} = require('@arbitrum/sdk/dist/lib/message/L1ToL2MessageGasEstimator') +const { EthBridger, getL2Network } = require('@arbitrum/sdk') +const { getBaseFee } = require('@arbitrum/sdk/dist/lib/utils/lib') +const { mainnet, arbitrum } = require('@unlock-protocol/networks') + +const GRANTS_CONTRACT_ADDRESS = '0x00D5E0d31d37cc13C645D86410aB4cB7Cb428ccA' // Grants contract on Arbitrum +const TIMELOCK_L2_ALIAS = '0x28ffDfB0A6e6E06E95B3A1f928Dc4024240bD87c' // Timelock Alias Address on L2 +const L1_TIMELOCK_CONTRACT = '0x17EEDFb0a6E6e06E95B3A1F928dc4024240BC76B' // Timelock Address mainnet + +// ARB TOKEN ADDRESS ON ARBITRUM ONE +const { address: ARB_TOKEN_ADRESS_ON_L2 } = arbitrum.tokens.find( + ({ symbol }) => symbol === 'ARB' +) +const ERC20_ABI = require('@unlock-protocol/hardhat-helpers/dist/ABIs/erc20.json') +const INBOX_ABI = [ + { + inputs: [ + { + internalType: 'address', + name: 'to', + type: 'address', + }, + { + internalType: 'uint256', + name: 'l2CallValue', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'maxSubmissionCost', + type: 'uint256', + }, + { + internalType: 'address', + name: 'excessFeeRefundAddress', + type: 'address', + }, + { + internalType: 'address', + name: 'callValueRefundAddress', + type: 'address', + }, + { + internalType: 'uint256', + name: 'gasLimit', + type: 'uint256', + }, + { + internalType: 'uint256', + name: 'maxFeePerGas', + type: 'uint256', + }, + { + internalType: 'bytes', + name: 'data', + type: 'bytes', + }, + ], + name: 'createRetryableTicket', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'payable', + type: 'function', + }, +] + +/** + * Set up: instantiate L1 / L2 wallets connected to providers + */ + +const l1Provider = new ethers.providers.StaticJsonRpcProvider(mainnet.provider) +const l2Provider = new ethers.providers.StaticJsonRpcProvider(arbitrum.provider) + +module.exports = async ({ + tokenAddressL2 = ARB_TOKEN_ADRESS_ON_L2, + fromL1 = L1_TIMELOCK_CONTRACT, + toL2 = GRANTS_CONTRACT_ADDRESS, + fromL2 = TIMELOCK_L2_ALIAS, +}) => { + console.log( + 'Proposal For Executing L1 to L2 Messaging Using Arbitrum Delayed Inbox (Retryable Tickets)' + ) + + const l2Network = await getL2Network(l2Provider) + const ethBridger = new EthBridger(l2Network) + const inboxAddress = ethBridger.l2Network.ethBridge.inbox + + // token on L2 + const L2TokenContract = new ethers.Contract( + tokenAddressL2, + ERC20_ABI, + l2Provider + ) + const decimals = await L2TokenContract.decimals() + + // check balance of sender on L2 + const balanceOf = await L2TokenContract.balanceOf(fromL2) + const tokenAmount = ethers.utils.parseUnits('8200', decimals) + + // Create an instance of the Interface from the ABIs + const erc20ContractInterface = new ethers.utils.Interface(ERC20_ABI) + const inboxContractInterface = new ethers.utils.Interface(INBOX_ABI) + + // Encode the ERC20 Token transfer calldata + const transferCalldata = erc20ContractInterface.encodeFunctionData( + 'transfer', + [toL2, tokenAmount] + ) + + /** + * Now we can query the required gas params using the estimateAll method in Arbitrum SDK + */ + const l1ToL2MessageGasEstimate = new L1ToL2MessageGasEstimator(l2Provider) + + const estimateAllParams = { + from: fromL1, + to: tokenAddressL2, + l2CallValue: 0, + excessFeeRefundAddress: fromL1, + callValueRefundAddress: fromL1, + data: transferCalldata, + } + + /** + * The estimateAll method gives us the following values for sending an L1->L2 message + * (1) maxSubmissionCost: The maximum cost to be paid for submitting the transaction + * (2) gasLimit: The L2 gas limit + * (3) deposit: The total amount to deposit on L1 to cover L2 gas and L2 call value + */ + const L1ToL2MessageGasParams = await l1ToL2MessageGasEstimate.estimateAll( + estimateAllParams, + await getBaseFee(l1Provider), + l1Provider + ) + const gasPriceBid = await l2Provider.getGasPrice() + const ETHDeposit = L1ToL2MessageGasParams.deposit.toNumber() * 10 // I Multiply by 10 to add extra in case gas changes due to proposal delay + + const params = [ + estimateAllParams.to, + estimateAllParams.l2CallValue, + L1ToL2MessageGasParams.maxSubmissionCost.toString(), // maxSubmissionCost + estimateAllParams.excessFeeRefundAddress, + estimateAllParams.callValueRefundAddress, + L1ToL2MessageGasParams.gasLimit.toString(), // gasLimit + gasPriceBid.toString(), // maxFeePerGas + estimateAllParams.data, + ] + + const inboxCalldata = inboxContractInterface.encodeFunctionData( + 'createRetryableTicket', + params + ) + + const proposalName = ` + # Transfer 8200 ARB To Fund Unlock Protocol’s Ecosystem via Grants Stack + + ### Goal of the proposal + This proposal requests to use 8200 ARB from the tokens given to Unlock Protocol DAO by ArbitrumDAO to fund the retroQF round on Grants Stack for projects building on Unlock Protocol. + + #### Current situation of DAO's ARB Tokens + - total: ${ethers.utils.formatUnits(balanceOf, decimals).toString()} ARB. + - DAO ALIAS Address (On Arbitrum): [${fromL2}](https://arbiscan.io/address/${fromL2}) + + For Reference + [Snapshot temperature check for Retro QF Grants Round](https://snapshot.org/#/unlock-protocol.eth/proposal/0xaa142e599d981f0b58c3ac1a51af9f9a52fb5307f27d791ecc18c4da69eeacc3) + + In addition to the 7k ARB tokens requested for funding Unlock Ecosystem projects, an extra 1200 ARB is requested for compensation for the round management according to the following breakdown: + + 7000 ARB - Matching fund + 700 ARB (10%) of matching fund to the round manager - lanadingwall.eth + 500 ARB for research and technical assistance - dannithomx.eth + Total: 8200 ARB + + [Snapshot temperature check for 8200 ARBs](https://snapshot.org/#/unlock-protocol.eth/proposal/0x4fa320e553e6992506cd31d7c0b2013e1548c646baba02d657f3a7b198140c25) + + #### About the proposal + The proposal contains a single call to the Arbitrum Delayed Inbox Contract's \`createRetryableTicket\` function on mainnet to create a \`Retryable Ticket\` that will attempt to execute an L2 request to the ARB token contract to transfer ${ethers.utils + .formatUnits(tokenAmount, decimals) + .toString()} of token from the Timelock L2 Alias address \`${fromL2}\` to the [grants contract](https://arbiscan.io/address/0x00d5e0d31d37cc13c645d86410ab4cb7cb428cca) - \`transfer(${toL2},${ethers.utils + .formatUnits(tokenAmount, decimals) + .toString()})\`. + + Once approved and executed, the request will be sent to the Delayed Inbox contract and a ticket is created. + + Note that, this function forces the sender to provide a reasonable amount of funds (at least enough to submitting, and attempting to executing the ticket), but that doesn't guarantee a successful auto-redemption. [Checkout arbitrum docs for more info.](https://docs.arbitrum.io/arbos/l1-to-l2-messaging). + + Thank you! + ` + // Proposal ARGS i.e Call Governor.propose() directly with these values + const targets = [inboxAddress] + const values = [ETHDeposit] + const calldatas = [inboxCalldata] + const description = proposalName + + const calls = [ + { + contractAddress: inboxAddress, + calldata: inboxCalldata, + value: ETHDeposit.toString(), + }, + ] + + return { + proposalName, + calls, + } +} diff --git a/yarn.lock b/yarn.lock index df325099fb8..182b5c57066 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,6 +26,13 @@ __metadata: languageName: node linkType: hard +"@aduh95/viz.js@npm:^3.7.0": + version: 3.7.0 + resolution: "@aduh95/viz.js@npm:3.7.0" + checksum: 10/4b1aac92e7a6ea783b1ad33220163dd8623dbcd3bf947deb6a8637ee8a3b59137e76d87638a479e96df04c929dcdddc8bb3432b065642b11f75d944b431e2f9c + languageName: node + linkType: hard + "@algolia/autocomplete-core@npm:1.9.3": version: 1.9.3 resolution: "@algolia/autocomplete-core@npm:1.9.3" @@ -276,6 +283,33 @@ __metadata: languageName: node linkType: hard +"@arbitrum/nitro-contracts@npm:1.0.2": + version: 1.0.2 + resolution: "@arbitrum/nitro-contracts@npm:1.0.2" + dependencies: + "@openzeppelin/contracts": "npm:4.5.0" + "@openzeppelin/contracts-upgradeable": "npm:4.5.2" + patch-package: "npm:^6.4.7" + sol2uml: "npm:2.2.0" + dependenciesMeta: + sol2uml: + optional: true + checksum: 10/242119c32a6d58dc394c8f2f407d304643b41e0996fd0650fd34800b170660da3ab5c0e1c1aeede193ff3fda5402a375e21efaefcb48199fc962052de4b3a78e + languageName: node + linkType: hard + +"@arbitrum/sdk@npm:3.1.9": + version: 3.1.9 + resolution: "@arbitrum/sdk@npm:3.1.9" + dependencies: + "@ethersproject/address": "npm:^5.0.8" + "@ethersproject/bignumber": "npm:^5.1.1" + "@ethersproject/bytes": "npm:^5.0.8" + ethers: "npm:^5.1.0" + checksum: 10/8d04ccf6b7559d948ecc2da3c53e3a129b85480bb014aab153ca085c912a609aeabe143c5dacdb17a5cf24d1ffcbfdee37a4ee48ddfbd0b85de1b1df19b59865 + languageName: node + linkType: hard + "@ardatan/relay-compiler@npm:12.0.0": version: 12.0.0 resolution: "@ardatan/relay-compiler@npm:12.0.0" @@ -5864,7 +5898,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.0.0, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.0.4, @ethersproject/address@npm:^5.7.0": +"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.0.0, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.0.4, @ethersproject/address@npm:^5.0.8, @ethersproject/address@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/address@npm:5.7.0" dependencies: @@ -5896,7 +5930,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.0.7, @ethersproject/bignumber@npm:^5.7.0": +"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.0.7, @ethersproject/bignumber@npm:^5.1.1, @ethersproject/bignumber@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/bignumber@npm:5.7.0" dependencies: @@ -5907,7 +5941,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.0.4, @ethersproject/bytes@npm:^5.7.0": +"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.0.4, @ethersproject/bytes@npm:^5.0.8, @ethersproject/bytes@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/bytes@npm:5.7.0" dependencies: @@ -9934,6 +9968,13 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/contracts-upgradeable@npm:4.5.2": + version: 4.5.2 + resolution: "@openzeppelin/contracts-upgradeable@npm:4.5.2" + checksum: 10/5e246da7a44bb982a312ebf79978735712140692d46273566e490159b98b9041ca72cc08c3d05172137a389be4caad5afc001480bc5557f3d47162f4626e3723 + languageName: node + linkType: hard + "@openzeppelin/contracts-upgradeable@npm:4.9.5": version: 4.9.5 resolution: "@openzeppelin/contracts-upgradeable@npm:4.9.5" @@ -9955,6 +9996,13 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/contracts@npm:4.5.0": + version: 4.5.0 + resolution: "@openzeppelin/contracts@npm:4.5.0" + checksum: 10/8bfa1733732420331728cedd7f1f5f4e4ae0700b32c9e5def19b2d42dbb0b246709e8e22abd457e8269d743012ff2aed4e3f100a942f45d9507cb78d5dbd435b + languageName: node + linkType: hard + "@openzeppelin/contracts@npm:4.7.0": version: 4.7.0 resolution: "@openzeppelin/contracts@npm:4.7.0" @@ -12860,7 +12908,7 @@ __metadata: languageName: node linkType: hard -"@solidity-parser/parser@npm:^0.14.0, @solidity-parser/parser@npm:^0.14.1": +"@solidity-parser/parser@npm:^0.14.0, @solidity-parser/parser@npm:^0.14.1, @solidity-parser/parser@npm:^0.14.3": version: 0.14.5 resolution: "@solidity-parser/parser@npm:0.14.5" dependencies: @@ -17390,6 +17438,8 @@ __metadata: version: 0.0.0-use.local resolution: "@unlock-protocol/governance@workspace:governance" dependencies: + "@arbitrum/nitro-contracts": "npm:1.0.2" + "@arbitrum/sdk": "npm:3.1.9" "@matterlabs/hardhat-zksync-deploy": "npm:1.1.2" "@matterlabs/hardhat-zksync-solc": "npm:1.1.0" "@matterlabs/hardhat-zksync-upgradable": "npm:1.2.4" @@ -17408,8 +17458,10 @@ __metadata: "@unlock-protocol/hardhat-helpers": "workspace:^" "@unlock-protocol/hardhat-plugin": "workspace:^" "@unlock-protocol/networks": "workspace:./packages/networks" + arb-shared-dependencies: "npm:1.0.0" eslint: "npm:8.54.0" ethers: "npm:6.10.0" + ethers5: "npm:ethers@5" fs-extra: "npm:11.2.0" hardhat: "npm:2.20.1" solhint: "npm:4.5.2" @@ -19207,6 +19259,13 @@ __metadata: languageName: node linkType: hard +"@yarnpkg/lockfile@npm:^1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: 10/cd19e1114aaf10a05126aeea8833ef4ca8af8a46e88e12884f8359d19333fd19711036dbc2698dbe937f81f037070cf9a8da45c2e8c6ca19cafd7d15659094ed + languageName: node + linkType: hard + "@zeit/next-source-maps@npm:0.0.3": version: 0.0.3 resolution: "@zeit/next-source-maps@npm:0.0.3" @@ -19937,6 +19996,16 @@ __metadata: languageName: node linkType: hard +"arb-shared-dependencies@npm:1.0.0": + version: 1.0.0 + resolution: "arb-shared-dependencies@npm:1.0.0" + dependencies: + dotenv: "npm:^8.2.0" + eslint-plugin-prettier: "npm:^3.4.0" + checksum: 10/1a658de6423e14ef1020673ad8a07188054dc4bf24a9780b5d46cff12de4c40521c233b2cbc0d09e37d10b96b5ad0b476eebea3fa9f2de0c47dcca84b6f956e1 + languageName: node + linkType: hard + "archiver-utils@npm:^2.1.0": version: 2.1.0 resolution: "archiver-utils@npm:2.1.0" @@ -22652,7 +22721,7 @@ __metadata: languageName: node linkType: hard -"cheerio@npm:^1.0.0-rc.12": +"cheerio@npm:^1.0.0-rc.11, cheerio@npm:^1.0.0-rc.12": version: 1.0.0-rc.12 resolution: "cheerio@npm:1.0.0-rc.12" dependencies: @@ -23396,7 +23465,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^9.0.0, commander@npm:^9.3.0, commander@npm:^9.4.0": +"commander@npm:^9.0.0, commander@npm:^9.2.0, commander@npm:^9.3.0, commander@npm:^9.4.0": version: 9.5.0 resolution: "commander@npm:9.5.0" checksum: 10/41c49b3d0f94a1fbeb0463c85b13f15aa15a9e0b4d5e10a49c0a1d58d4489b549d62262b052ae0aa6cfda53299bee487bfe337825df15e342114dde543f82906 @@ -23713,6 +23782,36 @@ __metadata: languageName: node linkType: hard +"convert-svg-core@npm:^0.6.4": + version: 0.6.4 + resolution: "convert-svg-core@npm:0.6.4" + dependencies: + chalk: "npm:^4.1.2" + cheerio: "npm:^1.0.0-rc.11" + commander: "npm:^9.2.0" + file-url: "npm:^3.0.0" + get-stdin: "npm:^8.0.0" + glob: "npm:^8.0.1" + lodash.omit: "npm:^4.5.0" + lodash.pick: "npm:^4.4.0" + pollock: "npm:^0.2.0" + puppeteer: "npm:^13.7.0" + tmp: "npm:^0.2.1" + checksum: 10/0d07df05f5f4d0080ce1f35bbec3457a4954ffa4d7dee13c6394cba0b11a20d2855e2e028318845e2004c5e8cafba431ca647a225e63cdaf592ef78f96c4fa5b + languageName: node + linkType: hard + +"convert-svg-to-png@npm:^0.6.4": + version: 0.6.4 + resolution: "convert-svg-to-png@npm:0.6.4" + dependencies: + convert-svg-core: "npm:^0.6.4" + bin: + convert-svg-to-png: bin/convert-svg-to-png + checksum: 10/272712cfb04c7e68470745f6455abc58c11e21d8806d3265ff844da7877387e212ff9d729922692aa108f19c3a4fd32c231ca35f6d22c90463f3e47d9994dc84 + languageName: node + linkType: hard + "cookie-es@npm:^1.0.0": version: 1.1.0 resolution: "cookie-es@npm:1.1.0" @@ -24104,6 +24203,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:3.1.5": + version: 3.1.5 + resolution: "cross-fetch@npm:3.1.5" + dependencies: + node-fetch: "npm:2.6.7" + checksum: 10/5d101a3b1e6cb172f0e5e8168cbc927eeff2ef915f33ceef50fed85441df870e1fdff195b56eca36fae8b78ddba5d8e913b8927f73d11b19d27e96301438cd30 + languageName: node + linkType: hard + "cross-fetch@npm:^3.0.4, cross-fetch@npm:^3.0.6, cross-fetch@npm:^3.1.4, cross-fetch@npm:^3.1.5": version: 3.1.8 resolution: "cross-fetch@npm:3.1.8" @@ -24142,6 +24250,19 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^6.0.5": + version: 6.0.5 + resolution: "cross-spawn@npm:6.0.5" + dependencies: + nice-try: "npm:^1.0.4" + path-key: "npm:^2.0.1" + semver: "npm:^5.5.0" + shebang-command: "npm:^1.2.0" + which: "npm:^1.2.9" + checksum: 10/f07e643b4875f26adffcd7f13bc68d9dff20cf395f8ed6f43a23f3ee24fc3a80a870a32b246fd074e514c8fd7da5f978ac6a7668346eec57aa87bac89c1ed3a1 + languageName: node + linkType: hard + "crossws@npm:^0.2.0, crossws@npm:^0.2.2": version: 0.2.4 resolution: "crossws@npm:0.2.4" @@ -25587,6 +25708,13 @@ __metadata: languageName: node linkType: hard +"devtools-protocol@npm:0.0.981744": + version: 0.0.981744 + resolution: "devtools-protocol@npm:0.0.981744" + checksum: 10/ec502af20a8806f46d03f5dffaec126e9487c9100cc3a05dfc3159af476484a8589dcea306e121698338c4991d47738af0d621d694bc0758f5f9ebba7b85e562 + languageName: node + linkType: hard + "dezalgo@npm:^1.0.4": version: 1.0.4 resolution: "dezalgo@npm:1.0.4" @@ -26081,6 +26209,13 @@ __metadata: languageName: node linkType: hard +"dotenv@npm:^8.2.0": + version: 8.6.0 + resolution: "dotenv@npm:8.6.0" + checksum: 10/31d7b5c010cebb80046ba6853d703f9573369b00b15129536494f04b0af4ea0060ce8646e3af58b455af2f6f1237879dd261a5831656410ec92561ae1ea44508 + languageName: node + linkType: hard + "dottie@npm:^2.0.4": version: 2.0.6 resolution: "dottie@npm:2.0.6" @@ -27472,6 +27607,21 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-prettier@npm:^3.4.0": + version: 3.4.1 + resolution: "eslint-plugin-prettier@npm:3.4.1" + dependencies: + prettier-linter-helpers: "npm:^1.0.0" + peerDependencies: + eslint: ">=5.0.0" + prettier: ">=1.13.0" + peerDependenciesMeta: + eslint-config-prettier: + optional: true + checksum: 10/d7ab93df9a93f0afb9fa9c9c3cf30479075e1b56303c82ed6efbfff30c2d3d3741537b490c2b517d501bfa97a3d8d0269a1ab4b6fa741a6e966e5811efbfe8b8 + languageName: node + linkType: hard + "eslint-plugin-react-hooks@npm:^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": version: 5.0.0-canary-7118f5dd7-20230705 resolution: "eslint-plugin-react-hooks@npm:5.0.0-canary-7118f5dd7-20230705" @@ -28262,7 +28412,7 @@ __metadata: languageName: node linkType: hard -"ethers@npm:5.7.2, ethers@npm:^5.3.1, ethers@npm:^5.5.4, ethers@npm:^5.6.1, ethers@npm:^5.7.0, ethers@npm:^5.7.2": +"ethers5@npm:ethers@5, ethers@npm:5.7.2, ethers@npm:^5.1.0, ethers@npm:^5.3.1, ethers@npm:^5.5.4, ethers@npm:^5.6.1, ethers@npm:^5.6.9, ethers@npm:^5.7.0, ethers@npm:^5.7.1, ethers@npm:^5.7.2": version: 5.7.2 resolution: "ethers@npm:5.7.2" dependencies: @@ -29277,6 +29427,13 @@ __metadata: languageName: node linkType: hard +"file-url@npm:^3.0.0": + version: 3.0.0 + resolution: "file-url@npm:3.0.0" + checksum: 10/f15c1bdd81df1a09238f3411f877274d7849703df837ec327c4d1df631314f60036cb700a59d826d8c96b79ff66429d3c758480005e1899c00961541b98d5bfe + languageName: node + linkType: hard + "filelist@npm:^1.0.4": version: 1.0.4 resolution: "filelist@npm:1.0.4" @@ -29475,6 +29632,15 @@ __metadata: languageName: node linkType: hard +"find-yarn-workspace-root@npm:^2.0.0": + version: 2.0.0 + resolution: "find-yarn-workspace-root@npm:2.0.0" + dependencies: + micromatch: "npm:^4.0.2" + checksum: 10/7fa7942849eef4d5385ee96a0a9a5a9afe885836fd72ed6a4280312a38690afea275e7d09b343fe97daf0412d833f8ac4b78c17fc756386d9ebebf0759d707a7 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" @@ -30203,6 +30369,13 @@ __metadata: languageName: node linkType: hard +"get-stdin@npm:^8.0.0": + version: 8.0.0 + resolution: "get-stdin@npm:8.0.0" + checksum: 10/40128b6cd25781ddbd233344f1a1e4006d4284906191ed0a7d55ec2c1a3e44d650f280b2c9eeab79c03ac3037da80257476c0e4e5af38ddfb902d6ff06282d77 + languageName: node + linkType: hard + "get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" @@ -33002,6 +33175,17 @@ __metadata: languageName: node linkType: hard +"is-ci@npm:^2.0.0": + version: 2.0.0 + resolution: "is-ci@npm:2.0.0" + dependencies: + ci-info: "npm:^2.0.0" + bin: + is-ci: bin.js + checksum: 10/77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 + languageName: node + linkType: hard + "is-ci@npm:^3.0.1": version: 3.0.1 resolution: "is-ci@npm:3.0.1" @@ -34201,6 +34385,15 @@ __metadata: languageName: node linkType: hard +"js-graph-algorithms@npm:^1.0.18": + version: 1.0.18 + resolution: "js-graph-algorithms@npm:1.0.18" + bin: + js-graphs: ./src/jsgraphs.js + checksum: 10/84914d2dc3caacee043f42cf22e156ea9c4c98ce52588a576e33267433853f744894c4ca4b87085a613d6e197898a4eba6e9de7127e277ca1abeba96cc384b81 + languageName: node + linkType: hard + "js-sdsl@npm:^4.1.4": version: 4.4.2 resolution: "js-sdsl@npm:4.4.2" @@ -34973,6 +35166,15 @@ __metadata: languageName: node linkType: hard +"klaw-sync@npm:^6.0.0": + version: 6.0.0 + resolution: "klaw-sync@npm:6.0.0" + dependencies: + graceful-fs: "npm:^4.1.11" + checksum: 10/0da397f8961313c3ef8f79fb63af9002cde5a8fb2aeb1a37351feff0dd6006129c790400c3f5c3b4e757bedcabb13d21ec0a5eaef5a593d59515d4f2c291e475 + languageName: node + linkType: hard + "klaw@npm:^1.0.0": version: 1.3.1 resolution: "klaw@npm:1.3.1" @@ -34985,6 +35187,13 @@ __metadata: languageName: node linkType: hard +"klaw@npm:^4.0.1": + version: 4.1.0 + resolution: "klaw@npm:4.1.0" + checksum: 10/d3ac625e40a917633d89e8079b16d737dfca670d3ac92631a2d0b9005c02ed77721fa39e589d1572695b86331e516876b72fbe805438664e629177cac6c0790e + languageName: node + linkType: hard + "kleur@npm:^3.0.3": version: 3.0.3 resolution: "kleur@npm:3.0.3" @@ -35589,6 +35798,13 @@ __metadata: languageName: node linkType: hard +"lodash.omit@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.omit@npm:4.5.0" + checksum: 10/f5c67cd1df11f1275662060febb629a4d4e7b547c4bea66454508b5e6096162c2af882aab1ff8cb5dcf2b328f22252416de6ca9c1334588f6310edfac525e511 + languageName: node + linkType: hard + "lodash.pad@npm:^4.5.1": version: 4.5.1 resolution: "lodash.pad@npm:4.5.1" @@ -35610,6 +35826,13 @@ __metadata: languageName: node linkType: hard +"lodash.pick@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.pick@npm:4.4.0" + checksum: 10/5a76778aa1c245ce081d19c5a625a44cdf4853f421c8789ec962cb5d73dd21be7cf11ae3bc2123ff5f432326ed0176d674d22ca6e0e8f9eaba5b74b00f632c12 + languageName: node + linkType: hard + "lodash.repeat@npm:4.1.0, lodash.repeat@npm:^4.1.0": version: 4.1.0 resolution: "lodash.repeat@npm:4.1.0" @@ -38949,6 +39172,13 @@ __metadata: languageName: node linkType: hard +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 10/0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff + languageName: node + linkType: hard + "nise@npm:^5.1.4, nise@npm:^5.1.5": version: 5.1.9 resolution: "nise@npm:5.1.9" @@ -39098,6 +39328,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10/4bc9245383db92c35601a798c9a992fdf38d99920ceac11e0e6512ef3014d188b3807ccb060bc6c4bdb57a145030c73f5b5fd6730f665979f9264bc43ca3afea + languageName: node + linkType: hard + "node-fetch@npm:^2.0.0, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.6, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.8, node-fetch@npm:^2.7.0": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" @@ -39860,7 +40104,7 @@ __metadata: languageName: node linkType: hard -"open@npm:^7.0.3": +"open@npm:^7.0.3, open@npm:^7.4.2": version: 7.4.2 resolution: "open@npm:7.4.2" dependencies: @@ -40572,6 +40816,30 @@ __metadata: languageName: node linkType: hard +"patch-package@npm:^6.4.7": + version: 6.5.1 + resolution: "patch-package@npm:6.5.1" + dependencies: + "@yarnpkg/lockfile": "npm:^1.1.0" + chalk: "npm:^4.1.2" + cross-spawn: "npm:^6.0.5" + find-yarn-workspace-root: "npm:^2.0.0" + fs-extra: "npm:^9.0.0" + is-ci: "npm:^2.0.0" + klaw-sync: "npm:^6.0.0" + minimist: "npm:^1.2.6" + open: "npm:^7.4.2" + rimraf: "npm:^2.6.3" + semver: "npm:^5.6.0" + slash: "npm:^2.0.0" + tmp: "npm:^0.0.33" + yaml: "npm:^1.10.2" + bin: + patch-package: index.js + checksum: 10/e15b3848f008da2cc659abd6d84dfeab6ed25a999ba25692071c13409f198dad28b6e451ecfebc2139a0847ad8e608575d6724bcc887c56169df8a733b849e79 + languageName: node + linkType: hard + "path-browserify@npm:1.0.1, path-browserify@npm:^1.0.1": version: 1.0.1 resolution: "path-browserify@npm:1.0.1" @@ -40631,6 +40899,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: 10/6e654864e34386a2a8e6bf72cf664dcabb76574dd54013add770b374384d438aca95f4357bb26935b514a4e4c2c9b19e191f2200b282422a76ee038b9258c5e7 + languageName: node + linkType: hard + "path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -41088,16 +41363,14 @@ __metadata: languageName: node linkType: hard -"pkg-dir@npm:^3.0.0": - version: 3.0.0 - resolution: "pkg-dir@npm:3.0.0" - dependencies: - find-up: "npm:^3.0.0" - checksum: 10/70c9476ffefc77552cc6b1880176b71ad70bfac4f367604b2b04efd19337309a4eec985e94823271c7c0e83946fa5aeb18cd360d15d10a5d7533e19344bfa808 +"pirates@npm:^4.0.5": + version: 4.0.5 + resolution: "pirates@npm:4.0.5" + checksum: 10/3728bae0cf6c18c3d25f5449ee8c5bc1a6a83bca688abe0e1654ce8c069bfd408170397cef133ed9ec8b0faeb4093c5c728d0e72ab7b3385256cd87008c40364 languageName: node linkType: hard -"pkg-dir@npm:^4.1.0": +"pkg-dir@npm:4.2.0, pkg-dir@npm:^4.1.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" dependencies: @@ -41106,6 +41379,15 @@ __metadata: languageName: node linkType: hard +"pkg-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "pkg-dir@npm:3.0.0" + dependencies: + find-up: "npm:^3.0.0" + checksum: 10/70c9476ffefc77552cc6b1880176b71ad70bfac4f367604b2b04efd19337309a4eec985e94823271c7c0e83946fa5aeb18cd360d15d10a5d7533e19344bfa808 + languageName: node + linkType: hard + "pkg-dir@npm:^5.0.0": version: 5.0.0 resolution: "pkg-dir@npm:5.0.0" @@ -41176,6 +41458,13 @@ __metadata: languageName: node linkType: hard +"pollock@npm:^0.2.0": + version: 0.2.1 + resolution: "pollock@npm:0.2.1" + checksum: 10/cd95df0878619c9de87d2f4d9685fa2ee983a38ecd7f8f8dea6163b8b6da4c0ba9c58c40712fd301412ef69d2685cb39f3f4a05114160eea673b4c879922b581 + languageName: node + linkType: hard + "posix-character-classes@npm:^0.1.0": version: 0.1.1 resolution: "posix-character-classes@npm:0.1.1" @@ -42280,7 +42569,7 @@ __metadata: languageName: node linkType: hard -"progress@npm:^2.0.1, progress@npm:^2.0.3": +"progress@npm:2.0.3, progress@npm:^2.0.1, progress@npm:^2.0.3": version: 2.0.3 resolution: "progress@npm:2.0.3" checksum: 10/e6f0bcb71f716eee9dfac0fe8a2606e3704d6a64dd93baaf49fbadbc8499989a610fe14cf1bc6f61b6d6653c49408d94f4a94e124538084efd8e4cf525e0293d @@ -42451,7 +42740,7 @@ __metadata: languageName: node linkType: hard -"proxy-from-env@npm:^1.0.0, proxy-from-env@npm:^1.1.0": +"proxy-from-env@npm:1.1.0, proxy-from-env@npm:^1.0.0, proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" checksum: 10/f0bb4a87cfd18f77bc2fba23ae49c3b378fb35143af16cc478171c623eebe181678f09439707ad80081d340d1593cd54a33a0113f3ccb3f4bc9451488780ee23 @@ -42575,6 +42864,26 @@ __metadata: languageName: node linkType: hard +"puppeteer@npm:^13.7.0": + version: 13.7.0 + resolution: "puppeteer@npm:13.7.0" + dependencies: + cross-fetch: "npm:3.1.5" + debug: "npm:4.3.4" + devtools-protocol: "npm:0.0.981744" + extract-zip: "npm:2.0.1" + https-proxy-agent: "npm:5.0.1" + pkg-dir: "npm:4.2.0" + progress: "npm:2.0.3" + proxy-from-env: "npm:1.1.0" + rimraf: "npm:3.0.2" + tar-fs: "npm:2.1.1" + unbzip2-stream: "npm:1.4.3" + ws: "npm:8.5.0" + checksum: 10/ffdcfb2ad118c8e39563701dfe903b925f6c57068c9e55a7d239be6acf8f9d210638dffa1f727e0f200914afacfad9e9e6a311515c6a3e1b9c9291f83118ee1c + languageName: node + linkType: hard + "pvtsutils@npm:^1.3.2, pvtsutils@npm:^1.3.5": version: 1.3.5 resolution: "pvtsutils@npm:1.3.5" @@ -44610,25 +44919,25 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^2.2.8, rimraf@npm:^2.6.1, rimraf@npm:^2.6.2, rimraf@npm:^2.6.3, rimraf@npm:^2.7.1": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" +"rimraf@npm:3.0.2, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" dependencies: glob: "npm:^7.1.3" bin: - rimraf: ./bin.js - checksum: 10/4586c296c736483e297da7cffd19475e4a3e41d07b1ae124aad5d687c79e4ffa716bdac8732ed1db942caf65271cee9dd39f8b639611de161a2753e2112ffe1d + rimraf: bin.js + checksum: 10/063ffaccaaaca2cfd0ef3beafb12d6a03dd7ff1260d752d62a6077b5dfff6ae81bea571f655bb6b589d366930ec1bdd285d40d560c0dae9b12f125e54eb743d5 languageName: node linkType: hard -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" +"rimraf@npm:^2.2.8, rimraf@npm:^2.6.1, rimraf@npm:^2.6.2, rimraf@npm:^2.6.3, rimraf@npm:^2.7.1": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" dependencies: glob: "npm:^7.1.3" bin: - rimraf: bin.js - checksum: 10/063ffaccaaaca2cfd0ef3beafb12d6a03dd7ff1260d752d62a6077b5dfff6ae81bea571f655bb6b589d366930ec1bdd285d40d560c0dae9b12f125e54eb743d5 + rimraf: ./bin.js + checksum: 10/4586c296c736483e297da7cffd19475e4a3e41d07b1ae124aad5d687c79e4ffa716bdac8732ed1db942caf65271cee9dd39f8b639611de161a2753e2112ffe1d languageName: node linkType: hard @@ -45736,6 +46045,15 @@ __metadata: languageName: node linkType: hard +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: "npm:^1.0.0" + checksum: 10/9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -45745,6 +46063,13 @@ __metadata: languageName: node linkType: hard +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 10/404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 + languageName: node + linkType: hard + "shebang-regex@npm:^3.0.0": version: 3.0.0 resolution: "shebang-regex@npm:3.0.0" @@ -46142,6 +46467,25 @@ __metadata: languageName: node linkType: hard +"sol2uml@npm:2.2.0": + version: 2.2.0 + resolution: "sol2uml@npm:2.2.0" + dependencies: + "@aduh95/viz.js": "npm:^3.7.0" + "@solidity-parser/parser": "npm:^0.14.3" + axios: "npm:^0.27.2" + commander: "npm:^9.4.0" + convert-svg-to-png: "npm:^0.6.4" + debug: "npm:^4.3.4" + ethers: "npm:^5.6.9" + js-graph-algorithms: "npm:^1.0.18" + klaw: "npm:^4.0.1" + bin: + sol2uml: lib/sol2uml.js + checksum: 10/d6d860e9a9db0e7034a6f1e5b188ef7ddb7b1b4dda2174322e82b4d7bb5c0d6f95de9d26ee056956fab293253ae43bd68759b88e8ef530ac791c8903d16d7d79 + languageName: node + linkType: hard + "solc@npm:0.7.3": version: 0.7.3 resolution: "solc@npm:0.7.3" @@ -47764,7 +48108,7 @@ __metadata: languageName: node linkType: hard -"tar-fs@npm:^2.1.1": +"tar-fs@npm:2.1.1, tar-fs@npm:^2.1.1": version: 2.1.1 resolution: "tar-fs@npm:2.1.1" dependencies: @@ -48311,7 +48655,7 @@ __metadata: languageName: node linkType: hard -"tmp@npm:^0.2.0": +"tmp@npm:^0.2.0, tmp@npm:^0.2.1": version: 0.2.3 resolution: "tmp@npm:0.2.3" checksum: 10/7b13696787f159c9754793a83aa79a24f1522d47b87462ddb57c18ee93ff26c74cbb2b8d9138f571d2e0e765c728fb2739863a672b280528512c6d83d511c6fa @@ -49342,7 +49686,7 @@ __metadata: languageName: node linkType: hard -"unbzip2-stream@npm:^1.4.3": +"unbzip2-stream@npm:1.4.3, unbzip2-stream@npm:^1.4.3": version: 1.4.3 resolution: "unbzip2-stream@npm:1.4.3" dependencies: @@ -51783,7 +52127,7 @@ __metadata: languageName: node linkType: hard -"which@npm:1.3.1, which@npm:^1.1.1, which@npm:^1.3.1": +"which@npm:1.3.1, which@npm:^1.1.1, which@npm:^1.2.9, which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" dependencies: