From c7dfe22fece1b601b890fe15ced01648bb84763c Mon Sep 17 00:00:00 2001 From: Nenad Vitorovic Date: Tue, 16 Aug 2022 09:53:14 +0200 Subject: [PATCH 1/2] Multisig example --- multisig-wallet/.gitignore | 11 + multisig-wallet/README.md | 147 + multisig-wallet/contracts/MultiSigWallet.sol | 189 ++ multisig-wallet/contracts/Token.sol | 70 + .../demo-setup-scripts/init-env-hardhat.sh | 22 + multisig-wallet/deployments.json | 16 + .../deployments/ropsten_3/MultiSigWallet.json | 1 + .../deployments/ropsten_3/Token.json | 1 + .../tenderly_1/MultiSigWallet.json | 1 + .../deployments/tenderly_1/Token.json | 1 + .../tenderly_3/MultiSigWallet.json | 1 + .../deployments/tenderly_3/Token.json | 1 + multisig-wallet/hardhat.config.ts | 44 + multisig-wallet/infra.json | 8 + .../lib/api/t-forks-clean-recreate.ts | 54 + multisig-wallet/lib/api/tenderly-api.ts | 99 + multisig-wallet/lib/deployment-utils.ts | 33 + multisig-wallet/package.json | 24 + multisig-wallet/scripts/deploy-lock.ts | 23 + multisig-wallet/scripts/multisig-deploy.ts | 29 + multisig-wallet/scripts/multisig-play.ts | 72 + multisig-wallet/scripts/token-deploy.ts | 32 + multisig-wallet/tenderly.yaml | 53 + multisig-wallet/test/multisig.ts | 29 + multisig-wallet/tsconfig.json | 15 + .../web3-actions-local/multisig-run-local.ts | 51 + .../payload/payload-confirm.json | 29 + .../payload/payload-execute.json | 29 + .../payload/payload-submit.json | 30 + multisig-wallet/web3-actions/.gitignore | 5 + .../web3-actions/abi/MultiSigWallet.json | 391 +++ multisig-wallet/web3-actions/abi/Token.json | 164 + multisig-wallet/web3-actions/multisig.ts | 220 ++ .../web3-actions/package-lock.json | 1609 ++++++++++ multisig-wallet/web3-actions/package.json | 16 + multisig-wallet/web3-actions/tenderly-api.ts | 98 + multisig-wallet/web3-actions/tenderly.yaml | 53 + multisig-wallet/web3-actions/tsconfig.json | 20 + multisig-wallet/yarn.lock | 2759 +++++++++++++++++ tic-tac-toe/tenderly.yaml | 7 +- uniswap-notify-discord/tenderly.yaml | 11 +- 41 files changed, 6460 insertions(+), 8 deletions(-) create mode 100644 multisig-wallet/.gitignore create mode 100644 multisig-wallet/README.md create mode 100644 multisig-wallet/contracts/MultiSigWallet.sol create mode 100644 multisig-wallet/contracts/Token.sol create mode 100755 multisig-wallet/demo-setup-scripts/init-env-hardhat.sh create mode 100644 multisig-wallet/deployments.json create mode 100644 multisig-wallet/deployments/ropsten_3/MultiSigWallet.json create mode 100644 multisig-wallet/deployments/ropsten_3/Token.json create mode 100644 multisig-wallet/deployments/tenderly_1/MultiSigWallet.json create mode 100644 multisig-wallet/deployments/tenderly_1/Token.json create mode 100644 multisig-wallet/deployments/tenderly_3/MultiSigWallet.json create mode 100644 multisig-wallet/deployments/tenderly_3/Token.json create mode 100644 multisig-wallet/hardhat.config.ts create mode 100644 multisig-wallet/infra.json create mode 100644 multisig-wallet/lib/api/t-forks-clean-recreate.ts create mode 100644 multisig-wallet/lib/api/tenderly-api.ts create mode 100644 multisig-wallet/lib/deployment-utils.ts create mode 100644 multisig-wallet/package.json create mode 100644 multisig-wallet/scripts/deploy-lock.ts create mode 100644 multisig-wallet/scripts/multisig-deploy.ts create mode 100644 multisig-wallet/scripts/multisig-play.ts create mode 100644 multisig-wallet/scripts/token-deploy.ts create mode 100644 multisig-wallet/tenderly.yaml create mode 100644 multisig-wallet/test/multisig.ts create mode 100644 multisig-wallet/tsconfig.json create mode 100644 multisig-wallet/web3-actions-local/multisig-run-local.ts create mode 100644 multisig-wallet/web3-actions-local/payload/payload-confirm.json create mode 100644 multisig-wallet/web3-actions-local/payload/payload-execute.json create mode 100644 multisig-wallet/web3-actions-local/payload/payload-submit.json create mode 100755 multisig-wallet/web3-actions/.gitignore create mode 100644 multisig-wallet/web3-actions/abi/MultiSigWallet.json create mode 100644 multisig-wallet/web3-actions/abi/Token.json create mode 100644 multisig-wallet/web3-actions/multisig.ts create mode 100644 multisig-wallet/web3-actions/package-lock.json create mode 100755 multisig-wallet/web3-actions/package.json create mode 100644 multisig-wallet/web3-actions/tenderly-api.ts create mode 100644 multisig-wallet/web3-actions/tenderly.yaml create mode 100755 multisig-wallet/web3-actions/tsconfig.json create mode 100644 multisig-wallet/yarn.lock diff --git a/multisig-wallet/.gitignore b/multisig-wallet/.gitignore new file mode 100644 index 0000000..71f6a16 --- /dev/null +++ b/multisig-wallet/.gitignore @@ -0,0 +1,11 @@ +node_modules +.env +coverage +coverage.json +typechain +typechain-types + +#Hardhat files +cache +artifacts + diff --git a/multisig-wallet/README.md b/multisig-wallet/README.md new file mode 100644 index 0000000..3e2c602 --- /dev/null +++ b/multisig-wallet/README.md @@ -0,0 +1,147 @@ +# Web3 Actions + Multisig wallet + +This repository shows usage of Web3 Actions running with a simple [multisig wallet](contracts/MultiSigWallet.sol). + +The Web3 Action `multisig` is ran when a transaction emits one of following events: + +- **TxSubmission**: run a simulation on a fork and send a message to Discord about the results +- **TxConfirmation**: send a message to Discord +- **ExecuteTransaction**: send a message to Discord + +# Prerequisites: + +- Tenderly [CLI installed](https://github.com/Tenderly/tenderly-cli#installation) + and [logged in via CLI](https://github.com/Tenderly/tenderly-cli#login). + +# Running the example + +The Web3 Actions code is located in `web3-actions` folder. You can specify this when running `tenderly actions init`. + +To run the example, you can either use [pre-deployed and Tenderly-verified contracts](#1a-using-pre-deployed-contracts) +or spare some time to [deploy your own contracts](#1b-deploy-your-own-contracts). Follow the rest of instructions to run +the example. + +## 0: Configuration for Web3 Actions project + +**▶️ Action** First thing's first, install npm dependencies and ⏳. + +```bash +yarn +cd web3-actions && yarn && cd .. +``` + +Note: The Web3 Actions project is an NPM project. + +## 1A: Using pre-deployed contracts + +To save some time and to manually run Web 3 Actions from Tenderly Dashboard, you can use pre-deployed contracts listed +below. + +These include a single approved and executed transaction you can use for running [Web3](https://google.com) Actions. + +The contracts are deployed on **Ropsten** at the follwing addresses: + +| Contract | Address | +| ----------------------------------------------------------------------------------------------------------- | -------------------------------------------- | +| [MultisigWallet](https://dashboard.tenderly.co/contract/ropsten/0x418ebb95eaa40c119408143056cad984c6129d45) | `0x418ebb95eaa40c119408143056cad984c6129d45` | +| [Token](https://dashboard.tenderly.co/contract/ropsten/0x4e97c71a44ef1b78a7caee159aa016be53e04c32) | `0x4e97c71a44ef1b78a7caee159aa016be53e04c32` | + +**▶️ Action**: Add the contracts (addresses and links below) to your project in Tenderly. Click the links in the table to open the Dashboard and then click "Add to Project". As soon as you add the +contracts, the transactions will be shown in **Transactions** page. + +Transactions executed on these contracts: + +| Action | TX Hash | +| --------- | -------------------------------------------------------------------- | +| Submit | `0xc6dff6c01d1043025b4c372047f88887eb3c36168f298acd75de63f0099087eb` | +| Confirm 1 | `0xad91a78d2f544371237ec63d5a47f2d6775784266eeb81ed7ea304d1f146c46c` | +| Confirm 2 | `0x8e7288f232f0468cad59637906fed715f953bc4d77bd13103fd6f56b2710b030` | +| Execute | `0x7faeb8641d16ad5179ed0d4fb7b478311b85ab41e186c8180d23357f5e9a675f` | + +You can use these TX hashes to run Web3 Actions manually from the Dashboard. Skip +to [Deploying Web3 Actions](#3-deploying-web3-actions). + +Note: since the contracts are deployed with a pre-defined list of owners, you can simulate transactions, but you can't +submit, approve or execute any of these transactions on Ropsten. + +## 1B: Deploy your own contracts + +If you want to run Web3 Actions on your own contracts, you can deploy them manually. For this example, we will use +the [Ropsten testnet](https://ropsten.etherscan.io/). + +0. **▶️ Action**: Set up a hardhat project .env file and replace placeholders. Source + the [demo-setup-scripts/init-env-hardhat.sh](demo-setup-scripts/init-env-hardhat.sh) script and replace the + placeholders. + +```bash +source demo-setup-scripts/init-env-hardhat.sh +``` + +1. **▶️ Action**: Deploy the Contracts to Ropsten. Use shorthand script `npm run deploy:ropsten`. Hardhat project is set + up + with [Tenderly Hardhat Plugin automatic contract verification](https://github.com/Tenderly/hardhat-tenderly#automatic-verification) + so your contracts are verified automatically as they're deployed +2. **▶️ Action**: Run a first set of transactions: submit 1 tx to multisig, do two approvals and optionally execute it. + Use the script `npm run multisig-play:ropsten`. +3. **▶️ Action**: Copy the address of Multisig from deployment step (also found in `deployments.json`) and paste it + into `tenderly.yaml` in place of `MULTISIG_ADDRESS` placeholder. + +## 2: Run it locally + +Before deploying the action to Tenderly, you can test it out locally. + +```bash +cd web3-actions +npm run multisig-local +``` + +👾 You should get several Discord messages and see some meaningful output. If all went well, you can go on and deploy the +action to Tenderly. + +The file `web3-actions/multisig-local.js` is a simple script that runs Web3 Actions locally, +using [@tenderly/actions-test](https://github.com/Tenderly/tenderly-actions). + +It requires Transaction payload to be passed as an argument. In the [web3-actions/payload](web3-actions/payload/) +directory you'll find JSON file corresponding to an example transactions that submit, approve and execute a multisig +transaction. For running locally, it's fine to use the provided ones. + +## 3: Deploying Web3 Actions + +**▶️ Action**: Open `tenderly.yaml` and replace placeholders with your [Username](https://docs.tenderly.co/other/platform-access/how-to-find-the-project-slug-username-and-organization-name) +and [Project Slug](https://docs.tenderly.co/other/platform-access/how-to-find-the-project-slug-username-and-organization-name). + +**▶️ Action**: Go to Tenderly Dashboard, open **Actions** and click **Secrets**. Add: + +1. `TENDERLY_ACCESS_KEY` [following these instructions](https://docs.tenderly.co/other/platform-access/how-to-generate-api-access-tokens). +2. `multisig.DISCORD_URL` + +**▶️ Action**: Go to [web3-actions/multisig.ts](multisig.ts) and replace the placeholders at the top with appropriate values. + +You can either use contract addresses of pre-deployed contracts or your own +**▶️ Action**: From directory containing `tenderly.yaml` (the root of this example project), run + +```bash + tenderly actions deploy +``` + +## 4: Manually triggering Web3 Actions: + +**▶️ Action**: From the Web3 Actions page: + +1. open the `multisig` action +2. click **Manual Run** +3. copy TX hash either from Tenderly Dashboard or from the table + in [1A: Using pre-deployed contracts](#1a-using-pre-deployed-contracts) +4. paste the hash of transaction +5. select **Copy on write** storage option +6. click **⚡️ Trigger** button at the bottom of the page. Your Web3 Action should run, your Discord should receive a + message + +## 5: Trying it out with real-time transactions + +If you deployed your own contracts in step [1B: Deploy your own contracts](#1b-deploy-your-own-contracts), you can run +the `multisig-play` script. Your Web3 Actions should pick up on the new transactions and run accordingly. + +```bash + tenderly actions multisig-play:ropsten +``` diff --git a/multisig-wallet/contracts/MultiSigWallet.sol b/multisig-wallet/contracts/MultiSigWallet.sol new file mode 100644 index 0000000..96833f3 --- /dev/null +++ b/multisig-wallet/contracts/MultiSigWallet.sol @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.9; + +contract MultiSigWallet { + // Events + event Deposit(address indexed sender, uint amount, uint balance); + event TxSubmission( + address indexed owner, + uint indexed txIndex, + address indexed to, + uint value, + bytes data + ); + event TxConfirmation(address indexed owner, uint indexed txIndex); + event ConfirmationRevocation(address indexed owner, uint indexed txIndex); + event ExecuteTransaction(address indexed owner, uint indexed txIndex); + + // List of owners of the wallet + address[] public owners; + // Mapping to allow for easy checks if someone is an owner + mapping(address => bool) public isOwner; + // Number of confirmations required to execute a transaction + uint public numConfirmationsRequired; + + // Tx object + struct Transaction { + address to; + uint value; + bytes data; + bool executed; + uint numConfirmations; + } + + // mapping from tx index => owner => bool + // use this to check if a transaction is confirmed by an owner + mapping(uint => mapping(address => bool)) public isConfirmed; + + // List of all tracked transactions + Transaction[] public transactions; + + // Helper functions + modifier onlyOwner() { + require(isOwner[msg.sender], "not owner"); + _; + } + + modifier txExists(uint _txIndex) { + require(_txIndex < transactions.length, "tx does not exist"); + _; + } + + modifier notExecuted(uint _txIndex) { + require(!transactions[_txIndex].executed, "tx already executed"); + _; + } + + modifier notConfirmed(uint _txIndex) { + require(!isConfirmed[_txIndex][msg.sender], "tx already confirmed"); + _; + } + + constructor(address[] memory _owners, uint _numConfirmationsRequired) { + require(_owners.length > 0, "owners required"); + require( + _numConfirmationsRequired > 0 && + _numConfirmationsRequired <= _owners.length, + "invalid number of required confirmations" + ); + + for (uint i = 0; i < _owners.length; i++) { + address owner = _owners[i]; + + require(owner != address(0), "invalid owner"); + require(!isOwner[owner], "owner not unique"); + + isOwner[owner] = true; + owners.push(owner); + } + + numConfirmationsRequired = _numConfirmationsRequired; + } + + receive() external payable { + emit Deposit(msg.sender, msg.value, address(this).balance); + } + + function submitTransaction( + address _to, + uint _value, + bytes memory _data + ) public onlyOwner { + uint txIndex = transactions.length; + + transactions.push( + Transaction({ + to: _to, + value: _value, + data: _data, + executed: false, + numConfirmations: 0 + }) + ); + + emit TxSubmission(msg.sender, txIndex, _to, _value, _data); + } + + function confirmTransaction(uint _txIndex) + public + onlyOwner + txExists(_txIndex) + notExecuted(_txIndex) + notConfirmed(_txIndex) + { + Transaction storage transaction = transactions[_txIndex]; + transaction.numConfirmations += 1; + isConfirmed[_txIndex][msg.sender] = true; + + emit TxConfirmation(msg.sender, _txIndex); + } + + function executeTransaction(uint _txIndex) + public + onlyOwner + txExists(_txIndex) + notExecuted(_txIndex) + { + Transaction storage transaction = transactions[_txIndex]; + + require( + transaction.numConfirmations >= numConfirmationsRequired, + "cannot execute tx" + ); + + transaction.executed = true; + + (bool success, ) = transaction.to.call{value: transaction.value}( + transaction.data + ); + require(success, "tx failed"); + + emit ExecuteTransaction(msg.sender, _txIndex); + } + + function revokeConfirmation(uint _txIndex) + public + onlyOwner + txExists(_txIndex) + notExecuted(_txIndex) + { + Transaction storage transaction = transactions[_txIndex]; + + require(isConfirmed[_txIndex][msg.sender], "tx not confirmed"); + + transaction.numConfirmations -= 1; + isConfirmed[_txIndex][msg.sender] = false; + + emit ConfirmationRevocation(msg.sender, _txIndex); + } + + function getOwners() public view returns (address[] memory) { + return owners; + } + + function getTransactionCount() public view returns (uint) { + return transactions.length; + } + + function getTransaction(uint _txIndex) + public + view + returns ( + address to, + uint value, + bytes memory data, + bool executed, + uint numConfirmations + ) + { + Transaction storage transaction = transactions[_txIndex]; + + return ( + transaction.to, + transaction.value, + transaction.data, + transaction.executed, + transaction.numConfirmations + ); + } +} diff --git a/multisig-wallet/contracts/Token.sol b/multisig-wallet/contracts/Token.sol new file mode 100644 index 0000000..6cdc1ef --- /dev/null +++ b/multisig-wallet/contracts/Token.sol @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.5.0 <0.9.0; + +library Balances { + function move( + mapping(address => uint256) storage balances, + address from, + address to, + uint amount + ) internal { + require(balances[from] >= amount, "Not enough balance"); + require(balances[to] + amount >= balances[to], "Balance Overflow"); + balances[from] -= amount; + balances[to] += amount; + } +} + +contract Token { + mapping(address => uint256) balances; + using Balances for *; + mapping(address => mapping(address => uint256)) allowed; + uint32 TokensPerEther = 20; + + event Transfer(address from, address to, uint amount); + event Approval(address owner, address spender, uint amount); + + function transfer(address to, uint amount) external returns (bool success) { + balances.move(msg.sender, to, amount); + emit Transfer(msg.sender, to, amount); + return true; + } + + function stake() public payable { + uint256 tokens = msg.value * TokensPerEther; + balances[msg.sender] += tokens; + } + + function transferFrom( + address from, + address to, + uint amount + ) external returns (bool success) { + require(allowed[from][msg.sender] >= amount, "Not enough allowance"); + allowed[from][msg.sender] -= amount; + balances.move(from, to, amount); + emit Transfer(from, to, amount); + return true; + } + + function approve(address spender, uint tokens) + external + returns (bool success) + { + require( + allowed[msg.sender][spender] == 0, + "Has allowance, can't approve more" + ); + allowed[msg.sender][spender] = tokens; + emit Approval(msg.sender, spender, tokens); + return true; + } + + function balanceOf(address tokenOwner) + external + view + returns (uint balance) + { + return balances[tokenOwner]; + } +} diff --git a/multisig-wallet/demo-setup-scripts/init-env-hardhat.sh b/multisig-wallet/demo-setup-scripts/init-env-hardhat.sh new file mode 100755 index 0000000..52182f8 --- /dev/null +++ b/multisig-wallet/demo-setup-scripts/init-env-hardhat.sh @@ -0,0 +1,22 @@ +cat < .env + +# TODO: replace placeholders + +## Needed to run the Web3 Actions Locally +#https://docs.tenderly.co/other/platform-access/how-to-find-the-project-slug-username-and-organization-name +TENDERLY_PROJECT_SLUG=??? +TENDERLY_USERNAME=??? + +# https://docs.tenderly.co/other/platform-access/how-to-generate-api-access-tokens +TENDERLY_ACCESS_KEY=??? + +# https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks +DISCORD_URL=??? + +## needed if planning to deploy your own contracts, otherwise skip +ROPSTEN_URL= +ROPSTEN_PRIVATE_KEY_1=??? +ROPSTEN_PRIVATE_KEY_2=??? +ROPSTEN_PRIVATE_KEY_3=??? + +EOENV \ No newline at end of file diff --git a/multisig-wallet/deployments.json b/multisig-wallet/deployments.json new file mode 100644 index 0000000..990ab82 --- /dev/null +++ b/multisig-wallet/deployments.json @@ -0,0 +1,16 @@ +{ + "latest": [ + { + "name": "Token", + "address": "0x4e97c71a44ef1b78a7caee159aa016be53e04c32", + "network": "ropsten", + "timestamp": "2022-08-13T08:01:06.305Z" + }, + { + "name": "MultiSigWallet", + "address": "0x418ebb95eaa40c119408143056cad984c6129d45", + "network": "ropsten", + "timestamp": "2022-08-13T08:01:10.935Z" + } + ] +} diff --git a/multisig-wallet/deployments/ropsten_3/MultiSigWallet.json b/multisig-wallet/deployments/ropsten_3/MultiSigWallet.json new file mode 100644 index 0000000..c16ade1 --- /dev/null +++ b/multisig-wallet/deployments/ropsten_3/MultiSigWallet.json @@ -0,0 +1 @@ +{"metadata":"{\"compiler\":{\"version\":\"0.8.9\"},\"sources\":{\"contracts/MultiSigWallet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\ncontract MultiSigWallet {\\n // Events\\n event Deposit(address indexed sender, uint amount, uint balance);\\n event TxSubmission(\\n address indexed owner,\\n uint indexed txIndex,\\n address indexed to,\\n uint value,\\n bytes data\\n );\\n event TxConfirmation(address indexed owner, uint indexed txIndex);\\n event ConfirmationRevocation(address indexed owner, uint indexed txIndex);\\n event ExecuteTransaction(address indexed owner, uint indexed txIndex);\\n\\n // List of owners of the wallet\\n address[] public owners;\\n // Mapping to allow for easy checks if someone is an owner\\n mapping(address => bool) public isOwner;\\n // Number of confirmations required to execute a transaction\\n uint public numConfirmationsRequired;\\n\\n // Tx object\\n struct Transaction {\\n address to;\\n uint value;\\n bytes data;\\n bool executed;\\n uint numConfirmations;\\n }\\n\\n // mapping from tx index => owner => bool\\n // use this to check if a transaction is confirmed by an owner\\n mapping(uint => mapping(address => bool)) public isConfirmed;\\n\\n // List of all tracked transactions\\n Transaction[] public transactions;\\n\\n // Helper functions\\n modifier onlyOwner() {\\n require(isOwner[msg.sender], \\\"not owner\\\");\\n _;\\n }\\n\\n modifier txExists(uint _txIndex) {\\n require(_txIndex < transactions.length, \\\"tx does not exist\\\");\\n _;\\n }\\n\\n modifier notExecuted(uint _txIndex) {\\n require(!transactions[_txIndex].executed, \\\"tx already executed\\\");\\n _;\\n }\\n\\n modifier notConfirmed(uint _txIndex) {\\n require(!isConfirmed[_txIndex][msg.sender], \\\"tx already confirmed\\\");\\n _;\\n }\\n\\n constructor(address[] memory _owners, uint _numConfirmationsRequired) {\\n require(_owners.length > 0, \\\"owners required\\\");\\n require(\\n _numConfirmationsRequired > 0 &&\\n _numConfirmationsRequired <= _owners.length,\\n \\\"invalid number of required confirmations\\\"\\n );\\n\\n for (uint i = 0; i < _owners.length; i++) {\\n address owner = _owners[i];\\n\\n require(owner != address(0), \\\"invalid owner\\\");\\n require(!isOwner[owner], \\\"owner not unique\\\");\\n\\n isOwner[owner] = true;\\n owners.push(owner);\\n }\\n\\n numConfirmationsRequired = _numConfirmationsRequired;\\n }\\n\\n receive() external payable {\\n emit Deposit(msg.sender, msg.value, address(this).balance);\\n }\\n\\n function submitTransaction(\\n address _to,\\n uint _value,\\n bytes memory _data\\n ) public onlyOwner {\\n uint txIndex = transactions.length;\\n\\n transactions.push(\\n Transaction({\\n to: _to,\\n value: _value,\\n data: _data,\\n executed: false,\\n numConfirmations: 0\\n })\\n );\\n\\n emit TxSubmission(msg.sender, txIndex, _to, _value, _data);\\n }\\n\\n function confirmTransaction(uint _txIndex)\\n public\\n onlyOwner\\n txExists(_txIndex)\\n notExecuted(_txIndex)\\n notConfirmed(_txIndex)\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n transaction.numConfirmations += 1;\\n isConfirmed[_txIndex][msg.sender] = true;\\n\\n emit TxConfirmation(msg.sender, _txIndex);\\n }\\n\\n function executeTransaction(uint _txIndex)\\n public\\n onlyOwner\\n txExists(_txIndex)\\n notExecuted(_txIndex)\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n\\n require(\\n transaction.numConfirmations >= numConfirmationsRequired,\\n \\\"cannot execute tx\\\"\\n );\\n\\n transaction.executed = true;\\n\\n (bool success, ) = transaction.to.call{value: transaction.value}(\\n transaction.data\\n );\\n require(success, \\\"tx failed\\\");\\n\\n emit ExecuteTransaction(msg.sender, _txIndex);\\n }\\n\\n function revokeConfirmation(uint _txIndex)\\n public\\n onlyOwner\\n txExists(_txIndex)\\n notExecuted(_txIndex)\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n\\n require(isConfirmed[_txIndex][msg.sender], \\\"tx not confirmed\\\");\\n\\n transaction.numConfirmations -= 1;\\n isConfirmed[_txIndex][msg.sender] = false;\\n\\n emit ConfirmationRevocation(msg.sender, _txIndex);\\n }\\n\\n function getOwners() public view returns (address[] memory) {\\n return owners;\\n }\\n\\n function getTransactionCount() public view returns (uint) {\\n return transactions.length;\\n }\\n\\n function getTransaction(uint _txIndex)\\n public\\n view\\n returns (\\n address to,\\n uint value,\\n bytes memory data,\\n bool executed,\\n uint numConfirmations\\n )\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n\\n return (\\n transaction.to,\\n transaction.value,\\n transaction.data,\\n transaction.executed,\\n transaction.numConfirmations\\n );\\n }\\n}\\n\"}}}","address":"0x418EBb95EAa40c119408143056CaD984C6129d45","bytecode":"0x60806040523480156200001157600080fd5b50604051620025033803806200250383398181016040528101906200003791906200050e565b60008251116200007e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200007590620005d5565b60405180910390fd5b60008111801562000090575081518111155b620000d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c9906200066d565b60405180910390fd5b60005b8251811015620002d5576000838281518110620000f757620000f66200068f565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000174576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016b906200070e565b60405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000204576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001fb9062000780565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080620002cc90620007d1565b915050620000d5565b508060028190555050506200081f565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200034982620002fe565b810181811067ffffffffffffffff821117156200036b576200036a6200030f565b5b80604052505050565b600062000380620002e5565b90506200038e82826200033e565b919050565b600067ffffffffffffffff821115620003b157620003b06200030f565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003f482620003c7565b9050919050565b6200040681620003e7565b81146200041257600080fd5b50565b6000815190506200042681620003fb565b92915050565b6000620004436200043d8462000393565b62000374565b90508083825260208201905060208402830185811115620004695762000468620003c2565b5b835b8181101562000496578062000481888262000415565b8452602084019350506020810190506200046b565b5050509392505050565b600082601f830112620004b857620004b7620002f9565b5b8151620004ca8482602086016200042c565b91505092915050565b6000819050919050565b620004e881620004d3565b8114620004f457600080fd5b50565b6000815190506200050881620004dd565b92915050565b60008060408385031215620005285762000527620002ef565b5b600083015167ffffffffffffffff811115620005495762000548620002f4565b5b6200055785828601620004a0565b92505060206200056a85828601620004f7565b9150509250929050565b600082825260208201905092915050565b7f6f776e6572732072657175697265640000000000000000000000000000000000600082015250565b6000620005bd600f8362000574565b9150620005ca8262000585565b602082019050919050565b60006020820190508181036000830152620005f081620005ae565b9050919050565b7f696e76616c6964206e756d626572206f6620726571756972656420636f6e666960008201527f726d6174696f6e73000000000000000000000000000000000000000000000000602082015250565b60006200065560288362000574565b91506200066282620005f7565b604082019050919050565b60006020820190508181036000830152620006888162000646565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f696e76616c6964206f776e657200000000000000000000000000000000000000600082015250565b6000620006f6600d8362000574565b91506200070382620006be565b602082019050919050565b600060208201905081810360008301526200072981620006e7565b9050919050565b7f6f776e6572206e6f7420756e6971756500000000000000000000000000000000600082015250565b60006200076860108362000574565b9150620007758262000730565b602082019050919050565b600060208201905081810360008301526200079b8162000759565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007de82620004d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620008145762000813620007a2565b5b600182019050919050565b611cd4806200082f6000396000f3fe6080604052600436106100ab5760003560e01c80639ace38c2116100645780639ace38c214610253578063a0e67e2b14610294578063c01a8c84146102bf578063c6427474146102e8578063d0549b8514610311578063ee22610b1461033c57610102565b8063025e7c271461010757806320ea8d86146101445780632e7700f01461016d5780632f54bf6e1461019857806333ea3dc8146101d557806380f59a651461021657610102565b36610102573373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1534476040516100f8929190611217565b60405180910390a2005b600080fd5b34801561011357600080fd5b5061012e60048036038101906101299190611280565b610365565b60405161013b91906112ee565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190611280565b6103a4565b005b34801561017957600080fd5b5061018261067e565b60405161018f9190611309565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611350565b61068b565b6040516101cc9190611398565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f79190611280565b6106ab565b60405161020d95949392919061144c565b60405180910390f35b34801561022257600080fd5b5061023d600480360381019061023891906114a6565b6107be565b60405161024a9190611398565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190611280565b6107ed565b60405161028b95949392919061144c565b60405180910390f35b3480156102a057600080fd5b506102a96108e8565b6040516102b691906115a4565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611280565b610976565b005b3480156102f457600080fd5b5061030f600480360381019061030a91906116fb565b610c53565b005b34801561031d57600080fd5b50610326610e5d565b6040516103339190611309565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190611280565b610e63565b005b6000818154811061037557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610427906117c7565b60405180910390fd5b806004805490508110610478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046f90611833565b60405180910390fd5b816004818154811061048d5761048c611853565b5b906000526020600020906005020160030160009054906101000a900460ff16156104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e3906118ce565b60405180910390fd5b60006004848154811061050257610501611853565b5b906000526020600020906005020190506003600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166105af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a69061193a565b60405180910390fd5b60018160040160008282546105c49190611989565b9250508190555060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550833373ffffffffffffffffffffffffffffffffffffffff167fc423fd18c78c483f167229efa90b29abe30eed1425ab9cb40441f6555650eca860405160405180910390a350505050565b6000600480549050905090565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060606000806000600487815481106106c9576106c8611853565b5b906000526020600020906005020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010154826002018360030160009054906101000a900460ff16846004015482805461072a906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610756906119ec565b80156107a35780601f10610778576101008083540402835291602001916107a3565b820191906000526020600020905b81548152906001019060200180831161078657829003601f168201915b50505050509250955095509550955095505091939590929450565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600481815481106107fd57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201805461084c906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610878906119ec565b80156108c55780601f1061089a576101008083540402835291602001916108c5565b820191906000526020600020905b8154815290600101906020018083116108a857829003601f168201915b5050505050908060030160009054906101000a900460ff16908060040154905085565b6060600080548060200260200160405190810160405280929190818152602001828054801561096c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610922575b5050505050905090565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f9906117c7565b60405180910390fd5b806004805490508110610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190611833565b60405180910390fd5b8160048181548110610a5f57610a5e611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906118ce565b60405180910390fd5b826003600082815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490611a6a565b60405180910390fd5b600060048581548110610b7357610b72611853565b5b906000526020600020906005020190506001816004016000828254610b989190611a8a565b9250508190555060016003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550843373ffffffffffffffffffffffffffffffffffffffff167f52a3954c699324c8e90e7e2f7cb9f57cd61af1902197bafcc5085b6c2a57b82360405160405180910390a35050505050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd6906117c7565b60405180910390fd5b6000600480549050905060046040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020016000151581526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190610dc292919061115b565b5060608201518160030160006101000a81548160ff0219169083151502179055506080820151816004015550508373ffffffffffffffffffffffffffffffffffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f52e5c631bb2fd786d6b1c26f68548e07c61d087bf325770dd88d072cf0a5e8b08686604051610e4f929190611ae0565b60405180910390a450505050565b60025481565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906117c7565b60405180910390fd5b806004805490508110610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611833565b60405180910390fd5b8160048181548110610f4c57610f4b611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906118ce565b60405180910390fd5b600060048481548110610fc157610fc0611853565b5b906000526020600020906005020190506002548160040154101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190611b5c565b60405180910390fd5b60018160030160006101000a81548160ff02191690831515021790555060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682600101548360020160405161108a9190611c1b565b60006040518083038185875af1925050503d80600081146110c7576040519150601f19603f3d011682016040523d82523d6000602084013e6110cc565b606091505b5050905080611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790611c7e565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167f5445f318f4f5fcfb66592e68e0cc5822aa15664039bd5f0ffde24c5a8142b1ac60405160405180910390a35050505050565b828054611167906119ec565b90600052602060002090601f01602090048101928261118957600085556111d0565b82601f106111a257805160ff19168380011785556111d0565b828001600101855582156111d0579182015b828111156111cf5782518255916020019190600101906111b4565b5b5090506111dd91906111e1565b5090565b5b808211156111fa5760008160009055506001016111e2565b5090565b6000819050919050565b611211816111fe565b82525050565b600060408201905061122c6000830185611208565b6112396020830184611208565b9392505050565b6000604051905090565b600080fd5b600080fd5b61125d816111fe565b811461126857600080fd5b50565b60008135905061127a81611254565b92915050565b6000602082840312156112965761129561124a565b5b60006112a48482850161126b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112d8826112ad565b9050919050565b6112e8816112cd565b82525050565b600060208201905061130360008301846112df565b92915050565b600060208201905061131e6000830184611208565b92915050565b61132d816112cd565b811461133857600080fd5b50565b60008135905061134a81611324565b92915050565b6000602082840312156113665761136561124a565b5b60006113748482850161133b565b91505092915050565b60008115159050919050565b6113928161137d565b82525050565b60006020820190506113ad6000830184611389565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113ed5780820151818401526020810190506113d2565b838111156113fc576000848401525b50505050565b6000601f19601f8301169050919050565b600061141e826113b3565b61142881856113be565b93506114388185602086016113cf565b61144181611402565b840191505092915050565b600060a08201905061146160008301886112df565b61146e6020830187611208565b81810360408301526114808186611413565b905061148f6060830185611389565b61149c6080830184611208565b9695505050505050565b600080604083850312156114bd576114bc61124a565b5b60006114cb8582860161126b565b92505060206114dc8582860161133b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61151b816112cd565b82525050565b600061152d8383611512565b60208301905092915050565b6000602082019050919050565b6000611551826114e6565b61155b81856114f1565b935061156683611502565b8060005b8381101561159757815161157e8882611521565b975061158983611539565b92505060018101905061156a565b5085935050505092915050565b600060208201905081810360008301526115be8184611546565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61160882611402565b810181811067ffffffffffffffff82111715611627576116266115d0565b5b80604052505050565b600061163a611240565b905061164682826115ff565b919050565b600067ffffffffffffffff821115611666576116656115d0565b5b61166f82611402565b9050602081019050919050565b82818337600083830152505050565b600061169e6116998461164b565b611630565b9050828152602081018484840111156116ba576116b96115cb565b5b6116c584828561167c565b509392505050565b600082601f8301126116e2576116e16115c6565b5b81356116f284826020860161168b565b91505092915050565b6000806000606084860312156117145761171361124a565b5b60006117228682870161133b565b93505060206117338682870161126b565b925050604084013567ffffffffffffffff8111156117545761175361124f565b5b611760868287016116cd565b9150509250925092565b600082825260208201905092915050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006117b160098361176a565b91506117bc8261177b565b602082019050919050565b600060208201905081810360008301526117e0816117a4565b9050919050565b7f747820646f6573206e6f74206578697374000000000000000000000000000000600082015250565b600061181d60118361176a565b9150611828826117e7565b602082019050919050565b6000602082019050818103600083015261184c81611810565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f747820616c726561647920657865637574656400000000000000000000000000600082015250565b60006118b860138361176a565b91506118c382611882565b602082019050919050565b600060208201905081810360008301526118e7816118ab565b9050919050565b7f7478206e6f7420636f6e6669726d656400000000000000000000000000000000600082015250565b600061192460108361176a565b915061192f826118ee565b602082019050919050565b6000602082019050818103600083015261195381611917565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611994826111fe565b915061199f836111fe565b9250828210156119b2576119b161195a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a0457607f821691505b60208210811415611a1857611a176119bd565b5b50919050565b7f747820616c726561647920636f6e6669726d6564000000000000000000000000600082015250565b6000611a5460148361176a565b9150611a5f82611a1e565b602082019050919050565b60006020820190508181036000830152611a8381611a47565b9050919050565b6000611a95826111fe565b9150611aa0836111fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ad557611ad461195a565b5b828201905092915050565b6000604082019050611af56000830185611208565b8181036020830152611b078184611413565b90509392505050565b7f63616e6e6f742065786563757465207478000000000000000000000000000000600082015250565b6000611b4660118361176a565b9150611b5182611b10565b602082019050919050565b60006020820190508181036000830152611b7581611b39565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611ba9816119ec565b611bb38186611b7c565b94506001821660008114611bce5760018114611bdf57611c12565b60ff19831686528186019350611c12565b611be885611b87565b60005b83811015611c0a57815481890152600182019150602081019050611beb565b838801955050505b50505092915050565b6000611c278284611b9c565b915081905092915050565b7f7478206661696c65640000000000000000000000000000000000000000000000600082015250565b6000611c6860098361176a565b9150611c7382611c32565b602082019050919050565b60006020820190508181036000830152611c9781611c5b565b905091905056fea2646970667358221220dde80845922e96b3f6246809411eb89d18ac65e5e05e949ff93edfb8b1b2dfd964736f6c63430008090033","deployedBytecode":"0x6080604052600436106100ab5760003560e01c80639ace38c2116100645780639ace38c214610253578063a0e67e2b14610294578063c01a8c84146102bf578063c6427474146102e8578063d0549b8514610311578063ee22610b1461033c57610102565b8063025e7c271461010757806320ea8d86146101445780632e7700f01461016d5780632f54bf6e1461019857806333ea3dc8146101d557806380f59a651461021657610102565b36610102573373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1534476040516100f8929190611217565b60405180910390a2005b600080fd5b34801561011357600080fd5b5061012e60048036038101906101299190611280565b610365565b60405161013b91906112ee565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190611280565b6103a4565b005b34801561017957600080fd5b5061018261067e565b60405161018f9190611309565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611350565b61068b565b6040516101cc9190611398565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f79190611280565b6106ab565b60405161020d95949392919061144c565b60405180910390f35b34801561022257600080fd5b5061023d600480360381019061023891906114a6565b6107be565b60405161024a9190611398565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190611280565b6107ed565b60405161028b95949392919061144c565b60405180910390f35b3480156102a057600080fd5b506102a96108e8565b6040516102b691906115a4565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611280565b610976565b005b3480156102f457600080fd5b5061030f600480360381019061030a91906116fb565b610c53565b005b34801561031d57600080fd5b50610326610e5d565b6040516103339190611309565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190611280565b610e63565b005b6000818154811061037557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610427906117c7565b60405180910390fd5b806004805490508110610478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046f90611833565b60405180910390fd5b816004818154811061048d5761048c611853565b5b906000526020600020906005020160030160009054906101000a900460ff16156104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e3906118ce565b60405180910390fd5b60006004848154811061050257610501611853565b5b906000526020600020906005020190506003600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166105af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a69061193a565b60405180910390fd5b60018160040160008282546105c49190611989565b9250508190555060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550833373ffffffffffffffffffffffffffffffffffffffff167fc423fd18c78c483f167229efa90b29abe30eed1425ab9cb40441f6555650eca860405160405180910390a350505050565b6000600480549050905090565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060606000806000600487815481106106c9576106c8611853565b5b906000526020600020906005020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010154826002018360030160009054906101000a900460ff16846004015482805461072a906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610756906119ec565b80156107a35780601f10610778576101008083540402835291602001916107a3565b820191906000526020600020905b81548152906001019060200180831161078657829003601f168201915b50505050509250955095509550955095505091939590929450565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600481815481106107fd57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201805461084c906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610878906119ec565b80156108c55780601f1061089a576101008083540402835291602001916108c5565b820191906000526020600020905b8154815290600101906020018083116108a857829003601f168201915b5050505050908060030160009054906101000a900460ff16908060040154905085565b6060600080548060200260200160405190810160405280929190818152602001828054801561096c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610922575b5050505050905090565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f9906117c7565b60405180910390fd5b806004805490508110610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190611833565b60405180910390fd5b8160048181548110610a5f57610a5e611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906118ce565b60405180910390fd5b826003600082815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490611a6a565b60405180910390fd5b600060048581548110610b7357610b72611853565b5b906000526020600020906005020190506001816004016000828254610b989190611a8a565b9250508190555060016003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550843373ffffffffffffffffffffffffffffffffffffffff167f52a3954c699324c8e90e7e2f7cb9f57cd61af1902197bafcc5085b6c2a57b82360405160405180910390a35050505050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd6906117c7565b60405180910390fd5b6000600480549050905060046040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020016000151581526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190610dc292919061115b565b5060608201518160030160006101000a81548160ff0219169083151502179055506080820151816004015550508373ffffffffffffffffffffffffffffffffffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f52e5c631bb2fd786d6b1c26f68548e07c61d087bf325770dd88d072cf0a5e8b08686604051610e4f929190611ae0565b60405180910390a450505050565b60025481565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906117c7565b60405180910390fd5b806004805490508110610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611833565b60405180910390fd5b8160048181548110610f4c57610f4b611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906118ce565b60405180910390fd5b600060048481548110610fc157610fc0611853565b5b906000526020600020906005020190506002548160040154101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190611b5c565b60405180910390fd5b60018160030160006101000a81548160ff02191690831515021790555060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682600101548360020160405161108a9190611c1b565b60006040518083038185875af1925050503d80600081146110c7576040519150601f19603f3d011682016040523d82523d6000602084013e6110cc565b606091505b5050905080611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790611c7e565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167f5445f318f4f5fcfb66592e68e0cc5822aa15664039bd5f0ffde24c5a8142b1ac60405160405180910390a35050505050565b828054611167906119ec565b90600052602060002090601f01602090048101928261118957600085556111d0565b82601f106111a257805160ff19168380011785556111d0565b828001600101855582156111d0579182015b828111156111cf5782518255916020019190600101906111b4565b5b5090506111dd91906111e1565b5090565b5b808211156111fa5760008160009055506001016111e2565b5090565b6000819050919050565b611211816111fe565b82525050565b600060408201905061122c6000830185611208565b6112396020830184611208565b9392505050565b6000604051905090565b600080fd5b600080fd5b61125d816111fe565b811461126857600080fd5b50565b60008135905061127a81611254565b92915050565b6000602082840312156112965761129561124a565b5b60006112a48482850161126b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112d8826112ad565b9050919050565b6112e8816112cd565b82525050565b600060208201905061130360008301846112df565b92915050565b600060208201905061131e6000830184611208565b92915050565b61132d816112cd565b811461133857600080fd5b50565b60008135905061134a81611324565b92915050565b6000602082840312156113665761136561124a565b5b60006113748482850161133b565b91505092915050565b60008115159050919050565b6113928161137d565b82525050565b60006020820190506113ad6000830184611389565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113ed5780820151818401526020810190506113d2565b838111156113fc576000848401525b50505050565b6000601f19601f8301169050919050565b600061141e826113b3565b61142881856113be565b93506114388185602086016113cf565b61144181611402565b840191505092915050565b600060a08201905061146160008301886112df565b61146e6020830187611208565b81810360408301526114808186611413565b905061148f6060830185611389565b61149c6080830184611208565b9695505050505050565b600080604083850312156114bd576114bc61124a565b5b60006114cb8582860161126b565b92505060206114dc8582860161133b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61151b816112cd565b82525050565b600061152d8383611512565b60208301905092915050565b6000602082019050919050565b6000611551826114e6565b61155b81856114f1565b935061156683611502565b8060005b8381101561159757815161157e8882611521565b975061158983611539565b92505060018101905061156a565b5085935050505092915050565b600060208201905081810360008301526115be8184611546565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61160882611402565b810181811067ffffffffffffffff82111715611627576116266115d0565b5b80604052505050565b600061163a611240565b905061164682826115ff565b919050565b600067ffffffffffffffff821115611666576116656115d0565b5b61166f82611402565b9050602081019050919050565b82818337600083830152505050565b600061169e6116998461164b565b611630565b9050828152602081018484840111156116ba576116b96115cb565b5b6116c584828561167c565b509392505050565b600082601f8301126116e2576116e16115c6565b5b81356116f284826020860161168b565b91505092915050565b6000806000606084860312156117145761171361124a565b5b60006117228682870161133b565b93505060206117338682870161126b565b925050604084013567ffffffffffffffff8111156117545761175361124f565b5b611760868287016116cd565b9150509250925092565b600082825260208201905092915050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006117b160098361176a565b91506117bc8261177b565b602082019050919050565b600060208201905081810360008301526117e0816117a4565b9050919050565b7f747820646f6573206e6f74206578697374000000000000000000000000000000600082015250565b600061181d60118361176a565b9150611828826117e7565b602082019050919050565b6000602082019050818103600083015261184c81611810565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f747820616c726561647920657865637574656400000000000000000000000000600082015250565b60006118b860138361176a565b91506118c382611882565b602082019050919050565b600060208201905081810360008301526118e7816118ab565b9050919050565b7f7478206e6f7420636f6e6669726d656400000000000000000000000000000000600082015250565b600061192460108361176a565b915061192f826118ee565b602082019050919050565b6000602082019050818103600083015261195381611917565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611994826111fe565b915061199f836111fe565b9250828210156119b2576119b161195a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a0457607f821691505b60208210811415611a1857611a176119bd565b5b50919050565b7f747820616c726561647920636f6e6669726d6564000000000000000000000000600082015250565b6000611a5460148361176a565b9150611a5f82611a1e565b602082019050919050565b60006020820190508181036000830152611a8381611a47565b9050919050565b6000611a95826111fe565b9150611aa0836111fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ad557611ad461195a565b5b828201905092915050565b6000604082019050611af56000830185611208565b8181036020830152611b078184611413565b90509392505050565b7f63616e6e6f742065786563757465207478000000000000000000000000000000600082015250565b6000611b4660118361176a565b9150611b5182611b10565b602082019050919050565b60006020820190508181036000830152611b7581611b39565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611ba9816119ec565b611bb38186611b7c565b94506001821660008114611bce5760018114611bdf57611c12565b60ff19831686528186019350611c12565b611be885611b87565b60005b83811015611c0a57815481890152600182019150602081019050611beb565b838801955050505b50505092915050565b6000611c278284611b9c565b915081905092915050565b7f7478206661696c65640000000000000000000000000000000000000000000000600082015250565b6000611c6860098361176a565b9150611c7382611c32565b602082019050919050565b60006020820190508181036000830152611c9781611c5b565b905091905056fea2646970667358221220dde80845922e96b3f6246809411eb89d18ac65e5e05e949ff93edfb8b1b2dfd964736f6c63430008090033","abi":[{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256","name":"_numConfirmationsRequired","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"}],"name":"ConfirmationRevocation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"}],"name":"ExecuteTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"}],"name":"TxConfirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TxSubmission","type":"event"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"confirmTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"executeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"getTransaction","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint256","name":"numConfirmations","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransactionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"isConfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numConfirmationsRequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"revokeConfirmation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"submitTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint256","name":"numConfirmations","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]} \ No newline at end of file diff --git a/multisig-wallet/deployments/ropsten_3/Token.json b/multisig-wallet/deployments/ropsten_3/Token.json new file mode 100644 index 0000000..b707103 --- /dev/null +++ b/multisig-wallet/deployments/ropsten_3/Token.json @@ -0,0 +1 @@ +{"metadata":"{\"compiler\":{\"version\":\"0.8.9\"},\"sources\":{\"contracts/Token.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity >=0.5.0 <0.9.0;\\n\\nlibrary Balances {\\n function move(\\n mapping(address => uint256) storage balances,\\n address from,\\n address to,\\n uint amount\\n ) internal {\\n require(balances[from] >= amount, \\\"Not enough balance\\\");\\n require(balances[to] + amount >= balances[to], \\\"Balance Overflow\\\");\\n balances[from] -= amount;\\n balances[to] += amount;\\n }\\n}\\n\\ncontract Token {\\n mapping(address => uint256) balances;\\n using Balances for *;\\n mapping(address => mapping(address => uint256)) allowed;\\n uint32 TokensPerEther = 20;\\n\\n event Transfer(address from, address to, uint amount);\\n event Approval(address owner, address spender, uint amount);\\n\\n function transfer(address to, uint amount) external returns (bool success) {\\n balances.move(msg.sender, to, amount);\\n emit Transfer(msg.sender, to, amount);\\n return true;\\n }\\n\\n function stake() public payable {\\n uint256 tokens = msg.value * TokensPerEther;\\n balances[msg.sender] += tokens;\\n }\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint amount\\n ) external returns (bool success) {\\n require(allowed[from][msg.sender] >= amount, \\\"Not enough allowance\\\");\\n allowed[from][msg.sender] -= amount;\\n balances.move(from, to, amount);\\n emit Transfer(from, to, amount);\\n return true;\\n }\\n\\n function approve(address spender, uint tokens)\\n external\\n returns (bool success)\\n {\\n require(\\n allowed[msg.sender][spender] == 0,\\n \\\"Has allowance, can't approve more\\\"\\n );\\n allowed[msg.sender][spender] = tokens;\\n emit Approval(msg.sender, spender, tokens);\\n return true;\\n }\\n\\n function balanceOf(address tokenOwner)\\n external\\n view\\n returns (uint balance)\\n {\\n return balances[tokenOwner];\\n }\\n}\\n\"}}}","address":"0x4E97c71A44eF1B78a7caEe159aa016bE53e04C32","bytecode":"0x60806040526014600260006101000a81548163ffffffff021916908363ffffffff16021790555034801561003257600080fd5b50610cd6806100426000396000f3fe60806040526004361061004a5760003560e01c8063095ea7b31461004f57806323b872dd1461008c5780633a4b66f1146100c957806370a08231146100d3578063a9059cbb14610110575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610840565b61014d565b604051610083919061089b565b60405180910390f35b34801561009857600080fd5b506100b360048036038101906100ae91906108b6565b6102d3565b6040516100c0919061089b565b60405180910390f35b6100d1610485565b005b3480156100df57600080fd5b506100fa60048036038101906100f59190610909565b610505565b6040516101079190610945565b60405180910390f35b34801561011c57600080fd5b5061013760048036038101906101329190610840565b61054d565b604051610144919061089b565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461020d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610204906109e3565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9253384846040516102c193929190610a12565b60405180910390a16001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038b90610a95565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104209190610ae4565b9250508190555061043f84848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848460405161047293929190610a12565b60405180910390a1600190509392505050565b6000600260009054906101000a900463ffffffff1663ffffffff16346104ab9190610b18565b9050806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104fb9190610b72565b9250508190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061056733848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef33848460405161059a93929190610a12565b60405180910390a16001905092915050565b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c14565b60405180910390fd5b8360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054818560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b69190610b72565b10156106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee90610c80565b60405180910390fd5b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107459190610ae4565b92505081905550808460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079a9190610b72565b9250508190555050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107d7826107ac565b9050919050565b6107e7816107cc565b81146107f257600080fd5b50565b600081359050610804816107de565b92915050565b6000819050919050565b61081d8161080a565b811461082857600080fd5b50565b60008135905061083a81610814565b92915050565b60008060408385031215610857576108566107a7565b5b6000610865858286016107f5565b92505060206108768582860161082b565b9150509250929050565b60008115159050919050565b61089581610880565b82525050565b60006020820190506108b0600083018461088c565b92915050565b6000806000606084860312156108cf576108ce6107a7565b5b60006108dd868287016107f5565b93505060206108ee868287016107f5565b92505060406108ff8682870161082b565b9150509250925092565b60006020828403121561091f5761091e6107a7565b5b600061092d848285016107f5565b91505092915050565b61093f8161080a565b82525050565b600060208201905061095a6000830184610936565b92915050565b600082825260208201905092915050565b7f48617320616c6c6f77616e63652c2063616e277420617070726f7665206d6f7260008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006109cd602183610960565b91506109d882610971565b604082019050919050565b600060208201905081810360008301526109fc816109c0565b9050919050565b610a0c816107cc565b82525050565b6000606082019050610a276000830186610a03565b610a346020830185610a03565b610a416040830184610936565b949350505050565b7f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000600082015250565b6000610a7f601483610960565b9150610a8a82610a49565b602082019050919050565b60006020820190508181036000830152610aae81610a72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610aef8261080a565b9150610afa8361080a565b925082821015610b0d57610b0c610ab5565b5b828203905092915050565b6000610b238261080a565b9150610b2e8361080a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610b6757610b66610ab5565b5b828202905092915050565b6000610b7d8261080a565b9150610b888361080a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610bbd57610bbc610ab5565b5b828201905092915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000610bfe601283610960565b9150610c0982610bc8565b602082019050919050565b60006020820190508181036000830152610c2d81610bf1565b9050919050565b7f42616c616e6365204f766572666c6f7700000000000000000000000000000000600082015250565b6000610c6a601083610960565b9150610c7582610c34565b602082019050919050565b60006020820190508181036000830152610c9981610c5d565b905091905056fea26469706673582212206a919534a5f2b8939885541b3e3df8b3ee48535823a8cfa339be7dec1a57b61864736f6c63430008090033","deployedBytecode":"0x60806040526004361061004a5760003560e01c8063095ea7b31461004f57806323b872dd1461008c5780633a4b66f1146100c957806370a08231146100d3578063a9059cbb14610110575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610840565b61014d565b604051610083919061089b565b60405180910390f35b34801561009857600080fd5b506100b360048036038101906100ae91906108b6565b6102d3565b6040516100c0919061089b565b60405180910390f35b6100d1610485565b005b3480156100df57600080fd5b506100fa60048036038101906100f59190610909565b610505565b6040516101079190610945565b60405180910390f35b34801561011c57600080fd5b5061013760048036038101906101329190610840565b61054d565b604051610144919061089b565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461020d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610204906109e3565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9253384846040516102c193929190610a12565b60405180910390a16001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038b90610a95565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104209190610ae4565b9250508190555061043f84848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848460405161047293929190610a12565b60405180910390a1600190509392505050565b6000600260009054906101000a900463ffffffff1663ffffffff16346104ab9190610b18565b9050806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104fb9190610b72565b9250508190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061056733848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef33848460405161059a93929190610a12565b60405180910390a16001905092915050565b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c14565b60405180910390fd5b8360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054818560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b69190610b72565b10156106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee90610c80565b60405180910390fd5b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107459190610ae4565b92505081905550808460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079a9190610b72565b9250508190555050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107d7826107ac565b9050919050565b6107e7816107cc565b81146107f257600080fd5b50565b600081359050610804816107de565b92915050565b6000819050919050565b61081d8161080a565b811461082857600080fd5b50565b60008135905061083a81610814565b92915050565b60008060408385031215610857576108566107a7565b5b6000610865858286016107f5565b92505060206108768582860161082b565b9150509250929050565b60008115159050919050565b61089581610880565b82525050565b60006020820190506108b0600083018461088c565b92915050565b6000806000606084860312156108cf576108ce6107a7565b5b60006108dd868287016107f5565b93505060206108ee868287016107f5565b92505060406108ff8682870161082b565b9150509250925092565b60006020828403121561091f5761091e6107a7565b5b600061092d848285016107f5565b91505092915050565b61093f8161080a565b82525050565b600060208201905061095a6000830184610936565b92915050565b600082825260208201905092915050565b7f48617320616c6c6f77616e63652c2063616e277420617070726f7665206d6f7260008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006109cd602183610960565b91506109d882610971565b604082019050919050565b600060208201905081810360008301526109fc816109c0565b9050919050565b610a0c816107cc565b82525050565b6000606082019050610a276000830186610a03565b610a346020830185610a03565b610a416040830184610936565b949350505050565b7f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000600082015250565b6000610a7f601483610960565b9150610a8a82610a49565b602082019050919050565b60006020820190508181036000830152610aae81610a72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610aef8261080a565b9150610afa8361080a565b925082821015610b0d57610b0c610ab5565b5b828203905092915050565b6000610b238261080a565b9150610b2e8361080a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610b6757610b66610ab5565b5b828202905092915050565b6000610b7d8261080a565b9150610b888361080a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610bbd57610bbc610ab5565b5b828201905092915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000610bfe601283610960565b9150610c0982610bc8565b602082019050919050565b60006020820190508181036000830152610c2d81610bf1565b9050919050565b7f42616c616e6365204f766572666c6f7700000000000000000000000000000000600082015250565b6000610c6a601083610960565b9150610c7582610c34565b602082019050919050565b60006020820190508181036000830152610c9981610c5d565b905091905056fea26469706673582212206a919534a5f2b8939885541b3e3df8b3ee48535823a8cfa339be7dec1a57b61864736f6c63430008090033","abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]} \ No newline at end of file diff --git a/multisig-wallet/deployments/tenderly_1/MultiSigWallet.json b/multisig-wallet/deployments/tenderly_1/MultiSigWallet.json new file mode 100644 index 0000000..cabbac8 --- /dev/null +++ b/multisig-wallet/deployments/tenderly_1/MultiSigWallet.json @@ -0,0 +1 @@ +{"metadata":"{\"compiler\":{\"version\":\"0.8.9\"},\"sources\":{\"contracts/MultiSigWallet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\ncontract MultiSigWallet {\\n // Events\\n event Deposit(address indexed sender, uint amount, uint balance);\\n event TxSubmission(\\n address indexed owner,\\n uint indexed txIndex,\\n address indexed to,\\n uint value,\\n bytes data\\n );\\n event TxConfirmation(address indexed owner, uint indexed txIndex);\\n event ConfirmationRevocation(address indexed owner, uint indexed txIndex);\\n event ExecuteTransaction(address indexed owner, uint indexed txIndex);\\n\\n // List of owners of the wallet\\n address[] public owners;\\n // Mapping to allow for easy checks if someone is an owner\\n mapping(address => bool) public isOwner;\\n // Number of confirmations required to execute a transaction\\n uint public numConfirmationsRequired;\\n\\n // Tx object\\n struct Transaction {\\n address to;\\n uint value;\\n bytes data;\\n bool executed;\\n uint numConfirmations;\\n }\\n\\n // mapping from tx index => owner => bool\\n // use this to check if a transaction is confirmed by an owner\\n mapping(uint => mapping(address => bool)) public isConfirmed;\\n\\n // List of all tracked transactions\\n Transaction[] public transactions;\\n\\n // Helper functions\\n modifier onlyOwner() {\\n require(isOwner[msg.sender], \\\"not owner\\\");\\n _;\\n }\\n\\n modifier txExists(uint _txIndex) {\\n require(_txIndex < transactions.length, \\\"tx does not exist\\\");\\n _;\\n }\\n\\n modifier notExecuted(uint _txIndex) {\\n require(!transactions[_txIndex].executed, \\\"tx already executed\\\");\\n _;\\n }\\n\\n modifier notConfirmed(uint _txIndex) {\\n require(!isConfirmed[_txIndex][msg.sender], \\\"tx already confirmed\\\");\\n _;\\n }\\n\\n constructor(address[] memory _owners, uint _numConfirmationsRequired) {\\n require(_owners.length > 0, \\\"owners required\\\");\\n require(\\n _numConfirmationsRequired > 0 &&\\n _numConfirmationsRequired <= _owners.length,\\n \\\"invalid number of required confirmations\\\"\\n );\\n\\n for (uint i = 0; i < _owners.length; i++) {\\n address owner = _owners[i];\\n\\n require(owner != address(0), \\\"invalid owner\\\");\\n require(!isOwner[owner], \\\"owner not unique\\\");\\n\\n isOwner[owner] = true;\\n owners.push(owner);\\n }\\n\\n numConfirmationsRequired = _numConfirmationsRequired;\\n }\\n\\n receive() external payable {\\n emit Deposit(msg.sender, msg.value, address(this).balance);\\n }\\n\\n function submitTransaction(\\n address _to,\\n uint _value,\\n bytes memory _data\\n ) public onlyOwner {\\n uint txIndex = transactions.length;\\n\\n transactions.push(\\n Transaction({\\n to: _to,\\n value: _value,\\n data: _data,\\n executed: false,\\n numConfirmations: 0\\n })\\n );\\n\\n emit TxSubmission(msg.sender, txIndex, _to, _value, _data);\\n }\\n\\n function confirmTransaction(uint _txIndex)\\n public\\n onlyOwner\\n txExists(_txIndex)\\n notExecuted(_txIndex)\\n notConfirmed(_txIndex)\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n transaction.numConfirmations += 1;\\n isConfirmed[_txIndex][msg.sender] = true;\\n\\n emit TxConfirmation(msg.sender, _txIndex);\\n }\\n\\n function executeTransaction(uint _txIndex)\\n public\\n onlyOwner\\n txExists(_txIndex)\\n notExecuted(_txIndex)\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n\\n require(\\n transaction.numConfirmations >= numConfirmationsRequired,\\n \\\"cannot execute tx\\\"\\n );\\n\\n transaction.executed = true;\\n\\n (bool success, ) = transaction.to.call{value: transaction.value}(\\n transaction.data\\n );\\n require(success, \\\"tx failed\\\");\\n\\n emit ExecuteTransaction(msg.sender, _txIndex);\\n }\\n\\n function revokeConfirmation(uint _txIndex)\\n public\\n onlyOwner\\n txExists(_txIndex)\\n notExecuted(_txIndex)\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n\\n require(isConfirmed[_txIndex][msg.sender], \\\"tx not confirmed\\\");\\n\\n transaction.numConfirmations -= 1;\\n isConfirmed[_txIndex][msg.sender] = false;\\n\\n emit ConfirmationRevocation(msg.sender, _txIndex);\\n }\\n\\n function getOwners() public view returns (address[] memory) {\\n return owners;\\n }\\n\\n function getTransactionCount() public view returns (uint) {\\n return transactions.length;\\n }\\n\\n function getTransaction(uint _txIndex)\\n public\\n view\\n returns (\\n address to,\\n uint value,\\n bytes memory data,\\n bool executed,\\n uint numConfirmations\\n )\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n\\n return (\\n transaction.to,\\n transaction.value,\\n transaction.data,\\n transaction.executed,\\n transaction.numConfirmations\\n );\\n }\\n}\\n\"}}}","address":"0x46e32CCfd6AE6a0EbD4CB47fA1378D6fd13b5884","bytecode":"0x60806040523480156200001157600080fd5b50604051620025033803806200250383398181016040528101906200003791906200050e565b60008251116200007e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200007590620005d5565b60405180910390fd5b60008111801562000090575081518111155b620000d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c9906200066d565b60405180910390fd5b60005b8251811015620002d5576000838281518110620000f757620000f66200068f565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000174576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016b906200070e565b60405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000204576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001fb9062000780565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080620002cc90620007d1565b915050620000d5565b508060028190555050506200081f565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200034982620002fe565b810181811067ffffffffffffffff821117156200036b576200036a6200030f565b5b80604052505050565b600062000380620002e5565b90506200038e82826200033e565b919050565b600067ffffffffffffffff821115620003b157620003b06200030f565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003f482620003c7565b9050919050565b6200040681620003e7565b81146200041257600080fd5b50565b6000815190506200042681620003fb565b92915050565b6000620004436200043d8462000393565b62000374565b90508083825260208201905060208402830185811115620004695762000468620003c2565b5b835b8181101562000496578062000481888262000415565b8452602084019350506020810190506200046b565b5050509392505050565b600082601f830112620004b857620004b7620002f9565b5b8151620004ca8482602086016200042c565b91505092915050565b6000819050919050565b620004e881620004d3565b8114620004f457600080fd5b50565b6000815190506200050881620004dd565b92915050565b60008060408385031215620005285762000527620002ef565b5b600083015167ffffffffffffffff811115620005495762000548620002f4565b5b6200055785828601620004a0565b92505060206200056a85828601620004f7565b9150509250929050565b600082825260208201905092915050565b7f6f776e6572732072657175697265640000000000000000000000000000000000600082015250565b6000620005bd600f8362000574565b9150620005ca8262000585565b602082019050919050565b60006020820190508181036000830152620005f081620005ae565b9050919050565b7f696e76616c6964206e756d626572206f6620726571756972656420636f6e666960008201527f726d6174696f6e73000000000000000000000000000000000000000000000000602082015250565b60006200065560288362000574565b91506200066282620005f7565b604082019050919050565b60006020820190508181036000830152620006888162000646565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f696e76616c6964206f776e657200000000000000000000000000000000000000600082015250565b6000620006f6600d8362000574565b91506200070382620006be565b602082019050919050565b600060208201905081810360008301526200072981620006e7565b9050919050565b7f6f776e6572206e6f7420756e6971756500000000000000000000000000000000600082015250565b60006200076860108362000574565b9150620007758262000730565b602082019050919050565b600060208201905081810360008301526200079b8162000759565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007de82620004d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620008145762000813620007a2565b5b600182019050919050565b611cd4806200082f6000396000f3fe6080604052600436106100ab5760003560e01c80639ace38c2116100645780639ace38c214610253578063a0e67e2b14610294578063c01a8c84146102bf578063c6427474146102e8578063d0549b8514610311578063ee22610b1461033c57610102565b8063025e7c271461010757806320ea8d86146101445780632e7700f01461016d5780632f54bf6e1461019857806333ea3dc8146101d557806380f59a651461021657610102565b36610102573373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1534476040516100f8929190611217565b60405180910390a2005b600080fd5b34801561011357600080fd5b5061012e60048036038101906101299190611280565b610365565b60405161013b91906112ee565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190611280565b6103a4565b005b34801561017957600080fd5b5061018261067e565b60405161018f9190611309565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611350565b61068b565b6040516101cc9190611398565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f79190611280565b6106ab565b60405161020d95949392919061144c565b60405180910390f35b34801561022257600080fd5b5061023d600480360381019061023891906114a6565b6107be565b60405161024a9190611398565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190611280565b6107ed565b60405161028b95949392919061144c565b60405180910390f35b3480156102a057600080fd5b506102a96108e8565b6040516102b691906115a4565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611280565b610976565b005b3480156102f457600080fd5b5061030f600480360381019061030a91906116fb565b610c53565b005b34801561031d57600080fd5b50610326610e5d565b6040516103339190611309565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190611280565b610e63565b005b6000818154811061037557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610427906117c7565b60405180910390fd5b806004805490508110610478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046f90611833565b60405180910390fd5b816004818154811061048d5761048c611853565b5b906000526020600020906005020160030160009054906101000a900460ff16156104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e3906118ce565b60405180910390fd5b60006004848154811061050257610501611853565b5b906000526020600020906005020190506003600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166105af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a69061193a565b60405180910390fd5b60018160040160008282546105c49190611989565b9250508190555060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550833373ffffffffffffffffffffffffffffffffffffffff167fc423fd18c78c483f167229efa90b29abe30eed1425ab9cb40441f6555650eca860405160405180910390a350505050565b6000600480549050905090565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060606000806000600487815481106106c9576106c8611853565b5b906000526020600020906005020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010154826002018360030160009054906101000a900460ff16846004015482805461072a906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610756906119ec565b80156107a35780601f10610778576101008083540402835291602001916107a3565b820191906000526020600020905b81548152906001019060200180831161078657829003601f168201915b50505050509250955095509550955095505091939590929450565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600481815481106107fd57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201805461084c906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610878906119ec565b80156108c55780601f1061089a576101008083540402835291602001916108c5565b820191906000526020600020905b8154815290600101906020018083116108a857829003601f168201915b5050505050908060030160009054906101000a900460ff16908060040154905085565b6060600080548060200260200160405190810160405280929190818152602001828054801561096c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610922575b5050505050905090565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f9906117c7565b60405180910390fd5b806004805490508110610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190611833565b60405180910390fd5b8160048181548110610a5f57610a5e611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906118ce565b60405180910390fd5b826003600082815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490611a6a565b60405180910390fd5b600060048581548110610b7357610b72611853565b5b906000526020600020906005020190506001816004016000828254610b989190611a8a565b9250508190555060016003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550843373ffffffffffffffffffffffffffffffffffffffff167f52a3954c699324c8e90e7e2f7cb9f57cd61af1902197bafcc5085b6c2a57b82360405160405180910390a35050505050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd6906117c7565b60405180910390fd5b6000600480549050905060046040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020016000151581526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190610dc292919061115b565b5060608201518160030160006101000a81548160ff0219169083151502179055506080820151816004015550508373ffffffffffffffffffffffffffffffffffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f52e5c631bb2fd786d6b1c26f68548e07c61d087bf325770dd88d072cf0a5e8b08686604051610e4f929190611ae0565b60405180910390a450505050565b60025481565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906117c7565b60405180910390fd5b806004805490508110610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611833565b60405180910390fd5b8160048181548110610f4c57610f4b611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906118ce565b60405180910390fd5b600060048481548110610fc157610fc0611853565b5b906000526020600020906005020190506002548160040154101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190611b5c565b60405180910390fd5b60018160030160006101000a81548160ff02191690831515021790555060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682600101548360020160405161108a9190611c1b565b60006040518083038185875af1925050503d80600081146110c7576040519150601f19603f3d011682016040523d82523d6000602084013e6110cc565b606091505b5050905080611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790611c7e565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167f5445f318f4f5fcfb66592e68e0cc5822aa15664039bd5f0ffde24c5a8142b1ac60405160405180910390a35050505050565b828054611167906119ec565b90600052602060002090601f01602090048101928261118957600085556111d0565b82601f106111a257805160ff19168380011785556111d0565b828001600101855582156111d0579182015b828111156111cf5782518255916020019190600101906111b4565b5b5090506111dd91906111e1565b5090565b5b808211156111fa5760008160009055506001016111e2565b5090565b6000819050919050565b611211816111fe565b82525050565b600060408201905061122c6000830185611208565b6112396020830184611208565b9392505050565b6000604051905090565b600080fd5b600080fd5b61125d816111fe565b811461126857600080fd5b50565b60008135905061127a81611254565b92915050565b6000602082840312156112965761129561124a565b5b60006112a48482850161126b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112d8826112ad565b9050919050565b6112e8816112cd565b82525050565b600060208201905061130360008301846112df565b92915050565b600060208201905061131e6000830184611208565b92915050565b61132d816112cd565b811461133857600080fd5b50565b60008135905061134a81611324565b92915050565b6000602082840312156113665761136561124a565b5b60006113748482850161133b565b91505092915050565b60008115159050919050565b6113928161137d565b82525050565b60006020820190506113ad6000830184611389565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113ed5780820151818401526020810190506113d2565b838111156113fc576000848401525b50505050565b6000601f19601f8301169050919050565b600061141e826113b3565b61142881856113be565b93506114388185602086016113cf565b61144181611402565b840191505092915050565b600060a08201905061146160008301886112df565b61146e6020830187611208565b81810360408301526114808186611413565b905061148f6060830185611389565b61149c6080830184611208565b9695505050505050565b600080604083850312156114bd576114bc61124a565b5b60006114cb8582860161126b565b92505060206114dc8582860161133b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61151b816112cd565b82525050565b600061152d8383611512565b60208301905092915050565b6000602082019050919050565b6000611551826114e6565b61155b81856114f1565b935061156683611502565b8060005b8381101561159757815161157e8882611521565b975061158983611539565b92505060018101905061156a565b5085935050505092915050565b600060208201905081810360008301526115be8184611546565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61160882611402565b810181811067ffffffffffffffff82111715611627576116266115d0565b5b80604052505050565b600061163a611240565b905061164682826115ff565b919050565b600067ffffffffffffffff821115611666576116656115d0565b5b61166f82611402565b9050602081019050919050565b82818337600083830152505050565b600061169e6116998461164b565b611630565b9050828152602081018484840111156116ba576116b96115cb565b5b6116c584828561167c565b509392505050565b600082601f8301126116e2576116e16115c6565b5b81356116f284826020860161168b565b91505092915050565b6000806000606084860312156117145761171361124a565b5b60006117228682870161133b565b93505060206117338682870161126b565b925050604084013567ffffffffffffffff8111156117545761175361124f565b5b611760868287016116cd565b9150509250925092565b600082825260208201905092915050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006117b160098361176a565b91506117bc8261177b565b602082019050919050565b600060208201905081810360008301526117e0816117a4565b9050919050565b7f747820646f6573206e6f74206578697374000000000000000000000000000000600082015250565b600061181d60118361176a565b9150611828826117e7565b602082019050919050565b6000602082019050818103600083015261184c81611810565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f747820616c726561647920657865637574656400000000000000000000000000600082015250565b60006118b860138361176a565b91506118c382611882565b602082019050919050565b600060208201905081810360008301526118e7816118ab565b9050919050565b7f7478206e6f7420636f6e6669726d656400000000000000000000000000000000600082015250565b600061192460108361176a565b915061192f826118ee565b602082019050919050565b6000602082019050818103600083015261195381611917565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611994826111fe565b915061199f836111fe565b9250828210156119b2576119b161195a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a0457607f821691505b60208210811415611a1857611a176119bd565b5b50919050565b7f747820616c726561647920636f6e6669726d6564000000000000000000000000600082015250565b6000611a5460148361176a565b9150611a5f82611a1e565b602082019050919050565b60006020820190508181036000830152611a8381611a47565b9050919050565b6000611a95826111fe565b9150611aa0836111fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ad557611ad461195a565b5b828201905092915050565b6000604082019050611af56000830185611208565b8181036020830152611b078184611413565b90509392505050565b7f63616e6e6f742065786563757465207478000000000000000000000000000000600082015250565b6000611b4660118361176a565b9150611b5182611b10565b602082019050919050565b60006020820190508181036000830152611b7581611b39565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611ba9816119ec565b611bb38186611b7c565b94506001821660008114611bce5760018114611bdf57611c12565b60ff19831686528186019350611c12565b611be885611b87565b60005b83811015611c0a57815481890152600182019150602081019050611beb565b838801955050505b50505092915050565b6000611c278284611b9c565b915081905092915050565b7f7478206661696c65640000000000000000000000000000000000000000000000600082015250565b6000611c6860098361176a565b9150611c7382611c32565b602082019050919050565b60006020820190508181036000830152611c9781611c5b565b905091905056fea2646970667358221220dde80845922e96b3f6246809411eb89d18ac65e5e05e949ff93edfb8b1b2dfd964736f6c63430008090033","deployedBytecode":"0x6080604052600436106100ab5760003560e01c80639ace38c2116100645780639ace38c214610253578063a0e67e2b14610294578063c01a8c84146102bf578063c6427474146102e8578063d0549b8514610311578063ee22610b1461033c57610102565b8063025e7c271461010757806320ea8d86146101445780632e7700f01461016d5780632f54bf6e1461019857806333ea3dc8146101d557806380f59a651461021657610102565b36610102573373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1534476040516100f8929190611217565b60405180910390a2005b600080fd5b34801561011357600080fd5b5061012e60048036038101906101299190611280565b610365565b60405161013b91906112ee565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190611280565b6103a4565b005b34801561017957600080fd5b5061018261067e565b60405161018f9190611309565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611350565b61068b565b6040516101cc9190611398565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f79190611280565b6106ab565b60405161020d95949392919061144c565b60405180910390f35b34801561022257600080fd5b5061023d600480360381019061023891906114a6565b6107be565b60405161024a9190611398565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190611280565b6107ed565b60405161028b95949392919061144c565b60405180910390f35b3480156102a057600080fd5b506102a96108e8565b6040516102b691906115a4565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611280565b610976565b005b3480156102f457600080fd5b5061030f600480360381019061030a91906116fb565b610c53565b005b34801561031d57600080fd5b50610326610e5d565b6040516103339190611309565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190611280565b610e63565b005b6000818154811061037557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610427906117c7565b60405180910390fd5b806004805490508110610478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046f90611833565b60405180910390fd5b816004818154811061048d5761048c611853565b5b906000526020600020906005020160030160009054906101000a900460ff16156104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e3906118ce565b60405180910390fd5b60006004848154811061050257610501611853565b5b906000526020600020906005020190506003600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166105af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a69061193a565b60405180910390fd5b60018160040160008282546105c49190611989565b9250508190555060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550833373ffffffffffffffffffffffffffffffffffffffff167fc423fd18c78c483f167229efa90b29abe30eed1425ab9cb40441f6555650eca860405160405180910390a350505050565b6000600480549050905090565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060606000806000600487815481106106c9576106c8611853565b5b906000526020600020906005020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010154826002018360030160009054906101000a900460ff16846004015482805461072a906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610756906119ec565b80156107a35780601f10610778576101008083540402835291602001916107a3565b820191906000526020600020905b81548152906001019060200180831161078657829003601f168201915b50505050509250955095509550955095505091939590929450565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600481815481106107fd57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201805461084c906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610878906119ec565b80156108c55780601f1061089a576101008083540402835291602001916108c5565b820191906000526020600020905b8154815290600101906020018083116108a857829003601f168201915b5050505050908060030160009054906101000a900460ff16908060040154905085565b6060600080548060200260200160405190810160405280929190818152602001828054801561096c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610922575b5050505050905090565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f9906117c7565b60405180910390fd5b806004805490508110610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190611833565b60405180910390fd5b8160048181548110610a5f57610a5e611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906118ce565b60405180910390fd5b826003600082815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490611a6a565b60405180910390fd5b600060048581548110610b7357610b72611853565b5b906000526020600020906005020190506001816004016000828254610b989190611a8a565b9250508190555060016003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550843373ffffffffffffffffffffffffffffffffffffffff167f52a3954c699324c8e90e7e2f7cb9f57cd61af1902197bafcc5085b6c2a57b82360405160405180910390a35050505050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd6906117c7565b60405180910390fd5b6000600480549050905060046040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020016000151581526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190610dc292919061115b565b5060608201518160030160006101000a81548160ff0219169083151502179055506080820151816004015550508373ffffffffffffffffffffffffffffffffffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f52e5c631bb2fd786d6b1c26f68548e07c61d087bf325770dd88d072cf0a5e8b08686604051610e4f929190611ae0565b60405180910390a450505050565b60025481565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906117c7565b60405180910390fd5b806004805490508110610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611833565b60405180910390fd5b8160048181548110610f4c57610f4b611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906118ce565b60405180910390fd5b600060048481548110610fc157610fc0611853565b5b906000526020600020906005020190506002548160040154101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190611b5c565b60405180910390fd5b60018160030160006101000a81548160ff02191690831515021790555060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682600101548360020160405161108a9190611c1b565b60006040518083038185875af1925050503d80600081146110c7576040519150601f19603f3d011682016040523d82523d6000602084013e6110cc565b606091505b5050905080611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790611c7e565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167f5445f318f4f5fcfb66592e68e0cc5822aa15664039bd5f0ffde24c5a8142b1ac60405160405180910390a35050505050565b828054611167906119ec565b90600052602060002090601f01602090048101928261118957600085556111d0565b82601f106111a257805160ff19168380011785556111d0565b828001600101855582156111d0579182015b828111156111cf5782518255916020019190600101906111b4565b5b5090506111dd91906111e1565b5090565b5b808211156111fa5760008160009055506001016111e2565b5090565b6000819050919050565b611211816111fe565b82525050565b600060408201905061122c6000830185611208565b6112396020830184611208565b9392505050565b6000604051905090565b600080fd5b600080fd5b61125d816111fe565b811461126857600080fd5b50565b60008135905061127a81611254565b92915050565b6000602082840312156112965761129561124a565b5b60006112a48482850161126b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112d8826112ad565b9050919050565b6112e8816112cd565b82525050565b600060208201905061130360008301846112df565b92915050565b600060208201905061131e6000830184611208565b92915050565b61132d816112cd565b811461133857600080fd5b50565b60008135905061134a81611324565b92915050565b6000602082840312156113665761136561124a565b5b60006113748482850161133b565b91505092915050565b60008115159050919050565b6113928161137d565b82525050565b60006020820190506113ad6000830184611389565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113ed5780820151818401526020810190506113d2565b838111156113fc576000848401525b50505050565b6000601f19601f8301169050919050565b600061141e826113b3565b61142881856113be565b93506114388185602086016113cf565b61144181611402565b840191505092915050565b600060a08201905061146160008301886112df565b61146e6020830187611208565b81810360408301526114808186611413565b905061148f6060830185611389565b61149c6080830184611208565b9695505050505050565b600080604083850312156114bd576114bc61124a565b5b60006114cb8582860161126b565b92505060206114dc8582860161133b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61151b816112cd565b82525050565b600061152d8383611512565b60208301905092915050565b6000602082019050919050565b6000611551826114e6565b61155b81856114f1565b935061156683611502565b8060005b8381101561159757815161157e8882611521565b975061158983611539565b92505060018101905061156a565b5085935050505092915050565b600060208201905081810360008301526115be8184611546565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61160882611402565b810181811067ffffffffffffffff82111715611627576116266115d0565b5b80604052505050565b600061163a611240565b905061164682826115ff565b919050565b600067ffffffffffffffff821115611666576116656115d0565b5b61166f82611402565b9050602081019050919050565b82818337600083830152505050565b600061169e6116998461164b565b611630565b9050828152602081018484840111156116ba576116b96115cb565b5b6116c584828561167c565b509392505050565b600082601f8301126116e2576116e16115c6565b5b81356116f284826020860161168b565b91505092915050565b6000806000606084860312156117145761171361124a565b5b60006117228682870161133b565b93505060206117338682870161126b565b925050604084013567ffffffffffffffff8111156117545761175361124f565b5b611760868287016116cd565b9150509250925092565b600082825260208201905092915050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006117b160098361176a565b91506117bc8261177b565b602082019050919050565b600060208201905081810360008301526117e0816117a4565b9050919050565b7f747820646f6573206e6f74206578697374000000000000000000000000000000600082015250565b600061181d60118361176a565b9150611828826117e7565b602082019050919050565b6000602082019050818103600083015261184c81611810565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f747820616c726561647920657865637574656400000000000000000000000000600082015250565b60006118b860138361176a565b91506118c382611882565b602082019050919050565b600060208201905081810360008301526118e7816118ab565b9050919050565b7f7478206e6f7420636f6e6669726d656400000000000000000000000000000000600082015250565b600061192460108361176a565b915061192f826118ee565b602082019050919050565b6000602082019050818103600083015261195381611917565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611994826111fe565b915061199f836111fe565b9250828210156119b2576119b161195a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a0457607f821691505b60208210811415611a1857611a176119bd565b5b50919050565b7f747820616c726561647920636f6e6669726d6564000000000000000000000000600082015250565b6000611a5460148361176a565b9150611a5f82611a1e565b602082019050919050565b60006020820190508181036000830152611a8381611a47565b9050919050565b6000611a95826111fe565b9150611aa0836111fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ad557611ad461195a565b5b828201905092915050565b6000604082019050611af56000830185611208565b8181036020830152611b078184611413565b90509392505050565b7f63616e6e6f742065786563757465207478000000000000000000000000000000600082015250565b6000611b4660118361176a565b9150611b5182611b10565b602082019050919050565b60006020820190508181036000830152611b7581611b39565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611ba9816119ec565b611bb38186611b7c565b94506001821660008114611bce5760018114611bdf57611c12565b60ff19831686528186019350611c12565b611be885611b87565b60005b83811015611c0a57815481890152600182019150602081019050611beb565b838801955050505b50505092915050565b6000611c278284611b9c565b915081905092915050565b7f7478206661696c65640000000000000000000000000000000000000000000000600082015250565b6000611c6860098361176a565b9150611c7382611c32565b602082019050919050565b60006020820190508181036000830152611c9781611c5b565b905091905056fea2646970667358221220dde80845922e96b3f6246809411eb89d18ac65e5e05e949ff93edfb8b1b2dfd964736f6c63430008090033","abi":[{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256","name":"_numConfirmationsRequired","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"}],"name":"ConfirmationRevocation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"}],"name":"ExecuteTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"}],"name":"TxConfirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TxSubmission","type":"event"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"confirmTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"executeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"getTransaction","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint256","name":"numConfirmations","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransactionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"isConfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numConfirmationsRequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"revokeConfirmation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"submitTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint256","name":"numConfirmations","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]} \ No newline at end of file diff --git a/multisig-wallet/deployments/tenderly_1/Token.json b/multisig-wallet/deployments/tenderly_1/Token.json new file mode 100644 index 0000000..5d6f7c3 --- /dev/null +++ b/multisig-wallet/deployments/tenderly_1/Token.json @@ -0,0 +1 @@ +{"metadata":"{\"compiler\":{\"version\":\"0.8.9\"},\"sources\":{\"contracts/Token.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity >=0.5.0 <0.9.0;\\n\\nlibrary Balances {\\n function move(\\n mapping(address => uint256) storage balances,\\n address from,\\n address to,\\n uint amount\\n ) internal {\\n require(balances[from] >= amount, \\\"Not enough balance\\\");\\n require(balances[to] + amount >= balances[to], \\\"Balance Overflow\\\");\\n balances[from] -= amount;\\n balances[to] += amount;\\n }\\n}\\n\\ncontract Token {\\n mapping(address => uint256) balances;\\n using Balances for *;\\n mapping(address => mapping(address => uint256)) allowed;\\n uint32 TokensPerEther = 20;\\n\\n event Transfer(address from, address to, uint amount);\\n event Approval(address owner, address spender, uint amount);\\n\\n function transfer(address to, uint amount) external returns (bool success) {\\n balances.move(msg.sender, to, amount);\\n emit Transfer(msg.sender, to, amount);\\n return true;\\n }\\n\\n function stake() public payable {\\n uint256 tokens = msg.value * TokensPerEther;\\n balances[msg.sender] += tokens;\\n }\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint amount\\n ) external returns (bool success) {\\n require(allowed[from][msg.sender] >= amount, \\\"Not enough allowance\\\");\\n allowed[from][msg.sender] -= amount;\\n balances.move(from, to, amount);\\n emit Transfer(from, to, amount);\\n return true;\\n }\\n\\n function approve(address spender, uint tokens)\\n external\\n returns (bool success)\\n {\\n require(\\n allowed[msg.sender][spender] == 0,\\n \\\"Has allowance, can't approve more\\\"\\n );\\n allowed[msg.sender][spender] = tokens;\\n emit Approval(msg.sender, spender, tokens);\\n return true;\\n }\\n\\n function balanceOf(address tokenOwner)\\n external\\n view\\n returns (uint balance)\\n {\\n return balances[tokenOwner];\\n }\\n}\\n\"}}}","address":"0x2D6582D761b0Fd0c74e06Ec914bac0657741e42e","bytecode":"0x60806040526014600260006101000a81548163ffffffff021916908363ffffffff16021790555034801561003257600080fd5b50610cd6806100426000396000f3fe60806040526004361061004a5760003560e01c8063095ea7b31461004f57806323b872dd1461008c5780633a4b66f1146100c957806370a08231146100d3578063a9059cbb14610110575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610840565b61014d565b604051610083919061089b565b60405180910390f35b34801561009857600080fd5b506100b360048036038101906100ae91906108b6565b6102d3565b6040516100c0919061089b565b60405180910390f35b6100d1610485565b005b3480156100df57600080fd5b506100fa60048036038101906100f59190610909565b610505565b6040516101079190610945565b60405180910390f35b34801561011c57600080fd5b5061013760048036038101906101329190610840565b61054d565b604051610144919061089b565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461020d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610204906109e3565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9253384846040516102c193929190610a12565b60405180910390a16001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038b90610a95565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104209190610ae4565b9250508190555061043f84848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848460405161047293929190610a12565b60405180910390a1600190509392505050565b6000600260009054906101000a900463ffffffff1663ffffffff16346104ab9190610b18565b9050806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104fb9190610b72565b9250508190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061056733848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef33848460405161059a93929190610a12565b60405180910390a16001905092915050565b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c14565b60405180910390fd5b8360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054818560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b69190610b72565b10156106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee90610c80565b60405180910390fd5b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107459190610ae4565b92505081905550808460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079a9190610b72565b9250508190555050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107d7826107ac565b9050919050565b6107e7816107cc565b81146107f257600080fd5b50565b600081359050610804816107de565b92915050565b6000819050919050565b61081d8161080a565b811461082857600080fd5b50565b60008135905061083a81610814565b92915050565b60008060408385031215610857576108566107a7565b5b6000610865858286016107f5565b92505060206108768582860161082b565b9150509250929050565b60008115159050919050565b61089581610880565b82525050565b60006020820190506108b0600083018461088c565b92915050565b6000806000606084860312156108cf576108ce6107a7565b5b60006108dd868287016107f5565b93505060206108ee868287016107f5565b92505060406108ff8682870161082b565b9150509250925092565b60006020828403121561091f5761091e6107a7565b5b600061092d848285016107f5565b91505092915050565b61093f8161080a565b82525050565b600060208201905061095a6000830184610936565b92915050565b600082825260208201905092915050565b7f48617320616c6c6f77616e63652c2063616e277420617070726f7665206d6f7260008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006109cd602183610960565b91506109d882610971565b604082019050919050565b600060208201905081810360008301526109fc816109c0565b9050919050565b610a0c816107cc565b82525050565b6000606082019050610a276000830186610a03565b610a346020830185610a03565b610a416040830184610936565b949350505050565b7f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000600082015250565b6000610a7f601483610960565b9150610a8a82610a49565b602082019050919050565b60006020820190508181036000830152610aae81610a72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610aef8261080a565b9150610afa8361080a565b925082821015610b0d57610b0c610ab5565b5b828203905092915050565b6000610b238261080a565b9150610b2e8361080a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610b6757610b66610ab5565b5b828202905092915050565b6000610b7d8261080a565b9150610b888361080a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610bbd57610bbc610ab5565b5b828201905092915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000610bfe601283610960565b9150610c0982610bc8565b602082019050919050565b60006020820190508181036000830152610c2d81610bf1565b9050919050565b7f42616c616e6365204f766572666c6f7700000000000000000000000000000000600082015250565b6000610c6a601083610960565b9150610c7582610c34565b602082019050919050565b60006020820190508181036000830152610c9981610c5d565b905091905056fea26469706673582212206a919534a5f2b8939885541b3e3df8b3ee48535823a8cfa339be7dec1a57b61864736f6c63430008090033","deployedBytecode":"0x60806040526004361061004a5760003560e01c8063095ea7b31461004f57806323b872dd1461008c5780633a4b66f1146100c957806370a08231146100d3578063a9059cbb14610110575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610840565b61014d565b604051610083919061089b565b60405180910390f35b34801561009857600080fd5b506100b360048036038101906100ae91906108b6565b6102d3565b6040516100c0919061089b565b60405180910390f35b6100d1610485565b005b3480156100df57600080fd5b506100fa60048036038101906100f59190610909565b610505565b6040516101079190610945565b60405180910390f35b34801561011c57600080fd5b5061013760048036038101906101329190610840565b61054d565b604051610144919061089b565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461020d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610204906109e3565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9253384846040516102c193929190610a12565b60405180910390a16001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038b90610a95565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104209190610ae4565b9250508190555061043f84848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848460405161047293929190610a12565b60405180910390a1600190509392505050565b6000600260009054906101000a900463ffffffff1663ffffffff16346104ab9190610b18565b9050806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104fb9190610b72565b9250508190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061056733848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef33848460405161059a93929190610a12565b60405180910390a16001905092915050565b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c14565b60405180910390fd5b8360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054818560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b69190610b72565b10156106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee90610c80565b60405180910390fd5b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107459190610ae4565b92505081905550808460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079a9190610b72565b9250508190555050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107d7826107ac565b9050919050565b6107e7816107cc565b81146107f257600080fd5b50565b600081359050610804816107de565b92915050565b6000819050919050565b61081d8161080a565b811461082857600080fd5b50565b60008135905061083a81610814565b92915050565b60008060408385031215610857576108566107a7565b5b6000610865858286016107f5565b92505060206108768582860161082b565b9150509250929050565b60008115159050919050565b61089581610880565b82525050565b60006020820190506108b0600083018461088c565b92915050565b6000806000606084860312156108cf576108ce6107a7565b5b60006108dd868287016107f5565b93505060206108ee868287016107f5565b92505060406108ff8682870161082b565b9150509250925092565b60006020828403121561091f5761091e6107a7565b5b600061092d848285016107f5565b91505092915050565b61093f8161080a565b82525050565b600060208201905061095a6000830184610936565b92915050565b600082825260208201905092915050565b7f48617320616c6c6f77616e63652c2063616e277420617070726f7665206d6f7260008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006109cd602183610960565b91506109d882610971565b604082019050919050565b600060208201905081810360008301526109fc816109c0565b9050919050565b610a0c816107cc565b82525050565b6000606082019050610a276000830186610a03565b610a346020830185610a03565b610a416040830184610936565b949350505050565b7f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000600082015250565b6000610a7f601483610960565b9150610a8a82610a49565b602082019050919050565b60006020820190508181036000830152610aae81610a72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610aef8261080a565b9150610afa8361080a565b925082821015610b0d57610b0c610ab5565b5b828203905092915050565b6000610b238261080a565b9150610b2e8361080a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610b6757610b66610ab5565b5b828202905092915050565b6000610b7d8261080a565b9150610b888361080a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610bbd57610bbc610ab5565b5b828201905092915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000610bfe601283610960565b9150610c0982610bc8565b602082019050919050565b60006020820190508181036000830152610c2d81610bf1565b9050919050565b7f42616c616e6365204f766572666c6f7700000000000000000000000000000000600082015250565b6000610c6a601083610960565b9150610c7582610c34565b602082019050919050565b60006020820190508181036000830152610c9981610c5d565b905091905056fea26469706673582212206a919534a5f2b8939885541b3e3df8b3ee48535823a8cfa339be7dec1a57b61864736f6c63430008090033","abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]} \ No newline at end of file diff --git a/multisig-wallet/deployments/tenderly_3/MultiSigWallet.json b/multisig-wallet/deployments/tenderly_3/MultiSigWallet.json new file mode 100644 index 0000000..14c3b97 --- /dev/null +++ b/multisig-wallet/deployments/tenderly_3/MultiSigWallet.json @@ -0,0 +1 @@ +{"metadata":"{\"compiler\":{\"version\":\"0.8.9\"},\"sources\":{\"contracts/MultiSigWallet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\ncontract MultiSigWallet {\\n // Events\\n event Deposit(address indexed sender, uint amount, uint balance);\\n event TxSubmission(\\n address indexed owner,\\n uint indexed txIndex,\\n address indexed to,\\n uint value,\\n bytes data\\n );\\n event TxConfirmation(address indexed owner, uint indexed txIndex);\\n event ConfirmationRevocation(address indexed owner, uint indexed txIndex);\\n event ExecuteTransaction(address indexed owner, uint indexed txIndex);\\n\\n // List of owners of the wallet\\n address[] public owners;\\n // Mapping to allow for easy checks if someone is an owner\\n mapping(address => bool) public isOwner;\\n // Number of confirmations required to execute a transaction\\n uint public numConfirmationsRequired;\\n\\n // Tx object\\n struct Transaction {\\n address to;\\n uint value;\\n bytes data;\\n bool executed;\\n uint numConfirmations;\\n }\\n\\n // mapping from tx index => owner => bool\\n // use this to check if a transaction is confirmed by an owner\\n mapping(uint => mapping(address => bool)) public isConfirmed;\\n\\n // List of all tracked transactions\\n Transaction[] public transactions;\\n\\n // Helper functions\\n modifier onlyOwner() {\\n require(isOwner[msg.sender], \\\"not owner\\\");\\n _;\\n }\\n\\n modifier txExists(uint _txIndex) {\\n require(_txIndex < transactions.length, \\\"tx does not exist\\\");\\n _;\\n }\\n\\n modifier notExecuted(uint _txIndex) {\\n require(!transactions[_txIndex].executed, \\\"tx already executed\\\");\\n _;\\n }\\n\\n modifier notConfirmed(uint _txIndex) {\\n require(!isConfirmed[_txIndex][msg.sender], \\\"tx already confirmed\\\");\\n _;\\n }\\n\\n constructor(address[] memory _owners, uint _numConfirmationsRequired) {\\n require(_owners.length > 0, \\\"owners required\\\");\\n require(\\n _numConfirmationsRequired > 0 &&\\n _numConfirmationsRequired <= _owners.length,\\n \\\"invalid number of required confirmations\\\"\\n );\\n\\n for (uint i = 0; i < _owners.length; i++) {\\n address owner = _owners[i];\\n\\n require(owner != address(0), \\\"invalid owner\\\");\\n require(!isOwner[owner], \\\"owner not unique\\\");\\n\\n isOwner[owner] = true;\\n owners.push(owner);\\n }\\n\\n numConfirmationsRequired = _numConfirmationsRequired;\\n }\\n\\n receive() external payable {\\n emit Deposit(msg.sender, msg.value, address(this).balance);\\n }\\n\\n function submitTransaction(\\n address _to,\\n uint _value,\\n bytes memory _data\\n ) public onlyOwner {\\n uint txIndex = transactions.length;\\n\\n transactions.push(\\n Transaction({\\n to: _to,\\n value: _value,\\n data: _data,\\n executed: false,\\n numConfirmations: 0\\n })\\n );\\n\\n emit TxSubmission(msg.sender, txIndex, _to, _value, _data);\\n }\\n\\n function confirmTransaction(uint _txIndex)\\n public\\n onlyOwner\\n txExists(_txIndex)\\n notExecuted(_txIndex)\\n notConfirmed(_txIndex)\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n transaction.numConfirmations += 1;\\n isConfirmed[_txIndex][msg.sender] = true;\\n\\n emit TxConfirmation(msg.sender, _txIndex);\\n }\\n\\n function executeTransaction(uint _txIndex)\\n public\\n onlyOwner\\n txExists(_txIndex)\\n notExecuted(_txIndex)\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n\\n require(\\n transaction.numConfirmations >= numConfirmationsRequired,\\n \\\"cannot execute tx\\\"\\n );\\n\\n transaction.executed = true;\\n\\n (bool success, ) = transaction.to.call{value: transaction.value}(\\n transaction.data\\n );\\n require(success, \\\"tx failed\\\");\\n\\n emit ExecuteTransaction(msg.sender, _txIndex);\\n }\\n\\n function revokeConfirmation(uint _txIndex)\\n public\\n onlyOwner\\n txExists(_txIndex)\\n notExecuted(_txIndex)\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n\\n require(isConfirmed[_txIndex][msg.sender], \\\"tx not confirmed\\\");\\n\\n transaction.numConfirmations -= 1;\\n isConfirmed[_txIndex][msg.sender] = false;\\n\\n emit ConfirmationRevocation(msg.sender, _txIndex);\\n }\\n\\n function getOwners() public view returns (address[] memory) {\\n return owners;\\n }\\n\\n function getTransactionCount() public view returns (uint) {\\n return transactions.length;\\n }\\n\\n function getTransaction(uint _txIndex)\\n public\\n view\\n returns (\\n address to,\\n uint value,\\n bytes memory data,\\n bool executed,\\n uint numConfirmations\\n )\\n {\\n Transaction storage transaction = transactions[_txIndex];\\n\\n return (\\n transaction.to,\\n transaction.value,\\n transaction.data,\\n transaction.executed,\\n transaction.numConfirmations\\n );\\n }\\n}\\n\"}}}","address":"0x67F87fF8e5ec28C9dC0bA34A6307337D8344De6C","bytecode":"0x60806040523480156200001157600080fd5b50604051620025033803806200250383398181016040528101906200003791906200050e565b60008251116200007e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200007590620005d5565b60405180910390fd5b60008111801562000090575081518111155b620000d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c9906200066d565b60405180910390fd5b60005b8251811015620002d5576000838281518110620000f757620000f66200068f565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000174576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016b906200070e565b60405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000204576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001fb9062000780565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080620002cc90620007d1565b915050620000d5565b508060028190555050506200081f565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200034982620002fe565b810181811067ffffffffffffffff821117156200036b576200036a6200030f565b5b80604052505050565b600062000380620002e5565b90506200038e82826200033e565b919050565b600067ffffffffffffffff821115620003b157620003b06200030f565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003f482620003c7565b9050919050565b6200040681620003e7565b81146200041257600080fd5b50565b6000815190506200042681620003fb565b92915050565b6000620004436200043d8462000393565b62000374565b90508083825260208201905060208402830185811115620004695762000468620003c2565b5b835b8181101562000496578062000481888262000415565b8452602084019350506020810190506200046b565b5050509392505050565b600082601f830112620004b857620004b7620002f9565b5b8151620004ca8482602086016200042c565b91505092915050565b6000819050919050565b620004e881620004d3565b8114620004f457600080fd5b50565b6000815190506200050881620004dd565b92915050565b60008060408385031215620005285762000527620002ef565b5b600083015167ffffffffffffffff811115620005495762000548620002f4565b5b6200055785828601620004a0565b92505060206200056a85828601620004f7565b9150509250929050565b600082825260208201905092915050565b7f6f776e6572732072657175697265640000000000000000000000000000000000600082015250565b6000620005bd600f8362000574565b9150620005ca8262000585565b602082019050919050565b60006020820190508181036000830152620005f081620005ae565b9050919050565b7f696e76616c6964206e756d626572206f6620726571756972656420636f6e666960008201527f726d6174696f6e73000000000000000000000000000000000000000000000000602082015250565b60006200065560288362000574565b91506200066282620005f7565b604082019050919050565b60006020820190508181036000830152620006888162000646565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f696e76616c6964206f776e657200000000000000000000000000000000000000600082015250565b6000620006f6600d8362000574565b91506200070382620006be565b602082019050919050565b600060208201905081810360008301526200072981620006e7565b9050919050565b7f6f776e6572206e6f7420756e6971756500000000000000000000000000000000600082015250565b60006200076860108362000574565b9150620007758262000730565b602082019050919050565b600060208201905081810360008301526200079b8162000759565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007de82620004d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620008145762000813620007a2565b5b600182019050919050565b611cd4806200082f6000396000f3fe6080604052600436106100ab5760003560e01c80639ace38c2116100645780639ace38c214610253578063a0e67e2b14610294578063c01a8c84146102bf578063c6427474146102e8578063d0549b8514610311578063ee22610b1461033c57610102565b8063025e7c271461010757806320ea8d86146101445780632e7700f01461016d5780632f54bf6e1461019857806333ea3dc8146101d557806380f59a651461021657610102565b36610102573373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1534476040516100f8929190611217565b60405180910390a2005b600080fd5b34801561011357600080fd5b5061012e60048036038101906101299190611280565b610365565b60405161013b91906112ee565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190611280565b6103a4565b005b34801561017957600080fd5b5061018261067e565b60405161018f9190611309565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611350565b61068b565b6040516101cc9190611398565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f79190611280565b6106ab565b60405161020d95949392919061144c565b60405180910390f35b34801561022257600080fd5b5061023d600480360381019061023891906114a6565b6107be565b60405161024a9190611398565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190611280565b6107ed565b60405161028b95949392919061144c565b60405180910390f35b3480156102a057600080fd5b506102a96108e8565b6040516102b691906115a4565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611280565b610976565b005b3480156102f457600080fd5b5061030f600480360381019061030a91906116fb565b610c53565b005b34801561031d57600080fd5b50610326610e5d565b6040516103339190611309565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190611280565b610e63565b005b6000818154811061037557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610427906117c7565b60405180910390fd5b806004805490508110610478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046f90611833565b60405180910390fd5b816004818154811061048d5761048c611853565b5b906000526020600020906005020160030160009054906101000a900460ff16156104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e3906118ce565b60405180910390fd5b60006004848154811061050257610501611853565b5b906000526020600020906005020190506003600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166105af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a69061193a565b60405180910390fd5b60018160040160008282546105c49190611989565b9250508190555060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550833373ffffffffffffffffffffffffffffffffffffffff167fc423fd18c78c483f167229efa90b29abe30eed1425ab9cb40441f6555650eca860405160405180910390a350505050565b6000600480549050905090565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060606000806000600487815481106106c9576106c8611853565b5b906000526020600020906005020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010154826002018360030160009054906101000a900460ff16846004015482805461072a906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610756906119ec565b80156107a35780601f10610778576101008083540402835291602001916107a3565b820191906000526020600020905b81548152906001019060200180831161078657829003601f168201915b50505050509250955095509550955095505091939590929450565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600481815481106107fd57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201805461084c906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610878906119ec565b80156108c55780601f1061089a576101008083540402835291602001916108c5565b820191906000526020600020905b8154815290600101906020018083116108a857829003601f168201915b5050505050908060030160009054906101000a900460ff16908060040154905085565b6060600080548060200260200160405190810160405280929190818152602001828054801561096c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610922575b5050505050905090565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f9906117c7565b60405180910390fd5b806004805490508110610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190611833565b60405180910390fd5b8160048181548110610a5f57610a5e611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906118ce565b60405180910390fd5b826003600082815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490611a6a565b60405180910390fd5b600060048581548110610b7357610b72611853565b5b906000526020600020906005020190506001816004016000828254610b989190611a8a565b9250508190555060016003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550843373ffffffffffffffffffffffffffffffffffffffff167f52a3954c699324c8e90e7e2f7cb9f57cd61af1902197bafcc5085b6c2a57b82360405160405180910390a35050505050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd6906117c7565b60405180910390fd5b6000600480549050905060046040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020016000151581526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190610dc292919061115b565b5060608201518160030160006101000a81548160ff0219169083151502179055506080820151816004015550508373ffffffffffffffffffffffffffffffffffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f52e5c631bb2fd786d6b1c26f68548e07c61d087bf325770dd88d072cf0a5e8b08686604051610e4f929190611ae0565b60405180910390a450505050565b60025481565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906117c7565b60405180910390fd5b806004805490508110610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611833565b60405180910390fd5b8160048181548110610f4c57610f4b611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906118ce565b60405180910390fd5b600060048481548110610fc157610fc0611853565b5b906000526020600020906005020190506002548160040154101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190611b5c565b60405180910390fd5b60018160030160006101000a81548160ff02191690831515021790555060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682600101548360020160405161108a9190611c1b565b60006040518083038185875af1925050503d80600081146110c7576040519150601f19603f3d011682016040523d82523d6000602084013e6110cc565b606091505b5050905080611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790611c7e565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167f5445f318f4f5fcfb66592e68e0cc5822aa15664039bd5f0ffde24c5a8142b1ac60405160405180910390a35050505050565b828054611167906119ec565b90600052602060002090601f01602090048101928261118957600085556111d0565b82601f106111a257805160ff19168380011785556111d0565b828001600101855582156111d0579182015b828111156111cf5782518255916020019190600101906111b4565b5b5090506111dd91906111e1565b5090565b5b808211156111fa5760008160009055506001016111e2565b5090565b6000819050919050565b611211816111fe565b82525050565b600060408201905061122c6000830185611208565b6112396020830184611208565b9392505050565b6000604051905090565b600080fd5b600080fd5b61125d816111fe565b811461126857600080fd5b50565b60008135905061127a81611254565b92915050565b6000602082840312156112965761129561124a565b5b60006112a48482850161126b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112d8826112ad565b9050919050565b6112e8816112cd565b82525050565b600060208201905061130360008301846112df565b92915050565b600060208201905061131e6000830184611208565b92915050565b61132d816112cd565b811461133857600080fd5b50565b60008135905061134a81611324565b92915050565b6000602082840312156113665761136561124a565b5b60006113748482850161133b565b91505092915050565b60008115159050919050565b6113928161137d565b82525050565b60006020820190506113ad6000830184611389565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113ed5780820151818401526020810190506113d2565b838111156113fc576000848401525b50505050565b6000601f19601f8301169050919050565b600061141e826113b3565b61142881856113be565b93506114388185602086016113cf565b61144181611402565b840191505092915050565b600060a08201905061146160008301886112df565b61146e6020830187611208565b81810360408301526114808186611413565b905061148f6060830185611389565b61149c6080830184611208565b9695505050505050565b600080604083850312156114bd576114bc61124a565b5b60006114cb8582860161126b565b92505060206114dc8582860161133b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61151b816112cd565b82525050565b600061152d8383611512565b60208301905092915050565b6000602082019050919050565b6000611551826114e6565b61155b81856114f1565b935061156683611502565b8060005b8381101561159757815161157e8882611521565b975061158983611539565b92505060018101905061156a565b5085935050505092915050565b600060208201905081810360008301526115be8184611546565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61160882611402565b810181811067ffffffffffffffff82111715611627576116266115d0565b5b80604052505050565b600061163a611240565b905061164682826115ff565b919050565b600067ffffffffffffffff821115611666576116656115d0565b5b61166f82611402565b9050602081019050919050565b82818337600083830152505050565b600061169e6116998461164b565b611630565b9050828152602081018484840111156116ba576116b96115cb565b5b6116c584828561167c565b509392505050565b600082601f8301126116e2576116e16115c6565b5b81356116f284826020860161168b565b91505092915050565b6000806000606084860312156117145761171361124a565b5b60006117228682870161133b565b93505060206117338682870161126b565b925050604084013567ffffffffffffffff8111156117545761175361124f565b5b611760868287016116cd565b9150509250925092565b600082825260208201905092915050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006117b160098361176a565b91506117bc8261177b565b602082019050919050565b600060208201905081810360008301526117e0816117a4565b9050919050565b7f747820646f6573206e6f74206578697374000000000000000000000000000000600082015250565b600061181d60118361176a565b9150611828826117e7565b602082019050919050565b6000602082019050818103600083015261184c81611810565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f747820616c726561647920657865637574656400000000000000000000000000600082015250565b60006118b860138361176a565b91506118c382611882565b602082019050919050565b600060208201905081810360008301526118e7816118ab565b9050919050565b7f7478206e6f7420636f6e6669726d656400000000000000000000000000000000600082015250565b600061192460108361176a565b915061192f826118ee565b602082019050919050565b6000602082019050818103600083015261195381611917565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611994826111fe565b915061199f836111fe565b9250828210156119b2576119b161195a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a0457607f821691505b60208210811415611a1857611a176119bd565b5b50919050565b7f747820616c726561647920636f6e6669726d6564000000000000000000000000600082015250565b6000611a5460148361176a565b9150611a5f82611a1e565b602082019050919050565b60006020820190508181036000830152611a8381611a47565b9050919050565b6000611a95826111fe565b9150611aa0836111fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ad557611ad461195a565b5b828201905092915050565b6000604082019050611af56000830185611208565b8181036020830152611b078184611413565b90509392505050565b7f63616e6e6f742065786563757465207478000000000000000000000000000000600082015250565b6000611b4660118361176a565b9150611b5182611b10565b602082019050919050565b60006020820190508181036000830152611b7581611b39565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611ba9816119ec565b611bb38186611b7c565b94506001821660008114611bce5760018114611bdf57611c12565b60ff19831686528186019350611c12565b611be885611b87565b60005b83811015611c0a57815481890152600182019150602081019050611beb565b838801955050505b50505092915050565b6000611c278284611b9c565b915081905092915050565b7f7478206661696c65640000000000000000000000000000000000000000000000600082015250565b6000611c6860098361176a565b9150611c7382611c32565b602082019050919050565b60006020820190508181036000830152611c9781611c5b565b905091905056fea2646970667358221220dde80845922e96b3f6246809411eb89d18ac65e5e05e949ff93edfb8b1b2dfd964736f6c63430008090033","deployedBytecode":"0x6080604052600436106100ab5760003560e01c80639ace38c2116100645780639ace38c214610253578063a0e67e2b14610294578063c01a8c84146102bf578063c6427474146102e8578063d0549b8514610311578063ee22610b1461033c57610102565b8063025e7c271461010757806320ea8d86146101445780632e7700f01461016d5780632f54bf6e1461019857806333ea3dc8146101d557806380f59a651461021657610102565b36610102573373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1534476040516100f8929190611217565b60405180910390a2005b600080fd5b34801561011357600080fd5b5061012e60048036038101906101299190611280565b610365565b60405161013b91906112ee565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190611280565b6103a4565b005b34801561017957600080fd5b5061018261067e565b60405161018f9190611309565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611350565b61068b565b6040516101cc9190611398565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f79190611280565b6106ab565b60405161020d95949392919061144c565b60405180910390f35b34801561022257600080fd5b5061023d600480360381019061023891906114a6565b6107be565b60405161024a9190611398565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190611280565b6107ed565b60405161028b95949392919061144c565b60405180910390f35b3480156102a057600080fd5b506102a96108e8565b6040516102b691906115a4565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611280565b610976565b005b3480156102f457600080fd5b5061030f600480360381019061030a91906116fb565b610c53565b005b34801561031d57600080fd5b50610326610e5d565b6040516103339190611309565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190611280565b610e63565b005b6000818154811061037557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610427906117c7565b60405180910390fd5b806004805490508110610478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046f90611833565b60405180910390fd5b816004818154811061048d5761048c611853565b5b906000526020600020906005020160030160009054906101000a900460ff16156104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e3906118ce565b60405180910390fd5b60006004848154811061050257610501611853565b5b906000526020600020906005020190506003600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166105af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a69061193a565b60405180910390fd5b60018160040160008282546105c49190611989565b9250508190555060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550833373ffffffffffffffffffffffffffffffffffffffff167fc423fd18c78c483f167229efa90b29abe30eed1425ab9cb40441f6555650eca860405160405180910390a350505050565b6000600480549050905090565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060606000806000600487815481106106c9576106c8611853565b5b906000526020600020906005020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010154826002018360030160009054906101000a900460ff16846004015482805461072a906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610756906119ec565b80156107a35780601f10610778576101008083540402835291602001916107a3565b820191906000526020600020905b81548152906001019060200180831161078657829003601f168201915b50505050509250955095509550955095505091939590929450565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600481815481106107fd57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201805461084c906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610878906119ec565b80156108c55780601f1061089a576101008083540402835291602001916108c5565b820191906000526020600020905b8154815290600101906020018083116108a857829003601f168201915b5050505050908060030160009054906101000a900460ff16908060040154905085565b6060600080548060200260200160405190810160405280929190818152602001828054801561096c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610922575b5050505050905090565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f9906117c7565b60405180910390fd5b806004805490508110610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190611833565b60405180910390fd5b8160048181548110610a5f57610a5e611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906118ce565b60405180910390fd5b826003600082815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490611a6a565b60405180910390fd5b600060048581548110610b7357610b72611853565b5b906000526020600020906005020190506001816004016000828254610b989190611a8a565b9250508190555060016003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550843373ffffffffffffffffffffffffffffffffffffffff167f52a3954c699324c8e90e7e2f7cb9f57cd61af1902197bafcc5085b6c2a57b82360405160405180910390a35050505050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd6906117c7565b60405180910390fd5b6000600480549050905060046040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020016000151581526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190610dc292919061115b565b5060608201518160030160006101000a81548160ff0219169083151502179055506080820151816004015550508373ffffffffffffffffffffffffffffffffffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f52e5c631bb2fd786d6b1c26f68548e07c61d087bf325770dd88d072cf0a5e8b08686604051610e4f929190611ae0565b60405180910390a450505050565b60025481565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906117c7565b60405180910390fd5b806004805490508110610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611833565b60405180910390fd5b8160048181548110610f4c57610f4b611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906118ce565b60405180910390fd5b600060048481548110610fc157610fc0611853565b5b906000526020600020906005020190506002548160040154101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190611b5c565b60405180910390fd5b60018160030160006101000a81548160ff02191690831515021790555060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682600101548360020160405161108a9190611c1b565b60006040518083038185875af1925050503d80600081146110c7576040519150601f19603f3d011682016040523d82523d6000602084013e6110cc565b606091505b5050905080611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790611c7e565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167f5445f318f4f5fcfb66592e68e0cc5822aa15664039bd5f0ffde24c5a8142b1ac60405160405180910390a35050505050565b828054611167906119ec565b90600052602060002090601f01602090048101928261118957600085556111d0565b82601f106111a257805160ff19168380011785556111d0565b828001600101855582156111d0579182015b828111156111cf5782518255916020019190600101906111b4565b5b5090506111dd91906111e1565b5090565b5b808211156111fa5760008160009055506001016111e2565b5090565b6000819050919050565b611211816111fe565b82525050565b600060408201905061122c6000830185611208565b6112396020830184611208565b9392505050565b6000604051905090565b600080fd5b600080fd5b61125d816111fe565b811461126857600080fd5b50565b60008135905061127a81611254565b92915050565b6000602082840312156112965761129561124a565b5b60006112a48482850161126b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112d8826112ad565b9050919050565b6112e8816112cd565b82525050565b600060208201905061130360008301846112df565b92915050565b600060208201905061131e6000830184611208565b92915050565b61132d816112cd565b811461133857600080fd5b50565b60008135905061134a81611324565b92915050565b6000602082840312156113665761136561124a565b5b60006113748482850161133b565b91505092915050565b60008115159050919050565b6113928161137d565b82525050565b60006020820190506113ad6000830184611389565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113ed5780820151818401526020810190506113d2565b838111156113fc576000848401525b50505050565b6000601f19601f8301169050919050565b600061141e826113b3565b61142881856113be565b93506114388185602086016113cf565b61144181611402565b840191505092915050565b600060a08201905061146160008301886112df565b61146e6020830187611208565b81810360408301526114808186611413565b905061148f6060830185611389565b61149c6080830184611208565b9695505050505050565b600080604083850312156114bd576114bc61124a565b5b60006114cb8582860161126b565b92505060206114dc8582860161133b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61151b816112cd565b82525050565b600061152d8383611512565b60208301905092915050565b6000602082019050919050565b6000611551826114e6565b61155b81856114f1565b935061156683611502565b8060005b8381101561159757815161157e8882611521565b975061158983611539565b92505060018101905061156a565b5085935050505092915050565b600060208201905081810360008301526115be8184611546565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61160882611402565b810181811067ffffffffffffffff82111715611627576116266115d0565b5b80604052505050565b600061163a611240565b905061164682826115ff565b919050565b600067ffffffffffffffff821115611666576116656115d0565b5b61166f82611402565b9050602081019050919050565b82818337600083830152505050565b600061169e6116998461164b565b611630565b9050828152602081018484840111156116ba576116b96115cb565b5b6116c584828561167c565b509392505050565b600082601f8301126116e2576116e16115c6565b5b81356116f284826020860161168b565b91505092915050565b6000806000606084860312156117145761171361124a565b5b60006117228682870161133b565b93505060206117338682870161126b565b925050604084013567ffffffffffffffff8111156117545761175361124f565b5b611760868287016116cd565b9150509250925092565b600082825260208201905092915050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006117b160098361176a565b91506117bc8261177b565b602082019050919050565b600060208201905081810360008301526117e0816117a4565b9050919050565b7f747820646f6573206e6f74206578697374000000000000000000000000000000600082015250565b600061181d60118361176a565b9150611828826117e7565b602082019050919050565b6000602082019050818103600083015261184c81611810565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f747820616c726561647920657865637574656400000000000000000000000000600082015250565b60006118b860138361176a565b91506118c382611882565b602082019050919050565b600060208201905081810360008301526118e7816118ab565b9050919050565b7f7478206e6f7420636f6e6669726d656400000000000000000000000000000000600082015250565b600061192460108361176a565b915061192f826118ee565b602082019050919050565b6000602082019050818103600083015261195381611917565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611994826111fe565b915061199f836111fe565b9250828210156119b2576119b161195a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a0457607f821691505b60208210811415611a1857611a176119bd565b5b50919050565b7f747820616c726561647920636f6e6669726d6564000000000000000000000000600082015250565b6000611a5460148361176a565b9150611a5f82611a1e565b602082019050919050565b60006020820190508181036000830152611a8381611a47565b9050919050565b6000611a95826111fe565b9150611aa0836111fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ad557611ad461195a565b5b828201905092915050565b6000604082019050611af56000830185611208565b8181036020830152611b078184611413565b90509392505050565b7f63616e6e6f742065786563757465207478000000000000000000000000000000600082015250565b6000611b4660118361176a565b9150611b5182611b10565b602082019050919050565b60006020820190508181036000830152611b7581611b39565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611ba9816119ec565b611bb38186611b7c565b94506001821660008114611bce5760018114611bdf57611c12565b60ff19831686528186019350611c12565b611be885611b87565b60005b83811015611c0a57815481890152600182019150602081019050611beb565b838801955050505b50505092915050565b6000611c278284611b9c565b915081905092915050565b7f7478206661696c65640000000000000000000000000000000000000000000000600082015250565b6000611c6860098361176a565b9150611c7382611c32565b602082019050919050565b60006020820190508181036000830152611c9781611c5b565b905091905056fea2646970667358221220dde80845922e96b3f6246809411eb89d18ac65e5e05e949ff93edfb8b1b2dfd964736f6c63430008090033","abi":[{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256","name":"_numConfirmationsRequired","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"}],"name":"ConfirmationRevocation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"}],"name":"ExecuteTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"}],"name":"TxConfirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"txIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TxSubmission","type":"event"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"confirmTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"executeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"getTransaction","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint256","name":"numConfirmations","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransactionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"isConfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numConfirmationsRequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txIndex","type":"uint256"}],"name":"revokeConfirmation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"submitTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint256","name":"numConfirmations","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]} \ No newline at end of file diff --git a/multisig-wallet/deployments/tenderly_3/Token.json b/multisig-wallet/deployments/tenderly_3/Token.json new file mode 100644 index 0000000..53391ef --- /dev/null +++ b/multisig-wallet/deployments/tenderly_3/Token.json @@ -0,0 +1 @@ +{"metadata":"{\"compiler\":{\"version\":\"0.8.9\"},\"sources\":{\"contracts/Token.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity >=0.5.0 <0.9.0;\\n\\nlibrary Balances {\\n function move(\\n mapping(address => uint256) storage balances,\\n address from,\\n address to,\\n uint amount\\n ) internal {\\n require(balances[from] >= amount, \\\"Not enough balance\\\");\\n require(balances[to] + amount >= balances[to], \\\"Balance Overflow\\\");\\n balances[from] -= amount;\\n balances[to] += amount;\\n }\\n}\\n\\ncontract Token {\\n mapping(address => uint256) balances;\\n using Balances for *;\\n mapping(address => mapping(address => uint256)) allowed;\\n uint32 TokensPerEther = 20;\\n\\n event Transfer(address from, address to, uint amount);\\n event Approval(address owner, address spender, uint amount);\\n\\n function transfer(address to, uint amount) external returns (bool success) {\\n balances.move(msg.sender, to, amount);\\n emit Transfer(msg.sender, to, amount);\\n return true;\\n }\\n\\n function stake() public payable {\\n uint256 tokens = msg.value * TokensPerEther;\\n balances[msg.sender] += tokens;\\n }\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint amount\\n ) external returns (bool success) {\\n require(allowed[from][msg.sender] >= amount, \\\"Not enough allowance\\\");\\n allowed[from][msg.sender] -= amount;\\n balances.move(from, to, amount);\\n emit Transfer(from, to, amount);\\n return true;\\n }\\n\\n function approve(address spender, uint tokens)\\n external\\n returns (bool success)\\n {\\n require(\\n allowed[msg.sender][spender] == 0,\\n \\\"Has allowance, can't approve more\\\"\\n );\\n allowed[msg.sender][spender] = tokens;\\n emit Approval(msg.sender, spender, tokens);\\n return true;\\n }\\n\\n function balanceOf(address tokenOwner)\\n external\\n view\\n returns (uint balance)\\n {\\n return balances[tokenOwner];\\n }\\n}\\n\"}}}","address":"0x1Fb6c0d9248c929161320317392042C1E79D6aD6","bytecode":"0x60806040526014600260006101000a81548163ffffffff021916908363ffffffff16021790555034801561003257600080fd5b50610cd6806100426000396000f3fe60806040526004361061004a5760003560e01c8063095ea7b31461004f57806323b872dd1461008c5780633a4b66f1146100c957806370a08231146100d3578063a9059cbb14610110575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610840565b61014d565b604051610083919061089b565b60405180910390f35b34801561009857600080fd5b506100b360048036038101906100ae91906108b6565b6102d3565b6040516100c0919061089b565b60405180910390f35b6100d1610485565b005b3480156100df57600080fd5b506100fa60048036038101906100f59190610909565b610505565b6040516101079190610945565b60405180910390f35b34801561011c57600080fd5b5061013760048036038101906101329190610840565b61054d565b604051610144919061089b565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461020d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610204906109e3565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9253384846040516102c193929190610a12565b60405180910390a16001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038b90610a95565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104209190610ae4565b9250508190555061043f84848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848460405161047293929190610a12565b60405180910390a1600190509392505050565b6000600260009054906101000a900463ffffffff1663ffffffff16346104ab9190610b18565b9050806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104fb9190610b72565b9250508190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061056733848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef33848460405161059a93929190610a12565b60405180910390a16001905092915050565b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c14565b60405180910390fd5b8360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054818560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b69190610b72565b10156106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee90610c80565b60405180910390fd5b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107459190610ae4565b92505081905550808460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079a9190610b72565b9250508190555050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107d7826107ac565b9050919050565b6107e7816107cc565b81146107f257600080fd5b50565b600081359050610804816107de565b92915050565b6000819050919050565b61081d8161080a565b811461082857600080fd5b50565b60008135905061083a81610814565b92915050565b60008060408385031215610857576108566107a7565b5b6000610865858286016107f5565b92505060206108768582860161082b565b9150509250929050565b60008115159050919050565b61089581610880565b82525050565b60006020820190506108b0600083018461088c565b92915050565b6000806000606084860312156108cf576108ce6107a7565b5b60006108dd868287016107f5565b93505060206108ee868287016107f5565b92505060406108ff8682870161082b565b9150509250925092565b60006020828403121561091f5761091e6107a7565b5b600061092d848285016107f5565b91505092915050565b61093f8161080a565b82525050565b600060208201905061095a6000830184610936565b92915050565b600082825260208201905092915050565b7f48617320616c6c6f77616e63652c2063616e277420617070726f7665206d6f7260008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006109cd602183610960565b91506109d882610971565b604082019050919050565b600060208201905081810360008301526109fc816109c0565b9050919050565b610a0c816107cc565b82525050565b6000606082019050610a276000830186610a03565b610a346020830185610a03565b610a416040830184610936565b949350505050565b7f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000600082015250565b6000610a7f601483610960565b9150610a8a82610a49565b602082019050919050565b60006020820190508181036000830152610aae81610a72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610aef8261080a565b9150610afa8361080a565b925082821015610b0d57610b0c610ab5565b5b828203905092915050565b6000610b238261080a565b9150610b2e8361080a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610b6757610b66610ab5565b5b828202905092915050565b6000610b7d8261080a565b9150610b888361080a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610bbd57610bbc610ab5565b5b828201905092915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000610bfe601283610960565b9150610c0982610bc8565b602082019050919050565b60006020820190508181036000830152610c2d81610bf1565b9050919050565b7f42616c616e6365204f766572666c6f7700000000000000000000000000000000600082015250565b6000610c6a601083610960565b9150610c7582610c34565b602082019050919050565b60006020820190508181036000830152610c9981610c5d565b905091905056fea26469706673582212206a919534a5f2b8939885541b3e3df8b3ee48535823a8cfa339be7dec1a57b61864736f6c63430008090033","deployedBytecode":"0x60806040526004361061004a5760003560e01c8063095ea7b31461004f57806323b872dd1461008c5780633a4b66f1146100c957806370a08231146100d3578063a9059cbb14610110575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610840565b61014d565b604051610083919061089b565b60405180910390f35b34801561009857600080fd5b506100b360048036038101906100ae91906108b6565b6102d3565b6040516100c0919061089b565b60405180910390f35b6100d1610485565b005b3480156100df57600080fd5b506100fa60048036038101906100f59190610909565b610505565b6040516101079190610945565b60405180910390f35b34801561011c57600080fd5b5061013760048036038101906101329190610840565b61054d565b604051610144919061089b565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461020d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610204906109e3565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9253384846040516102c193929190610a12565b60405180910390a16001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038b90610a95565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104209190610ae4565b9250508190555061043f84848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848460405161047293929190610a12565b60405180910390a1600190509392505050565b6000600260009054906101000a900463ffffffff1663ffffffff16346104ab9190610b18565b9050806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104fb9190610b72565b9250508190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061056733848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef33848460405161059a93929190610a12565b60405180910390a16001905092915050565b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c14565b60405180910390fd5b8360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054818560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b69190610b72565b10156106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee90610c80565b60405180910390fd5b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107459190610ae4565b92505081905550808460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079a9190610b72565b9250508190555050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107d7826107ac565b9050919050565b6107e7816107cc565b81146107f257600080fd5b50565b600081359050610804816107de565b92915050565b6000819050919050565b61081d8161080a565b811461082857600080fd5b50565b60008135905061083a81610814565b92915050565b60008060408385031215610857576108566107a7565b5b6000610865858286016107f5565b92505060206108768582860161082b565b9150509250929050565b60008115159050919050565b61089581610880565b82525050565b60006020820190506108b0600083018461088c565b92915050565b6000806000606084860312156108cf576108ce6107a7565b5b60006108dd868287016107f5565b93505060206108ee868287016107f5565b92505060406108ff8682870161082b565b9150509250925092565b60006020828403121561091f5761091e6107a7565b5b600061092d848285016107f5565b91505092915050565b61093f8161080a565b82525050565b600060208201905061095a6000830184610936565b92915050565b600082825260208201905092915050565b7f48617320616c6c6f77616e63652c2063616e277420617070726f7665206d6f7260008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006109cd602183610960565b91506109d882610971565b604082019050919050565b600060208201905081810360008301526109fc816109c0565b9050919050565b610a0c816107cc565b82525050565b6000606082019050610a276000830186610a03565b610a346020830185610a03565b610a416040830184610936565b949350505050565b7f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000600082015250565b6000610a7f601483610960565b9150610a8a82610a49565b602082019050919050565b60006020820190508181036000830152610aae81610a72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610aef8261080a565b9150610afa8361080a565b925082821015610b0d57610b0c610ab5565b5b828203905092915050565b6000610b238261080a565b9150610b2e8361080a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610b6757610b66610ab5565b5b828202905092915050565b6000610b7d8261080a565b9150610b888361080a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610bbd57610bbc610ab5565b5b828201905092915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000610bfe601283610960565b9150610c0982610bc8565b602082019050919050565b60006020820190508181036000830152610c2d81610bf1565b9050919050565b7f42616c616e6365204f766572666c6f7700000000000000000000000000000000600082015250565b6000610c6a601083610960565b9150610c7582610c34565b602082019050919050565b60006020820190508181036000830152610c9981610c5d565b905091905056fea26469706673582212206a919534a5f2b8939885541b3e3df8b3ee48535823a8cfa339be7dec1a57b61864736f6c63430008090033","abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]} \ No newline at end of file diff --git a/multisig-wallet/hardhat.config.ts b/multisig-wallet/hardhat.config.ts new file mode 100644 index 0000000..822ced1 --- /dev/null +++ b/multisig-wallet/hardhat.config.ts @@ -0,0 +1,44 @@ +import { HardhatUserConfig } from "hardhat/config"; +import "@nomicfoundation/hardhat-toolbox"; +import * as dotenv from "dotenv"; +import * as tdly from "@tenderly/hardhat-tenderly"; +import { tenderlyNetwork } from "hardhat"; +import { readFileSync } from "fs"; +import { Infra as ForkInfra } from "./lib/api/t-forks-clean-recreate"; + +tdly.setup({ automaticVerifications: true }); + +const loadInfra = () => + JSON.parse(readFileSync("infra.json").toString()) as unknown as ForkInfra; + +dotenv.config(); + +const infra = loadInfra(); +const fork = infra.fork; + +const ACCOUNTS = [ + process.env.ROPSTEN_PRIVATE_KEY_1 || "", + process.env.ROPSTEN_PRIVATE_KEY_2 || "", + process.env.ROPSTEN_PRIVATE_KEY_3 || "", +]; + +const config: HardhatUserConfig = { + solidity: "0.8.9", + networks: { + ropsten: { + url: process.env.ROPSTEN_URL, + accounts: ACCOUNTS, + }, + tenderly: { + url: fork?.url || "", + chainId: fork?.chainId, + }, + }, + tenderly: { + project: process.env.TENDERLY_PROJECT_SLUG || "", + username: process.env.TENDERLY_USERNAME || "", + privateVerification: true, + }, +}; + +export default config; diff --git a/multisig-wallet/infra.json b/multisig-wallet/infra.json new file mode 100644 index 0000000..0ce04ff --- /dev/null +++ b/multisig-wallet/infra.json @@ -0,0 +1,8 @@ +{ + "fork": { + "name": "???", + "id": "99aca64d-c20c-42c6-af1b-a1c16c2771ec", + "url": "https://rpc.tenderly.co/fork/99aca64d-c20c-42c6-af1b-a1c16c2771ec", + "chainId": 3 + } +} \ No newline at end of file diff --git a/multisig-wallet/lib/api/t-forks-clean-recreate.ts b/multisig-wallet/lib/api/t-forks-clean-recreate.ts new file mode 100644 index 0000000..346c8af --- /dev/null +++ b/multisig-wallet/lib/api/t-forks-clean-recreate.ts @@ -0,0 +1,54 @@ +import { readFileSync, writeFileSync } from "fs"; +import { tenderlyApi } from "./tenderly-api"; +import * as dotenv from "dotenv"; + +const { aTenderlyFork, removeFork } = tenderlyApi( + process.env.TENDERLY_PROJECT_SLUG || "", + process.env.TENDERLY_USERNAME || "", + process.env.TENDERLY_ACCESS_KEY || "" +); + +export type Infra = { + fork?: { + name: string; + id: string; + url: string; + chainId: number; + }; +}; + +(async () => { + const currentInfra = JSON.parse( + readFileSync("infra.json").toString() + ) as unknown as Infra; + + if (currentInfra.fork) { + await removeFork(currentInfra.fork.id).catch((err) => { + console.error(err); + }); + } + + const fork = await aTenderlyFork({ + network_id: currentInfra.fork?.chainId.toString() || "3", + }); + + console.log("Created the fork", fork.id); + + writeFileSync( + "infra.json", + JSON.stringify( + { + fork: { + ...currentInfra.fork, + name: "???", + id: fork.id, + url: `https://rpc.tenderly.co/fork/${fork.id}`, + }, + }, + null, + 2 + ) + ); + + writeFileSync("deployments.json", JSON.stringify({ latest: [] }, null, 2)); +})().catch(console.error); diff --git a/multisig-wallet/lib/api/tenderly-api.ts b/multisig-wallet/lib/api/tenderly-api.ts new file mode 100644 index 0000000..e65c687 --- /dev/null +++ b/multisig-wallet/lib/api/tenderly-api.ts @@ -0,0 +1,99 @@ +import { JsonRpcProvider } from "@ethersproject/providers"; +import axios, { AxiosResponse } from "axios"; + +type TenderlyForkRequest = { + block_number?: number; + network_id: string; + transaction_index?: number; + initial_balance?: number; + chain_config?: { + chain_id: number; + homestead_block: number; + dao_fork_support: boolean; + eip_150_block: number; + eip_150_hash: string; + eip_155_block: number; + eip_158_block: number; + byzantium_block: number; + constantinople_block: number; + petersburg_block: number; + istanbul_block: number; + berlin_block: number; + }; +}; + +export type TenderlyForkProvider = { + provider: JsonRpcProvider; + id: number; + blockNumber: number; + /** + * map from address to given address' balance + */ + removeFork: () => Promise>; +}; + +export const tenderlyApi = ( + projectSlug: string, + username: string, + accessKey: string +) => { + const somewhereInTenderly = (where: string = projectSlug || "") => + axios.create({ + baseURL: `https://api.tenderly.co/api/v1/${where}`, + headers: { + "X-Access-Key": accessKey || "", + "Content-Type": "application/json", + }, + }); + + const inProject = (...path: any[]) => + [`account/${username}/project/${projectSlug}`, ...path] + .join("/") + .replace("//", ""); + + const anAxiosOnTenderly = () => somewhereInTenderly(""); + const axiosOnTenderly = anAxiosOnTenderly(); + + // todo: cache these poor axioses + const axiosInProject = somewhereInTenderly(inProject()); + + const removeFork = async (forkId: string) => { + console.log("Removing test fork", forkId); + return await axiosOnTenderly.delete(inProject(`fork/${forkId}`)); + }; + + async function aTenderlyFork( + fork: TenderlyForkRequest + ): Promise { + const forkResponse = await axiosInProject.post(`/fork`, fork); + const forkId = forkResponse.data.root_transaction.fork_id; + + const forkProviderUrl = `https://rpc.tenderly.co/fork/${forkId}`; + const forkProvider = new JsonRpcProvider(forkProviderUrl); + + const bn = ( + forkResponse.data.root_transaction.receipt.blockNumber as string + ).replace("0x", ""); + const blockNumber: number = Number.parseInt(bn, 16); + + console.info( + `\nForked with fork id ${forkId} at block number ${blockNumber}` + ); + + console.info(`https://dashboard.tenderly.co/${inProject("fork", forkId)}`); + + console.info("JSON-RPC:", forkProviderUrl); + + return { + provider: forkProvider, + blockNumber, + id: forkId, + removeFork: () => removeFork(forkId), + }; + } + + return { + aTenderlyFork, + removeFork, + }; +}; diff --git a/multisig-wallet/lib/deployment-utils.ts b/multisig-wallet/lib/deployment-utils.ts new file mode 100644 index 0000000..2d54368 --- /dev/null +++ b/multisig-wallet/lib/deployment-utils.ts @@ -0,0 +1,33 @@ +import { Contract } from "ethers"; +import { readFileSync, writeFileSync } from "fs"; + +export type DeploymentRecord = { + name: string; + address: string; + network: string; + timestamp?: Date; +}; + +function readDeployments() { + type Deployments = Record; + const deployments = JSON.parse( + readFileSync("deployments.json", "utf8").toString() + ) as unknown as Deployments; + return deployments; +} + +export function deployed(deployment: DeploymentRecord, tag: string = "latest") { + if (findDeployment(deployed.name, deployment.network, tag)) { + return; + } + const deployments = readDeployments(); + deployment.timestamp = new Date(); + deployments[tag] = [...deployments[tag], deployment]; + writeFileSync("deployments.json", JSON.stringify(deployments, null, 2)); +} + +export function findDeployment(name: string, network: string, tag = "latest") { + return readDeployments()[tag].filter( + (d) => d.name === name && d.network == network + )[0]; +} diff --git a/multisig-wallet/package.json b/multisig-wallet/package.json new file mode 100644 index 0000000..b3a5512 --- /dev/null +++ b/multisig-wallet/package.json @@ -0,0 +1,24 @@ +{ + "scripts": { + "fork:restart": "ts-node ./lib/api/t-forks-clean-recreate.ts", + "deploy:ropsten": "npx hardhat run scripts/token-deploy.ts --network ropsten && npx hardhat run scripts/multisig-deploy.ts --network ropsten", + "deploy:tenderly-fork": "npx hardhat run scripts/token-deploy.ts --network tenderly && npx hardhat run scripts/multisig-deploy.ts --network tenderly", + "multisig-play:ropsten": "npx hardhat run scripts/multisig-play.ts --network ropsten", + "multisig-play:tenderly-fork": "npx hardhat run scripts/multisig-play.ts --network tenderly", + "actions:run:local": "ts-node web3-actions-local/multisig-run-local.ts" + }, + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "^1.0.2", + "@tenderly/actions-test": "^0.0.9", + "@tenderly/hardhat-tenderly": "^1.1.4", + "@types/node": "^18.6.3", + "axios": "^0.27.2", + "chai": "^4.3.6", + "dotenv": "^16.0.1", + "ethers": "^5.6.9", + "hardhat": "^2.10.1", + "mocha": "^10.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.7.4" + } +} diff --git a/multisig-wallet/scripts/deploy-lock.ts b/multisig-wallet/scripts/deploy-lock.ts new file mode 100644 index 0000000..90e8908 --- /dev/null +++ b/multisig-wallet/scripts/deploy-lock.ts @@ -0,0 +1,23 @@ +import { ethers } from "hardhat"; + +async function main() { + const currentTimestampInSeconds = Math.round(Date.now() / 1000); + const ONE_YEAR_IN_SECS = 365 * 24 * 60 * 60; + const unlockTime = currentTimestampInSeconds + ONE_YEAR_IN_SECS; + + const lockedAmount = ethers.utils.parseEther("1"); + + const Lock = await ethers.getContractFactory("Lock"); + const lock = await Lock.deploy(unlockTime, { value: lockedAmount }); + + await lock.deployed(); + + console.log("Lock with 1 ETH deployed to:", lock.address); +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/multisig-wallet/scripts/multisig-deploy.ts b/multisig-wallet/scripts/multisig-deploy.ts new file mode 100644 index 0000000..6f83e34 --- /dev/null +++ b/multisig-wallet/scripts/multisig-deploy.ts @@ -0,0 +1,29 @@ +import { ethers, network } from "hardhat"; +import { deployed, findDeployment } from "../lib/deployment-utils"; + +async function main() { + const foundMultiSig = findDeployment("MultiSigWallet", network.name); + if (!!foundMultiSig) { + console.log("Multisig wallet already deployed", foundMultiSig); + return; + } + + const owners = (await ethers.provider.listAccounts()).slice(0, 3); + // deploy the contract MultiSigWallet + const MultiSigWallet = await ethers.getContractFactory("MultiSigWallet"); + const multiSigWallet = await MultiSigWallet.deploy(owners, 1); + await multiSigWallet.deployed(); + deployed({ + name: "MultiSigWallet", + address: multiSigWallet.address, + network: network.name, + }); + console.log("MultiSigWallet deployed to:", multiSigWallet.address); +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/multisig-wallet/scripts/multisig-play.ts b/multisig-wallet/scripts/multisig-play.ts new file mode 100644 index 0000000..f9e873f --- /dev/null +++ b/multisig-wallet/scripts/multisig-play.ts @@ -0,0 +1,72 @@ +import { BigNumber, BytesLike } from "ethers"; +import { ethers, network } from "hardhat"; +import { findDeployment } from "../lib/deployment-utils"; + +async function main() { + const deployedMultiSig = findDeployment("MultiSigWallet", network.name); + const deployedToken = findDeployment("Token", network.name); + if (!deployedMultiSig) { + console.log("Multi Sig not deployed, can't play, run multisig-deploy.ts"); + return; + } + console.log({ deployedMultiSig, deployedToken }); + const multisigWallet = await ethers.getContractAt( + "MultiSigWallet", + deployedMultiSig.address, + ethers.provider.getSigner("0xf7ddedc66b1d482e5c38e4730b3357d32411e5dd") + ); + + console.log("Default signer", await ethers.provider.getSigner().getAddress()); + + const token = await ethers.getContractAt("Token", deployedToken.address); + + const tx = await token.populateTransaction.stake({ + value: ethers.utils.parseEther("1.6"), + }); + + console.log("Internal TX", tx); + + const msig = await multisigWallet.submitTransaction( + token.address, + (tx.value as BigNumber).toHexString(), + tx.data as BytesLike + ); + + const reciept = await msig.wait(); + + const subm = reciept.events?.filter((e) => e.event == "TxSubmission"); + // @ts-ignore + const latestTx = (subm[0].args[1] as BigNumber).toNumber(); + console.log("Sumitted, going for confirmation", reciept.transactionHash); + // confirm it + const [first, second, third] = [ + "0xF7dDedc66B1d482e5C38E4730B3357d32411e5Dd", + "0x3a55A1e7cf75dD8374de8463530dF721816F1411", + "0xeDed260BFDCDf6Dc0f564b3e4AB5CeA805bBA10B", + ].map((addr) => ethers.provider.getSigner(addr)); + + const conf1tx = await multisigWallet + .connect(second) + .confirmTransaction(latestTx); + await conf1tx.wait(); + console.log("Confirmed 1"); + + const conf2tx = await multisigWallet + .connect(third) + .confirmTransaction(latestTx); + await conf2tx.wait(); + console.log("Confirmed 2"); + + const execTx = await multisigWallet + .connect(first) + .executeTransaction(latestTx); + await execTx.wait(); + console.log("Executed"); +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/multisig-wallet/scripts/token-deploy.ts b/multisig-wallet/scripts/token-deploy.ts new file mode 100644 index 0000000..97df56f --- /dev/null +++ b/multisig-wallet/scripts/token-deploy.ts @@ -0,0 +1,32 @@ +import { ethers, network } from "hardhat"; +import { deployed, findDeployment } from "../lib/deployment-utils"; + +async function main() { + const foundToken = findDeployment("Token", network.name); + + if (!!foundToken) { + console.log( + "Token already deployed", + foundToken.network, + foundToken.address + ); + return; + } + + const Token = await ethers.getContractFactory("Token"); + const token = await Token.deploy(); + + await token.deployed(); + console.log("Token deployed to:", token.address); + deployed({ + name: "Token", + address: token.address, + network: network.name, + }); +} +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/multisig-wallet/tenderly.yaml b/multisig-wallet/tenderly.yaml new file mode 100644 index 0000000..d9b3448 --- /dev/null +++ b/multisig-wallet/tenderly.yaml @@ -0,0 +1,53 @@ +account_id: "" +project_slug: "" +actions: + # TODO: replace with prper values + TENDERLY_USERNAME/TENDERLY_PROJECT_SLUG: + runtime: v1 + sources: web3-actions + specs: + multisig: + description: Acts when multisig event takes place + function: multisig:onAnEvent + trigger: + type: transaction + transaction: + status: + - mined + filters: + - network: 3 + eventEmitted: + name: TxSubmission + contract: + address: 0x418ebb95eaa40c119408143056cad984c6129d45 + - network: 3 + eventEmitted: + name: TxConfirmation + contract: + address: 0x418ebb95eaa40c119408143056cad984c6129d45 + - network: 3 + eventEmitted: + name: ConfirmationRevocation + contract: + address: 0x418ebb95eaa40c119408143056cad984c6129d45 + - network: 3 + eventEmitted: + name: ExecuteTransaction + contract: + address: 0x418ebb95eaa40c119408143056cad984c6129d45 + multisig-webhook: + description: Via Webhook + function: multisig:onHook + trigger: + type: webhook + wehbook: + authenticated: true + multisig-periodic: + description: Reminders + function: multisig:everyDay + trigger: + type: periodic + periodic: + # Supported values for interval are + # {5m, 10m, 15m, 30m, 1h, 3h, 6h, 12h, 1d} + interval: 5m diff --git a/multisig-wallet/test/multisig.ts b/multisig-wallet/test/multisig.ts new file mode 100644 index 0000000..bf94a6d --- /dev/null +++ b/multisig-wallet/test/multisig.ts @@ -0,0 +1,29 @@ +import { time, loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; +import { expect } from "chai"; +import { ethers } from "hardhat"; + +import { MultiSigWallet } from "../typechain-types"; +const multisigAddress = "0xb071fef2e0f6fbe5ea3267205655d038af22b903"; + +const attach = async () => { + const multisigWallet = await ethers.getContractAt( + "MultiSigWallet", + multisigAddress + ); + + return multisigWallet; +}; + +describe("multisig scenario", async () => { + let multisigWallet: MultiSigWallet; + + before(async () => { + multisigWallet = await loadFixture(attach); + }); + + it("", async () => { + console.log("Test"); + expect(await multisigWallet.getOwners()).to.length(3, "!3 owners"); + }); +}); diff --git a/multisig-wallet/tsconfig.json b/multisig-wallet/tsconfig.json new file mode 100644 index 0000000..0885922 --- /dev/null +++ b/multisig-wallet/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "module": "commonjs", + "outDir": "./dist", + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "es2020" + }, + "exclude": [ + "actions" + ] +} \ No newline at end of file diff --git a/multisig-wallet/web3-actions-local/multisig-run-local.ts b/multisig-wallet/web3-actions-local/multisig-run-local.ts new file mode 100644 index 0000000..5343f5d --- /dev/null +++ b/multisig-wallet/web3-actions-local/multisig-run-local.ts @@ -0,0 +1,51 @@ +import { + TestPeriodicEvent, + TestRuntime, + TestWebhookEvent, +} from "@tenderly/actions-test"; +import { everyDay, onAnEvent, onHook } from "../web3-actions/multisig"; + +import * as dotenv from "dotenv"; +dotenv.config(); + +/* + * This is the local run of Action Functions. + * TestRuntime is a helper class that allows you to run Action Functions locally. + **/ +const main = async () => { + const testRuntime = new TestRuntime(); + + testRuntime.context.secrets.put( + "multisig.DISCORD_URL", + process.env.DISCORD_URL || "" + ); + + testRuntime.context.secrets.put( + "TENDERLY_ACCESS_KEY", + process.env.TENDERLY_ACCESS_KEY || "" + ); + + await testRuntime.execute( + onAnEvent, + require("./payload/payload-submit.json") + ); + + await testRuntime.execute( + onAnEvent, + require("./payload/payload-confirm.json") + ); + + await testRuntime.execute( + onHook, + new TestWebhookEvent({ txId: 2, who: "reminder0x" }) + ); + + await testRuntime.execute(everyDay, new TestPeriodicEvent()); + + await testRuntime.execute( + onAnEvent, + require("./payload/payload-execute.json") + ); +}; + +(async () => await main())(); diff --git a/multisig-wallet/web3-actions-local/payload/payload-confirm.json b/multisig-wallet/web3-actions-local/payload/payload-confirm.json new file mode 100644 index 0000000..3fa944b --- /dev/null +++ b/multisig-wallet/web3-actions-local/payload/payload-confirm.json @@ -0,0 +1,29 @@ +{ + "network": "3", + "blockHash": "0x84f3ec6712b02ba288d40514ba4be00e04a96ca20db9881dfaf990e6dbb7e8d8", + "blockNumber": 12766262, + "hash": "0xad91a78d2f544371237ec63d5a47f2d6775784266eeb81ed7ea304d1f146c46c", + "from": "0x3a55A1e7cf75dD8374de8463530dF721816F1411", + "to": "0x418EBb95EAa40c119408143056CaD984C6129d45", + "logs": [ + { + "address": "0x418EBb95EAa40c119408143056CaD984C6129d45", + "topics": [ + "0x52a3954c699324c8e90e7e2f7cb9f57cd61af1902197bafcc5085b6c2a57b823", + "0x0000000000000000000000003a55a1e7cf75dd8374de8463530df721816f1411", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x" + } + ], + "input": "0xc01a8c840000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0", + "nonce": "0x329", + "gas": "0x12565", + "gasUsed": "0x12565", + "cumulativeGasUsed": "0x56a97", + "gasPrice": "0x832155e2", + "gasTipCap": "0x832155db", + "gasFeeCap": "0x832155e3", + "alertId": null +} diff --git a/multisig-wallet/web3-actions-local/payload/payload-execute.json b/multisig-wallet/web3-actions-local/payload/payload-execute.json new file mode 100644 index 0000000..81161c8 --- /dev/null +++ b/multisig-wallet/web3-actions-local/payload/payload-execute.json @@ -0,0 +1,29 @@ +{ + "network": "3", + "blockHash": "0xb1f0d051f2deef91cdec639898af1288f5f17d3ace60f34e16e88c86ceac6a40", + "blockNumber": 12766265, + "hash": "0x7faeb8641d16ad5179ed0d4fb7b478311b85ab41e186c8180d23357f5e9a675f", + "from": "0xF7dDedc66B1d482e5C38E4730B3357d32411e5Dd", + "to": "0x418EBb95EAa40c119408143056CaD984C6129d45", + "logs": [ + { + "address": "0x418EBb95EAa40c119408143056CaD984C6129d45", + "topics": [ + "0x5445f318f4f5fcfb66592e68e0cc5822aa15664039bd5f0ffde24c5a8142b1ac", + "0x000000000000000000000000f7ddedc66b1d482e5c38e4730b3357d32411e5dd", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x" + } + ], + "input": "0xee22610b0000000000000000000000000000000000000000000000000000000000000000", + "value": "0x0", + "nonce": "0x1e6", + "gas": "0x11067", + "gasUsed": "0x10dc6", + "cumulativeGasUsed": "0xe88ce", + "gasPrice": "0x4190aaf1", + "gasTipCap": "0x4190aaea", + "gasFeeCap": "0x4190aaf2", + "alertId": null +} diff --git a/multisig-wallet/web3-actions-local/payload/payload-submit.json b/multisig-wallet/web3-actions-local/payload/payload-submit.json new file mode 100644 index 0000000..69dffb8 --- /dev/null +++ b/multisig-wallet/web3-actions-local/payload/payload-submit.json @@ -0,0 +1,30 @@ +{ + "network": "3", + "blockHash": "0xdd524d760f70a42fe940560ef6732b3692ace41ad38a6c516c6681ca19ff4a36", + "blockNumber": 12773572, + "hash": "0xd4f72faf1421f5ca96480378ea65565da3602c0f4ad1c61ad46d7cf2a3f29b1d", + "from": "0xF7dDedc66B1d482e5C38E4730B3357d32411e5Dd", + "to": "0x418EBb95EAa40c119408143056CaD984C6129d45", + "logs": [ + { + "address": "0x418EBb95EAa40c119408143056CaD984C6129d45", + "topics": [ + "0x52e5c631bb2fd786d6b1c26f68548e07c61d087bf325770dd88d072cf0a5e8b0", + "0x000000000000000000000000f7ddedc66b1d482e5c38e4730b3357d32411e5dd", + "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x0000000000000000000000004e97c71a44ef1b78a7caee159aa016be53e04c32" + ], + "data": "0x00000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000043a4b66f100000000000000000000000000000000000000000000000000000000" + } + ], + "input": "0xc64274740000000000000000000000004e97c71a44ef1b78a7caee159aa016be53e04c3200000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000043a4b66f100000000000000000000000000000000000000000000000000000000", + "value": "0x0", + "nonce": "0x1f1", + "gas": "0x19e34", + "gasUsed": "0x19e34", + "cumulativeGasUsed": "0x480640", + "gasPrice": "0x3b9aca00", + "gasTipCap": "0x3b9ac9f9", + "gasFeeCap": "0x3b9aca01", + "alertId": null +} diff --git a/multisig-wallet/web3-actions/.gitignore b/multisig-wallet/web3-actions/.gitignore new file mode 100755 index 0000000..2f5b2a0 --- /dev/null +++ b/multisig-wallet/web3-actions/.gitignore @@ -0,0 +1,5 @@ +# Dependency directories +node_modules/ + +# Ignore tsc output +out/**/* diff --git a/multisig-wallet/web3-actions/abi/MultiSigWallet.json b/multisig-wallet/web3-actions/abi/MultiSigWallet.json new file mode 100644 index 0000000..74e76fe --- /dev/null +++ b/multisig-wallet/web3-actions/abi/MultiSigWallet.json @@ -0,0 +1,391 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MultiSigWallet", + "sourceName": "contracts/MultiSigWallet.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address[]", + "name": "_owners", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_numConfirmationsRequired", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "txIndex", + "type": "uint256" + } + ], + "name": "ConfirmationRevocation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "txIndex", + "type": "uint256" + } + ], + "name": "ExecuteTransaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "txIndex", + "type": "uint256" + } + ], + "name": "TxConfirmation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "txIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "TxSubmission", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_txIndex", + "type": "uint256" + } + ], + "name": "confirmTransaction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_txIndex", + "type": "uint256" + } + ], + "name": "executeTransaction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getOwners", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_txIndex", + "type": "uint256" + } + ], + "name": "getTransaction", + "outputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "executed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "numConfirmations", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTransactionCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isConfirmed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isOwner", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numConfirmationsRequired", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "owners", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_txIndex", + "type": "uint256" + } + ], + "name": "revokeConfirmation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "submitTransaction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "transactions", + "outputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "executed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "numConfirmations", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x60806040523480156200001157600080fd5b50604051620025033803806200250383398181016040528101906200003791906200050e565b60008251116200007e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200007590620005d5565b60405180910390fd5b60008111801562000090575081518111155b620000d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c9906200066d565b60405180910390fd5b60005b8251811015620002d5576000838281518110620000f757620000f66200068f565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000174576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016b906200070e565b60405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000204576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001fb9062000780565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080620002cc90620007d1565b915050620000d5565b508060028190555050506200081f565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200034982620002fe565b810181811067ffffffffffffffff821117156200036b576200036a6200030f565b5b80604052505050565b600062000380620002e5565b90506200038e82826200033e565b919050565b600067ffffffffffffffff821115620003b157620003b06200030f565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003f482620003c7565b9050919050565b6200040681620003e7565b81146200041257600080fd5b50565b6000815190506200042681620003fb565b92915050565b6000620004436200043d8462000393565b62000374565b90508083825260208201905060208402830185811115620004695762000468620003c2565b5b835b8181101562000496578062000481888262000415565b8452602084019350506020810190506200046b565b5050509392505050565b600082601f830112620004b857620004b7620002f9565b5b8151620004ca8482602086016200042c565b91505092915050565b6000819050919050565b620004e881620004d3565b8114620004f457600080fd5b50565b6000815190506200050881620004dd565b92915050565b60008060408385031215620005285762000527620002ef565b5b600083015167ffffffffffffffff811115620005495762000548620002f4565b5b6200055785828601620004a0565b92505060206200056a85828601620004f7565b9150509250929050565b600082825260208201905092915050565b7f6f776e6572732072657175697265640000000000000000000000000000000000600082015250565b6000620005bd600f8362000574565b9150620005ca8262000585565b602082019050919050565b60006020820190508181036000830152620005f081620005ae565b9050919050565b7f696e76616c6964206e756d626572206f6620726571756972656420636f6e666960008201527f726d6174696f6e73000000000000000000000000000000000000000000000000602082015250565b60006200065560288362000574565b91506200066282620005f7565b604082019050919050565b60006020820190508181036000830152620006888162000646565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f696e76616c6964206f776e657200000000000000000000000000000000000000600082015250565b6000620006f6600d8362000574565b91506200070382620006be565b602082019050919050565b600060208201905081810360008301526200072981620006e7565b9050919050565b7f6f776e6572206e6f7420756e6971756500000000000000000000000000000000600082015250565b60006200076860108362000574565b9150620007758262000730565b602082019050919050565b600060208201905081810360008301526200079b8162000759565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007de82620004d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620008145762000813620007a2565b5b600182019050919050565b611cd4806200082f6000396000f3fe6080604052600436106100ab5760003560e01c80639ace38c2116100645780639ace38c214610253578063a0e67e2b14610294578063c01a8c84146102bf578063c6427474146102e8578063d0549b8514610311578063ee22610b1461033c57610102565b8063025e7c271461010757806320ea8d86146101445780632e7700f01461016d5780632f54bf6e1461019857806333ea3dc8146101d557806380f59a651461021657610102565b36610102573373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1534476040516100f8929190611217565b60405180910390a2005b600080fd5b34801561011357600080fd5b5061012e60048036038101906101299190611280565b610365565b60405161013b91906112ee565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190611280565b6103a4565b005b34801561017957600080fd5b5061018261067e565b60405161018f9190611309565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611350565b61068b565b6040516101cc9190611398565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f79190611280565b6106ab565b60405161020d95949392919061144c565b60405180910390f35b34801561022257600080fd5b5061023d600480360381019061023891906114a6565b6107be565b60405161024a9190611398565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190611280565b6107ed565b60405161028b95949392919061144c565b60405180910390f35b3480156102a057600080fd5b506102a96108e8565b6040516102b691906115a4565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611280565b610976565b005b3480156102f457600080fd5b5061030f600480360381019061030a91906116fb565b610c53565b005b34801561031d57600080fd5b50610326610e5d565b6040516103339190611309565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190611280565b610e63565b005b6000818154811061037557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610427906117c7565b60405180910390fd5b806004805490508110610478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046f90611833565b60405180910390fd5b816004818154811061048d5761048c611853565b5b906000526020600020906005020160030160009054906101000a900460ff16156104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e3906118ce565b60405180910390fd5b60006004848154811061050257610501611853565b5b906000526020600020906005020190506003600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166105af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a69061193a565b60405180910390fd5b60018160040160008282546105c49190611989565b9250508190555060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550833373ffffffffffffffffffffffffffffffffffffffff167fc423fd18c78c483f167229efa90b29abe30eed1425ab9cb40441f6555650eca860405160405180910390a350505050565b6000600480549050905090565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060606000806000600487815481106106c9576106c8611853565b5b906000526020600020906005020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010154826002018360030160009054906101000a900460ff16846004015482805461072a906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610756906119ec565b80156107a35780601f10610778576101008083540402835291602001916107a3565b820191906000526020600020905b81548152906001019060200180831161078657829003601f168201915b50505050509250955095509550955095505091939590929450565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600481815481106107fd57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201805461084c906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610878906119ec565b80156108c55780601f1061089a576101008083540402835291602001916108c5565b820191906000526020600020905b8154815290600101906020018083116108a857829003601f168201915b5050505050908060030160009054906101000a900460ff16908060040154905085565b6060600080548060200260200160405190810160405280929190818152602001828054801561096c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610922575b5050505050905090565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f9906117c7565b60405180910390fd5b806004805490508110610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190611833565b60405180910390fd5b8160048181548110610a5f57610a5e611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906118ce565b60405180910390fd5b826003600082815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490611a6a565b60405180910390fd5b600060048581548110610b7357610b72611853565b5b906000526020600020906005020190506001816004016000828254610b989190611a8a565b9250508190555060016003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550843373ffffffffffffffffffffffffffffffffffffffff167f52a3954c699324c8e90e7e2f7cb9f57cd61af1902197bafcc5085b6c2a57b82360405160405180910390a35050505050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd6906117c7565b60405180910390fd5b6000600480549050905060046040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020016000151581526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190610dc292919061115b565b5060608201518160030160006101000a81548160ff0219169083151502179055506080820151816004015550508373ffffffffffffffffffffffffffffffffffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f52e5c631bb2fd786d6b1c26f68548e07c61d087bf325770dd88d072cf0a5e8b08686604051610e4f929190611ae0565b60405180910390a450505050565b60025481565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906117c7565b60405180910390fd5b806004805490508110610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611833565b60405180910390fd5b8160048181548110610f4c57610f4b611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906118ce565b60405180910390fd5b600060048481548110610fc157610fc0611853565b5b906000526020600020906005020190506002548160040154101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190611b5c565b60405180910390fd5b60018160030160006101000a81548160ff02191690831515021790555060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682600101548360020160405161108a9190611c1b565b60006040518083038185875af1925050503d80600081146110c7576040519150601f19603f3d011682016040523d82523d6000602084013e6110cc565b606091505b5050905080611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790611c7e565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167f5445f318f4f5fcfb66592e68e0cc5822aa15664039bd5f0ffde24c5a8142b1ac60405160405180910390a35050505050565b828054611167906119ec565b90600052602060002090601f01602090048101928261118957600085556111d0565b82601f106111a257805160ff19168380011785556111d0565b828001600101855582156111d0579182015b828111156111cf5782518255916020019190600101906111b4565b5b5090506111dd91906111e1565b5090565b5b808211156111fa5760008160009055506001016111e2565b5090565b6000819050919050565b611211816111fe565b82525050565b600060408201905061122c6000830185611208565b6112396020830184611208565b9392505050565b6000604051905090565b600080fd5b600080fd5b61125d816111fe565b811461126857600080fd5b50565b60008135905061127a81611254565b92915050565b6000602082840312156112965761129561124a565b5b60006112a48482850161126b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112d8826112ad565b9050919050565b6112e8816112cd565b82525050565b600060208201905061130360008301846112df565b92915050565b600060208201905061131e6000830184611208565b92915050565b61132d816112cd565b811461133857600080fd5b50565b60008135905061134a81611324565b92915050565b6000602082840312156113665761136561124a565b5b60006113748482850161133b565b91505092915050565b60008115159050919050565b6113928161137d565b82525050565b60006020820190506113ad6000830184611389565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113ed5780820151818401526020810190506113d2565b838111156113fc576000848401525b50505050565b6000601f19601f8301169050919050565b600061141e826113b3565b61142881856113be565b93506114388185602086016113cf565b61144181611402565b840191505092915050565b600060a08201905061146160008301886112df565b61146e6020830187611208565b81810360408301526114808186611413565b905061148f6060830185611389565b61149c6080830184611208565b9695505050505050565b600080604083850312156114bd576114bc61124a565b5b60006114cb8582860161126b565b92505060206114dc8582860161133b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61151b816112cd565b82525050565b600061152d8383611512565b60208301905092915050565b6000602082019050919050565b6000611551826114e6565b61155b81856114f1565b935061156683611502565b8060005b8381101561159757815161157e8882611521565b975061158983611539565b92505060018101905061156a565b5085935050505092915050565b600060208201905081810360008301526115be8184611546565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61160882611402565b810181811067ffffffffffffffff82111715611627576116266115d0565b5b80604052505050565b600061163a611240565b905061164682826115ff565b919050565b600067ffffffffffffffff821115611666576116656115d0565b5b61166f82611402565b9050602081019050919050565b82818337600083830152505050565b600061169e6116998461164b565b611630565b9050828152602081018484840111156116ba576116b96115cb565b5b6116c584828561167c565b509392505050565b600082601f8301126116e2576116e16115c6565b5b81356116f284826020860161168b565b91505092915050565b6000806000606084860312156117145761171361124a565b5b60006117228682870161133b565b93505060206117338682870161126b565b925050604084013567ffffffffffffffff8111156117545761175361124f565b5b611760868287016116cd565b9150509250925092565b600082825260208201905092915050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006117b160098361176a565b91506117bc8261177b565b602082019050919050565b600060208201905081810360008301526117e0816117a4565b9050919050565b7f747820646f6573206e6f74206578697374000000000000000000000000000000600082015250565b600061181d60118361176a565b9150611828826117e7565b602082019050919050565b6000602082019050818103600083015261184c81611810565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f747820616c726561647920657865637574656400000000000000000000000000600082015250565b60006118b860138361176a565b91506118c382611882565b602082019050919050565b600060208201905081810360008301526118e7816118ab565b9050919050565b7f7478206e6f7420636f6e6669726d656400000000000000000000000000000000600082015250565b600061192460108361176a565b915061192f826118ee565b602082019050919050565b6000602082019050818103600083015261195381611917565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611994826111fe565b915061199f836111fe565b9250828210156119b2576119b161195a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a0457607f821691505b60208210811415611a1857611a176119bd565b5b50919050565b7f747820616c726561647920636f6e6669726d6564000000000000000000000000600082015250565b6000611a5460148361176a565b9150611a5f82611a1e565b602082019050919050565b60006020820190508181036000830152611a8381611a47565b9050919050565b6000611a95826111fe565b9150611aa0836111fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ad557611ad461195a565b5b828201905092915050565b6000604082019050611af56000830185611208565b8181036020830152611b078184611413565b90509392505050565b7f63616e6e6f742065786563757465207478000000000000000000000000000000600082015250565b6000611b4660118361176a565b9150611b5182611b10565b602082019050919050565b60006020820190508181036000830152611b7581611b39565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611ba9816119ec565b611bb38186611b7c565b94506001821660008114611bce5760018114611bdf57611c12565b60ff19831686528186019350611c12565b611be885611b87565b60005b83811015611c0a57815481890152600182019150602081019050611beb565b838801955050505b50505092915050565b6000611c278284611b9c565b915081905092915050565b7f7478206661696c65640000000000000000000000000000000000000000000000600082015250565b6000611c6860098361176a565b9150611c7382611c32565b602082019050919050565b60006020820190508181036000830152611c9781611c5b565b905091905056fea2646970667358221220dde80845922e96b3f6246809411eb89d18ac65e5e05e949ff93edfb8b1b2dfd964736f6c63430008090033", + "deployedBytecode": "0x6080604052600436106100ab5760003560e01c80639ace38c2116100645780639ace38c214610253578063a0e67e2b14610294578063c01a8c84146102bf578063c6427474146102e8578063d0549b8514610311578063ee22610b1461033c57610102565b8063025e7c271461010757806320ea8d86146101445780632e7700f01461016d5780632f54bf6e1461019857806333ea3dc8146101d557806380f59a651461021657610102565b36610102573373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1534476040516100f8929190611217565b60405180910390a2005b600080fd5b34801561011357600080fd5b5061012e60048036038101906101299190611280565b610365565b60405161013b91906112ee565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190611280565b6103a4565b005b34801561017957600080fd5b5061018261067e565b60405161018f9190611309565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611350565b61068b565b6040516101cc9190611398565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f79190611280565b6106ab565b60405161020d95949392919061144c565b60405180910390f35b34801561022257600080fd5b5061023d600480360381019061023891906114a6565b6107be565b60405161024a9190611398565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190611280565b6107ed565b60405161028b95949392919061144c565b60405180910390f35b3480156102a057600080fd5b506102a96108e8565b6040516102b691906115a4565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611280565b610976565b005b3480156102f457600080fd5b5061030f600480360381019061030a91906116fb565b610c53565b005b34801561031d57600080fd5b50610326610e5d565b6040516103339190611309565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190611280565b610e63565b005b6000818154811061037557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610427906117c7565b60405180910390fd5b806004805490508110610478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046f90611833565b60405180910390fd5b816004818154811061048d5761048c611853565b5b906000526020600020906005020160030160009054906101000a900460ff16156104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e3906118ce565b60405180910390fd5b60006004848154811061050257610501611853565b5b906000526020600020906005020190506003600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166105af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a69061193a565b60405180910390fd5b60018160040160008282546105c49190611989565b9250508190555060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550833373ffffffffffffffffffffffffffffffffffffffff167fc423fd18c78c483f167229efa90b29abe30eed1425ab9cb40441f6555650eca860405160405180910390a350505050565b6000600480549050905090565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060606000806000600487815481106106c9576106c8611853565b5b906000526020600020906005020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010154826002018360030160009054906101000a900460ff16846004015482805461072a906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610756906119ec565b80156107a35780601f10610778576101008083540402835291602001916107a3565b820191906000526020600020905b81548152906001019060200180831161078657829003601f168201915b50505050509250955095509550955095505091939590929450565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600481815481106107fd57600080fd5b90600052602060002090600502016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201805461084c906119ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610878906119ec565b80156108c55780601f1061089a576101008083540402835291602001916108c5565b820191906000526020600020905b8154815290600101906020018083116108a857829003601f168201915b5050505050908060030160009054906101000a900460ff16908060040154905085565b6060600080548060200260200160405190810160405280929190818152602001828054801561096c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610922575b5050505050905090565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f9906117c7565b60405180910390fd5b806004805490508110610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190611833565b60405180910390fd5b8160048181548110610a5f57610a5e611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906118ce565b60405180910390fd5b826003600082815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490611a6a565b60405180910390fd5b600060048581548110610b7357610b72611853565b5b906000526020600020906005020190506001816004016000828254610b989190611a8a565b9250508190555060016003600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550843373ffffffffffffffffffffffffffffffffffffffff167f52a3954c699324c8e90e7e2f7cb9f57cd61af1902197bafcc5085b6c2a57b82360405160405180910390a35050505050565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd6906117c7565b60405180910390fd5b6000600480549050905060046040518060a001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020016000151581526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002019080519060200190610dc292919061115b565b5060608201518160030160006101000a81548160ff0219169083151502179055506080820151816004015550508373ffffffffffffffffffffffffffffffffffffffff16813373ffffffffffffffffffffffffffffffffffffffff167f52e5c631bb2fd786d6b1c26f68548e07c61d087bf325770dd88d072cf0a5e8b08686604051610e4f929190611ae0565b60405180910390a450505050565b60025481565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906117c7565b60405180910390fd5b806004805490508110610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611833565b60405180910390fd5b8160048181548110610f4c57610f4b611853565b5b906000526020600020906005020160030160009054906101000a900460ff1615610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906118ce565b60405180910390fd5b600060048481548110610fc157610fc0611853565b5b906000526020600020906005020190506002548160040154101561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190611b5c565b60405180910390fd5b60018160030160006101000a81548160ff02191690831515021790555060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682600101548360020160405161108a9190611c1b565b60006040518083038185875af1925050503d80600081146110c7576040519150601f19603f3d011682016040523d82523d6000602084013e6110cc565b606091505b5050905080611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790611c7e565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167f5445f318f4f5fcfb66592e68e0cc5822aa15664039bd5f0ffde24c5a8142b1ac60405160405180910390a35050505050565b828054611167906119ec565b90600052602060002090601f01602090048101928261118957600085556111d0565b82601f106111a257805160ff19168380011785556111d0565b828001600101855582156111d0579182015b828111156111cf5782518255916020019190600101906111b4565b5b5090506111dd91906111e1565b5090565b5b808211156111fa5760008160009055506001016111e2565b5090565b6000819050919050565b611211816111fe565b82525050565b600060408201905061122c6000830185611208565b6112396020830184611208565b9392505050565b6000604051905090565b600080fd5b600080fd5b61125d816111fe565b811461126857600080fd5b50565b60008135905061127a81611254565b92915050565b6000602082840312156112965761129561124a565b5b60006112a48482850161126b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112d8826112ad565b9050919050565b6112e8816112cd565b82525050565b600060208201905061130360008301846112df565b92915050565b600060208201905061131e6000830184611208565b92915050565b61132d816112cd565b811461133857600080fd5b50565b60008135905061134a81611324565b92915050565b6000602082840312156113665761136561124a565b5b60006113748482850161133b565b91505092915050565b60008115159050919050565b6113928161137d565b82525050565b60006020820190506113ad6000830184611389565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113ed5780820151818401526020810190506113d2565b838111156113fc576000848401525b50505050565b6000601f19601f8301169050919050565b600061141e826113b3565b61142881856113be565b93506114388185602086016113cf565b61144181611402565b840191505092915050565b600060a08201905061146160008301886112df565b61146e6020830187611208565b81810360408301526114808186611413565b905061148f6060830185611389565b61149c6080830184611208565b9695505050505050565b600080604083850312156114bd576114bc61124a565b5b60006114cb8582860161126b565b92505060206114dc8582860161133b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61151b816112cd565b82525050565b600061152d8383611512565b60208301905092915050565b6000602082019050919050565b6000611551826114e6565b61155b81856114f1565b935061156683611502565b8060005b8381101561159757815161157e8882611521565b975061158983611539565b92505060018101905061156a565b5085935050505092915050565b600060208201905081810360008301526115be8184611546565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61160882611402565b810181811067ffffffffffffffff82111715611627576116266115d0565b5b80604052505050565b600061163a611240565b905061164682826115ff565b919050565b600067ffffffffffffffff821115611666576116656115d0565b5b61166f82611402565b9050602081019050919050565b82818337600083830152505050565b600061169e6116998461164b565b611630565b9050828152602081018484840111156116ba576116b96115cb565b5b6116c584828561167c565b509392505050565b600082601f8301126116e2576116e16115c6565b5b81356116f284826020860161168b565b91505092915050565b6000806000606084860312156117145761171361124a565b5b60006117228682870161133b565b93505060206117338682870161126b565b925050604084013567ffffffffffffffff8111156117545761175361124f565b5b611760868287016116cd565b9150509250925092565b600082825260208201905092915050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006117b160098361176a565b91506117bc8261177b565b602082019050919050565b600060208201905081810360008301526117e0816117a4565b9050919050565b7f747820646f6573206e6f74206578697374000000000000000000000000000000600082015250565b600061181d60118361176a565b9150611828826117e7565b602082019050919050565b6000602082019050818103600083015261184c81611810565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f747820616c726561647920657865637574656400000000000000000000000000600082015250565b60006118b860138361176a565b91506118c382611882565b602082019050919050565b600060208201905081810360008301526118e7816118ab565b9050919050565b7f7478206e6f7420636f6e6669726d656400000000000000000000000000000000600082015250565b600061192460108361176a565b915061192f826118ee565b602082019050919050565b6000602082019050818103600083015261195381611917565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611994826111fe565b915061199f836111fe565b9250828210156119b2576119b161195a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a0457607f821691505b60208210811415611a1857611a176119bd565b5b50919050565b7f747820616c726561647920636f6e6669726d6564000000000000000000000000600082015250565b6000611a5460148361176a565b9150611a5f82611a1e565b602082019050919050565b60006020820190508181036000830152611a8381611a47565b9050919050565b6000611a95826111fe565b9150611aa0836111fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ad557611ad461195a565b5b828201905092915050565b6000604082019050611af56000830185611208565b8181036020830152611b078184611413565b90509392505050565b7f63616e6e6f742065786563757465207478000000000000000000000000000000600082015250565b6000611b4660118361176a565b9150611b5182611b10565b602082019050919050565b60006020820190508181036000830152611b7581611b39565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611ba9816119ec565b611bb38186611b7c565b94506001821660008114611bce5760018114611bdf57611c12565b60ff19831686528186019350611c12565b611be885611b87565b60005b83811015611c0a57815481890152600182019150602081019050611beb565b838801955050505b50505092915050565b6000611c278284611b9c565b915081905092915050565b7f7478206661696c65640000000000000000000000000000000000000000000000600082015250565b6000611c6860098361176a565b9150611c7382611c32565b602082019050919050565b60006020820190508181036000830152611c9781611c5b565b905091905056fea2646970667358221220dde80845922e96b3f6246809411eb89d18ac65e5e05e949ff93edfb8b1b2dfd964736f6c63430008090033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/multisig-wallet/web3-actions/abi/Token.json b/multisig-wallet/web3-actions/abi/Token.json new file mode 100644 index 0000000..1bc50d7 --- /dev/null +++ b/multisig-wallet/web3-actions/abi/Token.json @@ -0,0 +1,164 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Token", + "sourceName": "contracts/Token.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokens", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenOwner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stake", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040526014600260006101000a81548163ffffffff021916908363ffffffff16021790555034801561003257600080fd5b50610cd6806100426000396000f3fe60806040526004361061004a5760003560e01c8063095ea7b31461004f57806323b872dd1461008c5780633a4b66f1146100c957806370a08231146100d3578063a9059cbb14610110575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610840565b61014d565b604051610083919061089b565b60405180910390f35b34801561009857600080fd5b506100b360048036038101906100ae91906108b6565b6102d3565b6040516100c0919061089b565b60405180910390f35b6100d1610485565b005b3480156100df57600080fd5b506100fa60048036038101906100f59190610909565b610505565b6040516101079190610945565b60405180910390f35b34801561011c57600080fd5b5061013760048036038101906101329190610840565b61054d565b604051610144919061089b565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461020d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610204906109e3565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9253384846040516102c193929190610a12565b60405180910390a16001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038b90610a95565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104209190610ae4565b9250508190555061043f84848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848460405161047293929190610a12565b60405180910390a1600190509392505050565b6000600260009054906101000a900463ffffffff1663ffffffff16346104ab9190610b18565b9050806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104fb9190610b72565b9250508190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061056733848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef33848460405161059a93929190610a12565b60405180910390a16001905092915050565b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c14565b60405180910390fd5b8360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054818560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b69190610b72565b10156106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee90610c80565b60405180910390fd5b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107459190610ae4565b92505081905550808460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079a9190610b72565b9250508190555050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107d7826107ac565b9050919050565b6107e7816107cc565b81146107f257600080fd5b50565b600081359050610804816107de565b92915050565b6000819050919050565b61081d8161080a565b811461082857600080fd5b50565b60008135905061083a81610814565b92915050565b60008060408385031215610857576108566107a7565b5b6000610865858286016107f5565b92505060206108768582860161082b565b9150509250929050565b60008115159050919050565b61089581610880565b82525050565b60006020820190506108b0600083018461088c565b92915050565b6000806000606084860312156108cf576108ce6107a7565b5b60006108dd868287016107f5565b93505060206108ee868287016107f5565b92505060406108ff8682870161082b565b9150509250925092565b60006020828403121561091f5761091e6107a7565b5b600061092d848285016107f5565b91505092915050565b61093f8161080a565b82525050565b600060208201905061095a6000830184610936565b92915050565b600082825260208201905092915050565b7f48617320616c6c6f77616e63652c2063616e277420617070726f7665206d6f7260008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006109cd602183610960565b91506109d882610971565b604082019050919050565b600060208201905081810360008301526109fc816109c0565b9050919050565b610a0c816107cc565b82525050565b6000606082019050610a276000830186610a03565b610a346020830185610a03565b610a416040830184610936565b949350505050565b7f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000600082015250565b6000610a7f601483610960565b9150610a8a82610a49565b602082019050919050565b60006020820190508181036000830152610aae81610a72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610aef8261080a565b9150610afa8361080a565b925082821015610b0d57610b0c610ab5565b5b828203905092915050565b6000610b238261080a565b9150610b2e8361080a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610b6757610b66610ab5565b5b828202905092915050565b6000610b7d8261080a565b9150610b888361080a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610bbd57610bbc610ab5565b5b828201905092915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000610bfe601283610960565b9150610c0982610bc8565b602082019050919050565b60006020820190508181036000830152610c2d81610bf1565b9050919050565b7f42616c616e6365204f766572666c6f7700000000000000000000000000000000600082015250565b6000610c6a601083610960565b9150610c7582610c34565b602082019050919050565b60006020820190508181036000830152610c9981610c5d565b905091905056fea26469706673582212206a919534a5f2b8939885541b3e3df8b3ee48535823a8cfa339be7dec1a57b61864736f6c63430008090033", + "deployedBytecode": "0x60806040526004361061004a5760003560e01c8063095ea7b31461004f57806323b872dd1461008c5780633a4b66f1146100c957806370a08231146100d3578063a9059cbb14610110575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610840565b61014d565b604051610083919061089b565b60405180910390f35b34801561009857600080fd5b506100b360048036038101906100ae91906108b6565b6102d3565b6040516100c0919061089b565b60405180910390f35b6100d1610485565b005b3480156100df57600080fd5b506100fa60048036038101906100f59190610909565b610505565b6040516101079190610945565b60405180910390f35b34801561011c57600080fd5b5061013760048036038101906101329190610840565b61054d565b604051610144919061089b565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461020d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610204906109e3565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9253384846040516102c193929190610a12565b60405180910390a16001905092915050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038b90610a95565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104209190610ae4565b9250508190555061043f84848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848460405161047293929190610a12565b60405180910390a1600190509392505050565b6000600260009054906101000a900463ffffffff1663ffffffff16346104ab9190610b18565b9050806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104fb9190610b72565b9250508190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061056733848460006105ac909392919063ffffffff16565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef33848460405161059a93929190610a12565b60405180910390a16001905092915050565b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c14565b60405180910390fd5b8360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054818560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b69190610b72565b10156106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee90610c80565b60405180910390fd5b808460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107459190610ae4565b92505081905550808460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079a9190610b72565b9250508190555050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107d7826107ac565b9050919050565b6107e7816107cc565b81146107f257600080fd5b50565b600081359050610804816107de565b92915050565b6000819050919050565b61081d8161080a565b811461082857600080fd5b50565b60008135905061083a81610814565b92915050565b60008060408385031215610857576108566107a7565b5b6000610865858286016107f5565b92505060206108768582860161082b565b9150509250929050565b60008115159050919050565b61089581610880565b82525050565b60006020820190506108b0600083018461088c565b92915050565b6000806000606084860312156108cf576108ce6107a7565b5b60006108dd868287016107f5565b93505060206108ee868287016107f5565b92505060406108ff8682870161082b565b9150509250925092565b60006020828403121561091f5761091e6107a7565b5b600061092d848285016107f5565b91505092915050565b61093f8161080a565b82525050565b600060208201905061095a6000830184610936565b92915050565b600082825260208201905092915050565b7f48617320616c6c6f77616e63652c2063616e277420617070726f7665206d6f7260008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006109cd602183610960565b91506109d882610971565b604082019050919050565b600060208201905081810360008301526109fc816109c0565b9050919050565b610a0c816107cc565b82525050565b6000606082019050610a276000830186610a03565b610a346020830185610a03565b610a416040830184610936565b949350505050565b7f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000600082015250565b6000610a7f601483610960565b9150610a8a82610a49565b602082019050919050565b60006020820190508181036000830152610aae81610a72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610aef8261080a565b9150610afa8361080a565b925082821015610b0d57610b0c610ab5565b5b828203905092915050565b6000610b238261080a565b9150610b2e8361080a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610b6757610b66610ab5565b5b828202905092915050565b6000610b7d8261080a565b9150610b888361080a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610bbd57610bbc610ab5565b5b828201905092915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b6000610bfe601283610960565b9150610c0982610bc8565b602082019050919050565b60006020820190508181036000830152610c2d81610bf1565b9050919050565b7f42616c616e6365204f766572666c6f7700000000000000000000000000000000600082015250565b6000610c6a601083610960565b9150610c7582610c34565b602082019050919050565b60006020820190508181036000830152610c9981610c5d565b905091905056fea26469706673582212206a919534a5f2b8939885541b3e3df8b3ee48535823a8cfa339be7dec1a57b61864736f6c63430008090033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/multisig-wallet/web3-actions/multisig.ts b/multisig-wallet/web3-actions/multisig.ts new file mode 100644 index 0000000..aa3c7ca --- /dev/null +++ b/multisig-wallet/web3-actions/multisig.ts @@ -0,0 +1,220 @@ +import { + ActionFn, + Context, + Event, + TransactionEvent, + WebhookEvent, +} from "@tenderly/actions"; +import axios from "axios"; +import { BigNumber, BytesLike, ethers } from "ethers"; +import { LogDescription } from "ethers/lib/utils"; +import { abi as MultisigAbi } from "./abi/MultiSigWallet.json"; +import { abi as TokenAbi } from "./abi/Token.json"; +import { tenderlyApi } from "./tenderly-api"; + +const KEY_STORE_SUBMITTED_TX = "multisig.submitted"; + +// TODO: replace +const TENDERLY_USERNAME = "TENDERLY_USERNAME"; +const TENDERLY_PROJECT_SLUG = "multisig-wallet"; + +// TODO: replace with deployed contract addresses or use pre-deployed ones (leave as is) +const MULTISIG_WALLET_ADDRESS = "0x418ebb95eaa40c119408143056cad984c6129d45"; +const MULTISIG_TOKEN_ADDRESS = "0x4e97c71a44ef1b78a7caee159aa016be53e04c32"; + +type SubmittedTx = { + owner: string; + txIndex: BigNumber; + from: string; + to: string; + value: BigNumber; + data: BytesLike; + input: BytesLike; +}; + +/** + * Web3 Action responding to all events from the multisig contract. + * It stores every submitted transaction in Action storage. + * Other actions can use this to simulate the transaction later on. + * + * @param context the context of the action function (provided by Tenderly Web3 Actions Runtime) + * @param event The Action Event that triggered this action function - TransactionEvent. + * @returns nothing + */ +export const onAnEvent: ActionFn = async (context: Context, event: Event) => { + const transactionEvent = event as TransactionEvent; + + // obtain the Event from TX + let iface = new ethers.utils.Interface(MultisigAbi); + const parsedLogs = transactionEvent.logs.map((log) => iface.parseLog(log)); + const txEvent = parsedLogs[0]; + + // tracks all submitted transactions + const submittedTxs = await loadSubmittedTransactions(context); + + switch (txEvent.name) { + case "TxSubmission": + const submitted = extractSubmittedTx(txEvent, transactionEvent); + + submittedTxs.txs.push(submitted); + await context.storage.putJson(KEY_STORE_SUBMITTED_TX, submittedTxs); + + await simulateAndSendToDiscord(context, submitted); + + break; + + case "TxConfirmation": + await toDiscord(context, "🛎", "confirmed by" + transactionEvent.from); + break; + + case "ExecuteTransaction": + const txIndex = txEvent.args.txIndex; + console.log("TX Executed " + txIndex); + submittedTxs.txs = submittedTxs.txs.filter( + (tx) => tx.txIndex == txEvent.args.txIndex + ); + + await context.storage.putJson(KEY_STORE_SUBMITTED_TX, submittedTxs); + await toDiscord(context, "💸", "confirmed by" + transactionEvent.from); + break; + } + return; +}; + +/** + * Simulates the transaction submitted to Multisig on the Tenderly fork. + * @param submitted the submitted transaction to simulate + * @returns difference in token balance prior and after the transaction + */ +async function simulateOnFork(context: Context, submitted: SubmittedTx) { + // create a fork new fork with the freshest data from the network - using the DIY lib until an official SDK jumps in + const tApi = tenderlyApi( + TENDERLY_PROJECT_SLUG, + TENDERLY_USERNAME, + await context.secrets.get("TENDERLY_ACCESS_KEY") + ); + const fork = await tApi.aTenderlyFork({ network_id: "3" }); + + const ethersOnFork = fork.provider; // just grab the provider + + const tokenOnFork = new ethers.Contract( + MULTISIG_TOKEN_ADDRESS, + TokenAbi, + ethersOnFork.getSigner() + ); + + const initialBalance = (await tokenOnFork.balanceOf( + MULTISIG_WALLET_ADDRESS + )) as BigNumber; + + await ethersOnFork.send("tenderly_setBalance", [ + [MULTISIG_WALLET_ADDRESS], + ethers.utils.hexValue(ethers.utils.parseUnits("10", "ether")), + ]); + + const tx = { + to: submitted.to, + from: MULTISIG_WALLET_ADDRESS, + data: submitted.data, + value: BigNumber.from(submitted.value).toHexString(), + }; + + // send the TX + await ethersOnFork.send("eth_sendTransaction", [tx]); + + const balance = (await tokenOnFork.balanceOf( + MULTISIG_WALLET_ADDRESS + )) as BigNumber; + console.log("Balances", { initialBalance, balance }); + + await fork.removeFork(); // remove the fork. For debugging purposes leave it in place + + return { changeInBalance: balance.sub(initialBalance) }; +} + +/** + * Web-hook based Web3 Action + * @param context + * @param event + */ +export const onHook: ActionFn = async (context: Context, event: Event) => { + const evt = event as WebhookEvent; + await toDiscord( + context, + "🛎", + `${evt.payload.who} is reminding you to check out TX with IDX ${evt.payload.txId}` + ); +}; + +/** + * Periodic Web3 Action: daily simulation of unexecuted transactions + * @param context + * @param event + */ +export const everyDay: ActionFn = async (context: Context, _: Event) => { + const stored = await loadSubmittedTransactions(context); + await toDiscord(context, "🛎", "Daily simulations"); + await Promise.all( + stored.txs.map((tx) => simulateAndSendToDiscord(context, tx)) + ); +}; + +function extractSubmittedTx( + txEvent: LogDescription, + actionEvent: TransactionEvent +): SubmittedTx { + return { + owner: txEvent.args.owner, + txIndex: txEvent.args.txIndex, + from: txEvent.args.from, + to: txEvent.args.to, + value: txEvent.args.value, + data: txEvent.args.data, + input: actionEvent.input, + }; +} + +const simulateAndSendToDiscord = async ( + context: Context, + submitted: SubmittedTx +) => { + const simRes = await simulateOnFork(context, submitted); + + await toDiscord( + context, + simRes.changeInBalance.gt(0) ? "🟢" : "🔴", + `W3A simulated TX idx = ${submitted.txIndex.toString()}`, + simRes + ); +}; + +async function loadSubmittedTransactions(context: Context) { + const stored: { txs: SubmittedTx[] } = await context.storage.getJson( + KEY_STORE_SUBMITTED_TX + ); + if (!stored.txs) { + stored.txs = []; + } + return { + txs: stored.txs.map((tx) => ({ + ...tx, + value: BigNumber.from(tx.value), + txIndex: BigNumber.from(tx.txIndex), + })), + }; +} + +async function toDiscord( + context: Context, + howItWent: "🟢" | "🔴" | "🛎" | "💸", + activity: string, + data?: any +) { + const body = !!data ? "```" + JSON.stringify(data, null, 2) + "```" : ""; + + const discordUrl = await context.secrets.get("multisig.DISCORD_URL"); + + await axios.post(discordUrl, { + content: `${howItWent} ${activity} ${body}`, + }); +} diff --git a/multisig-wallet/web3-actions/package-lock.json b/multisig-wallet/web3-actions/package-lock.json new file mode 100644 index 0000000..27e1f26 --- /dev/null +++ b/multisig-wallet/web3-actions/package-lock.json @@ -0,0 +1,1609 @@ +{ + "name": "actions", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "actions", + "dependencies": { + "@tenderly/actions": "^0.0.7", + "ethers": "^5.6.9" + }, + "devDependencies": { + "@tenderly/actions-test": "^0.0.9", + "axios": "^0.27.2", + "typescript": "^4.3.5" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "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.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "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.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "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.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "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.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "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.6.1" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", + "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.6.1", + "@ethersproject/properties": "^5.6.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "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.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "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.6.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "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.6.2" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "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.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "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.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", + "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.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", + "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.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "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.6.1", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", + "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.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "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.6.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", + "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.6.1", + "@ethersproject/sha2": "^5.6.1" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "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.6.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", + "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.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/random": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", + "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.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "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.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", + "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.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "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.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", + "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.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "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.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "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.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", + "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.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", + "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.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "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.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", + "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.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/@tenderly/actions": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@tenderly/actions/-/actions-0.0.7.tgz", + "integrity": "sha512-wCEG80wEs8ONy0TAl7pohFV7KUUJU/3nAnBO9H6YGk6lN+tTJscNZ7n8umd5nisIR4HZ/mXiotYfbenO+KaiDQ==" + }, + "node_modules/@tenderly/actions-test": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@tenderly/actions-test/-/actions-test-0.0.9.tgz", + "integrity": "sha512-T/9nyBpx7tKZf8jGNw0X9OqxkwDJUYMAyhNoTsgVkE8ofeSEtGR+UVhmDf10CiPhExgFl2cvxjXmVxfD0il7DQ==", + "dev": true, + "dependencies": { + "@tenderly/actions": "^0.0.8" + } + }, + "node_modules/@tenderly/actions-test/node_modules/@tenderly/actions": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@tenderly/actions/-/actions-0.0.8.tgz", + "integrity": "sha512-F9+vMdKsFs5aVb70hwUgiGKNSbzpjn/tmSzLrhAOd10R1ixa+o8cWPCoKC0LOtKwgMdJdJptbCl0/QJoi3bosA==", + "dev": true + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "license": "MIT" + }, + "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/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, + "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/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/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/ethers": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", + "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.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.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==", + "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==", + "license": "MIT" + }, + "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", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "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==", + "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==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "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 + } + } + } + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/basex": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/hdnode": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/json-wallets": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/providers": { + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/random": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/units": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/wallet": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/wordlists": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@tenderly/actions": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@tenderly/actions/-/actions-0.0.7.tgz", + "integrity": "sha512-wCEG80wEs8ONy0TAl7pohFV7KUUJU/3nAnBO9H6YGk6lN+tTJscNZ7n8umd5nisIR4HZ/mXiotYfbenO+KaiDQ==" + }, + "@tenderly/actions-test": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@tenderly/actions-test/-/actions-test-0.0.9.tgz", + "integrity": "sha512-T/9nyBpx7tKZf8jGNw0X9OqxkwDJUYMAyhNoTsgVkE8ofeSEtGR+UVhmDf10CiPhExgFl2cvxjXmVxfD0il7DQ==", + "dev": true, + "requires": { + "@tenderly/actions": "^0.0.8" + }, + "dependencies": { + "@tenderly/actions": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@tenderly/actions/-/actions-0.0.8.tgz", + "integrity": "sha512-F9+vMdKsFs5aVb70hwUgiGKNSbzpjn/tmSzLrhAOd10R1ixa+o8cWPCoKC0LOtKwgMdJdJptbCl0/QJoi3bosA==", + "dev": true + } + } + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "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" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "ethers": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", + "requires": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + } + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "dev": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "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==" + }, + "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==" + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} + } + } +} diff --git a/multisig-wallet/web3-actions/package.json b/multisig-wallet/web3-actions/package.json new file mode 100755 index 0000000..63e44ba --- /dev/null +++ b/multisig-wallet/web3-actions/package.json @@ -0,0 +1,16 @@ +{ + "name": "actions", + "scripts": { + "build": "tsc" + }, + "devDependencies": { + "@tenderly/actions-test": "^0.0.9", + "axios": "^0.27.2", + "typescript": "^4.3.5" + }, + "dependencies": { + "@tenderly/actions": "^0.0.7", + "ethers": "^5.6.9" + }, + "private": true +} diff --git a/multisig-wallet/web3-actions/tenderly-api.ts b/multisig-wallet/web3-actions/tenderly-api.ts new file mode 100644 index 0000000..608693f --- /dev/null +++ b/multisig-wallet/web3-actions/tenderly-api.ts @@ -0,0 +1,98 @@ +import { JsonRpcProvider } from "@ethersproject/providers"; +import axios, { AxiosResponse } from "axios"; + +type TenderlyForkRequest = { + block_number?: number; + network_id: string; + transaction_index?: number; + initial_balance?: number; + chain_config?: { + chain_id: number; + homestead_block: number; + dao_fork_support: boolean; + eip_150_block: number; + eip_150_hash: string; + eip_155_block: number; + eip_158_block: number; + byzantium_block: number; + constantinople_block: number; + petersburg_block: number; + istanbul_block: number; + berlin_block: number; + }; +}; + +export type TenderlyForkProvider = { + provider: JsonRpcProvider; + id: number; + blockNumber: number; + /** + * map from address to given address' balance + */ + removeFork: () => Promise>; +}; + +export const tenderlyApi = ( + projectSlug: string, + username: string, + accessKey: string +) => { + const somewhereInTenderly = (where: string = projectSlug || "") => + axios.create({ + baseURL: `https://api.tenderly.co/api/v1/${where}`, + headers: { + "X-Access-Key": accessKey || "", + "Content-Type": "application/json", + }, + }); + + const inProject = (...path: any[]) => + [`account/${username}/project/${projectSlug}`, ...path] + .join("/") + .replace("//", ""); + + const anAxiosOnTenderly = () => somewhereInTenderly(""); + const axiosOnTenderly = anAxiosOnTenderly(); + + // todo: cache these poor axioses + const axiosInProject = somewhereInTenderly(inProject()); + + const removeFork = async (forkId: string) => { + console.log("Removing test fork", forkId); + return await axiosOnTenderly.delete(inProject(`fork/${forkId}`)); + }; + + async function aTenderlyFork( + fork: TenderlyForkRequest + ): Promise { + const forkResponse = await axiosInProject.post(`/fork`, fork); + const forkId = forkResponse.data.root_transaction.fork_id; + + const forkProviderUrl = `https://rpc.tenderly.co/fork/${forkId}`; + const forkProvider = new JsonRpcProvider(forkProviderUrl); + + const bn = ( + forkResponse.data.root_transaction.receipt.blockNumber as string + ).replace("0x", ""); + const blockNumber: number = Number.parseInt(bn, 16); + + console.info( + `\nForked with fork id ${forkId} at block number ${blockNumber}` + ); + + console.info(`https://dashboard.tenderly.co/${inProject("fork", forkId)}`); + + console.info("JSON-RPC:", forkProviderUrl); + + return { + provider: forkProvider, + blockNumber, + id: forkId, + removeFork: () => removeFork(forkId), + }; + } + + return { + aTenderlyFork, + }; +}; diff --git a/multisig-wallet/web3-actions/tenderly.yaml b/multisig-wallet/web3-actions/tenderly.yaml new file mode 100644 index 0000000..c298d95 --- /dev/null +++ b/multisig-wallet/web3-actions/tenderly.yaml @@ -0,0 +1,53 @@ +# TODO: replace TENDERLY_USERNAME and TENDERLY_PROJECT_SLUG with proper values +account_id: "" +project_slug: "" +actions: + TENDERLY_USERNAME/TENDERLY_PROJECT_SLUG: + runtime: v1 + sources: web3-actions + specs: + multisig: + description: Acts when multisig event takes place + function: multisig:onAnEvent + trigger: + type: transaction + transaction: + status: + - mined + filters: + - network: 3 + eventEmitted: + name: TxSubmission + contract: + address: 0x418ebb95eaa40c119408143056cad984c6129d45 + - network: 3 + eventEmitted: + name: TxConfirmation + contract: + address: 0x418ebb95eaa40c119408143056cad984c6129d45 + - network: 3 + eventEmitted: + name: ConfirmationRevocation + contract: + address: 0x418ebb95eaa40c119408143056cad984c6129d45 + - network: 3 + eventEmitted: + name: ExecuteTransaction + contract: + address: 0x418ebb95eaa40c119408143056cad984c6129d45 + multisig-webhook: + description: Via Webhook + function: multisig:onHook + trigger: + type: webhook + wehbook: + authenticated: true + multisig-periodic: + description: Reminders + function: multisig:everyDay + trigger: + type: periodic + periodic: + # Supported values for interval are + # {5m, 10m, 15m, 30m, 1h, 3h, 6h, 12h, 1d} + interval: 5m diff --git a/multisig-wallet/web3-actions/tsconfig.json b/multisig-wallet/web3-actions/tsconfig.json new file mode 100755 index 0000000..83bf3c8 --- /dev/null +++ b/multisig-wallet/web3-actions/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compileOnSave": true, + "compilerOptions": { + "esModuleInterop": true, + "module": "commonjs", + "noImplicitReturns": true, + "noUnusedLocals": false, + "outDir": "out", + "resolveJsonModule": true, + "sourceMap": true, + "strict": true, + "target": "es2020" + }, + "exclude": [ + "actions" + ], + "include": [ + "**/*" + ] +} \ No newline at end of file diff --git a/multisig-wallet/yarn.lock b/multisig-wallet/yarn.lock new file mode 100644 index 0000000..6e9c955 --- /dev/null +++ b/multisig-wallet/yarn.lock @@ -0,0 +1,2759 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.2", "@ethereumjs/block@^3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.3.tgz#d96cbd7af38b92ebb3424223dbf773f5ccd27f84" + integrity sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg== + dependencies: + "@ethereumjs/common" "^2.6.5" + "@ethereumjs/tx" "^3.5.2" + ethereumjs-util "^7.1.5" + merkle-patricia-tree "^4.2.4" + +"@ethereumjs/blockchain@^5.5.2", "@ethereumjs/blockchain@^5.5.3": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz#aa49a6a04789da6b66b5bcbb0d0b98efc369f640" + integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== + dependencies: + "@ethereumjs/block" "^3.6.2" + "@ethereumjs/common" "^2.6.4" + "@ethereumjs/ethash" "^1.1.0" + debug "^4.3.3" + ethereumjs-util "^7.1.5" + level-mem "^5.0.1" + lru-cache "^5.1.1" + semaphore-async-await "^1.5.1" + +"@ethereumjs/common@^2.6.4", "@ethereumjs/common@^2.6.5": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/ethash@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" + integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== + dependencies: + "@ethereumjs/block" "^3.5.0" + "@types/levelup" "^4.3.0" + buffer-xor "^2.0.1" + ethereumjs-util "^7.1.1" + miller-rabin "^4.0.0" + +"@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + dependencies: + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethereumjs/vm@^5.9.0": + version "5.9.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.9.3.tgz#6d69202e4c132a4a1e1628ac246e92062e230823" + integrity sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg== + dependencies: + "@ethereumjs/block" "^3.6.3" + "@ethereumjs/blockchain" "^5.5.3" + "@ethereumjs/common" "^2.6.5" + "@ethereumjs/tx" "^3.5.2" + async-eventemitter "^0.2.4" + core-js-pure "^3.0.1" + debug "^4.3.3" + ethereumjs-util "^7.1.5" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + merkle-patricia-tree "^4.2.4" + rustbn.js "~0.2.0" + +"@ethersproject/abi@5.6.4", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.6.3": + version "5.6.4" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.4.tgz#f6e01b6ed391a505932698ecc0d9e7a99ee60362" + integrity sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg== + dependencies: + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + +"@ethersproject/abstract-provider@5.6.1", "@ethersproject/abstract-provider@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" + integrity sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.3" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/web" "^5.6.1" + +"@ethersproject/abstract-signer@5.6.2", "@ethersproject/abstract-signer@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" + integrity sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + +"@ethersproject/address@5.6.1", "@ethersproject/address@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" + integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp" "^5.6.1" + +"@ethersproject/base64@5.6.1", "@ethersproject/base64@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" + integrity sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + +"@ethersproject/basex@5.6.1", "@ethersproject/basex@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.1.tgz#badbb2f1d4a6f52ce41c9064f01eab19cc4c5305" + integrity sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/properties" "^5.6.0" + +"@ethersproject/bignumber@5.6.2", "@ethersproject/bignumber@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.2.tgz#72a0717d6163fab44c47bcc82e0c550ac0315d66" + integrity sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" + integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/constants@5.6.1", "@ethersproject/constants@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" + integrity sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + +"@ethersproject/contracts@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.2.tgz#20b52e69ebc1b74274ff8e3d4e508de971c287bc" + integrity sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g== + dependencies: + "@ethersproject/abi" "^5.6.3" + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.2" + +"@ethersproject/hash@5.6.1", "@ethersproject/hash@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.1.tgz#224572ea4de257f05b4abf8ae58b03a67e99b0f4" + integrity sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + +"@ethersproject/hdnode@5.6.2", "@ethersproject/hdnode@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.2.tgz#26f3c83a3e8f1b7985c15d1db50dc2903418b2d2" + integrity sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/basex" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/pbkdf2" "^5.6.1" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/sha2" "^5.6.1" + "@ethersproject/signing-key" "^5.6.2" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/wordlists" "^5.6.1" + +"@ethersproject/json-wallets@5.6.1", "@ethersproject/json-wallets@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz#3f06ba555c9c0d7da46756a12ac53483fe18dd91" + integrity sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ== + dependencies: + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/hdnode" "^5.6.2" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/pbkdf2" "^5.6.1" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.1" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/transactions" "^5.6.2" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.6.1", "@ethersproject/keccak256@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.1.tgz#b867167c9b50ba1b1a92bccdd4f2d6bd168a91cc" + integrity sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA== + dependencies: + "@ethersproject/bytes" "^5.6.1" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.6.0", "@ethersproject/logger@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" + integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== + +"@ethersproject/networks@5.6.4", "@ethersproject/networks@^5.6.3": + version "5.6.4" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.4.tgz#51296d8fec59e9627554f5a8a9c7791248c8dc07" + integrity sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/pbkdf2@5.6.1", "@ethersproject/pbkdf2@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz#f462fe320b22c0d6b1d72a9920a3963b09eb82d1" + integrity sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/sha2" "^5.6.1" + +"@ethersproject/properties@5.6.0", "@ethersproject/properties@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" + integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/providers@5.6.8": + version "5.6.8" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" + integrity sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/base64" "^5.6.1" + "@ethersproject/basex" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.3" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.1" + "@ethersproject/rlp" "^5.6.1" + "@ethersproject/sha2" "^5.6.1" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/web" "^5.6.1" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.6.1", "@ethersproject/random@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.1.tgz#66915943981bcd3e11bbd43733f5c3ba5a790255" + integrity sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/rlp@5.6.1", "@ethersproject/rlp@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.1.tgz#df8311e6f9f24dcb03d59a2bac457a28a4fe2bd8" + integrity sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/sha2@5.6.1", "@ethersproject/sha2@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" + integrity sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.6.2", "@ethersproject/signing-key@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.2.tgz#8a51b111e4d62e5a62aee1da1e088d12de0614a3" + integrity sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.1.tgz#5845e71182c66d32e6ec5eefd041fca091a473e2" + integrity sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/sha2" "^5.6.1" + "@ethersproject/strings" "^5.6.1" + +"@ethersproject/strings@5.6.1", "@ethersproject/strings@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.1.tgz#dbc1b7f901db822b5cafd4ebf01ca93c373f8952" + integrity sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/transactions@5.6.2", "@ethersproject/transactions@^5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" + integrity sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q== + dependencies: + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/rlp" "^5.6.1" + "@ethersproject/signing-key" "^5.6.2" + +"@ethersproject/units@5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.1.tgz#ecc590d16d37c8f9ef4e89e2005bda7ddc6a4e6f" + integrity sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/wallet@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.2.tgz#cd61429d1e934681e413f4bc847a5f2f87e3a03c" + integrity sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/hdnode" "^5.6.2" + "@ethersproject/json-wallets" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.1" + "@ethersproject/signing-key" "^5.6.2" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/wordlists" "^5.6.1" + +"@ethersproject/web@5.6.1", "@ethersproject/web@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.1.tgz#6e2bd3ebadd033e6fe57d072db2b69ad2c9bdf5d" + integrity sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA== + dependencies: + "@ethersproject/base64" "^5.6.1" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + +"@ethersproject/wordlists@5.6.1", "@ethersproject/wordlists@^5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.1.tgz#1e78e2740a8a21e9e99947e47979d72e130aeda1" + integrity sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw== + dependencies: + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.1" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" + integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== + +"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" + integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== + +"@nomicfoundation/hardhat-toolbox@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-1.0.2.tgz#342b79e19c456a56d8e76bc2e9cc8474cbcfc774" + integrity sha512-8CEgWSKUK2aMit+76Sez8n7UB0Ze1lwT+LcWxj4EFP30lQWOwOws048t6MTPfThH0BlSWjC6hJRr0LncIkc1Sw== + +"@nomiclabs/hardhat-ethers@^2.0.6": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.0.tgz#9b7dc94d669ad9dc286b94f6f2f1513118c7027b" + integrity sha512-vlW90etB3675QWG7tMrHaDoTa7ymMB7irM4DAQ98g8zJoe9YqEggeDnbO6v5b+BLth/ty4vN6Ko/kaqRN1krHw== + +"@scure/base@~1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + +"@scure/bip32@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" + integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== + dependencies: + "@noble/hashes" "~1.1.1" + "@noble/secp256k1" "~1.6.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" + integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== + dependencies: + "@noble/hashes" "~1.1.1" + "@scure/base" "~1.1.0" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + 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" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + 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" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + 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" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@solidity-parser/parser@^0.14.2": + version "0.14.3" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.3.tgz#0d627427b35a40d8521aaa933cc3df7d07bfa36f" + integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@tenderly/actions-test@^0.0.9": + version "0.0.9" + resolved "https://registry.yarnpkg.com/@tenderly/actions-test/-/actions-test-0.0.9.tgz#4999d2eda3ac61f8b77301a5d4f3312abb9491da" + integrity sha512-T/9nyBpx7tKZf8jGNw0X9OqxkwDJUYMAyhNoTsgVkE8ofeSEtGR+UVhmDf10CiPhExgFl2cvxjXmVxfD0il7DQ== + dependencies: + "@tenderly/actions" "^0.0.8" + +"@tenderly/actions@^0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@tenderly/actions/-/actions-0.0.8.tgz#22accfe4f53c55e7bd8c836105a65c82f8c2d272" + integrity sha512-F9+vMdKsFs5aVb70hwUgiGKNSbzpjn/tmSzLrhAOd10R1ixa+o8cWPCoKC0LOtKwgMdJdJptbCl0/QJoi3bosA== + +"@tenderly/hardhat-tenderly@^1.1.4": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.1.5.tgz#355bc0025339ef4c3e94ace4bf6786b578f74244" + integrity sha512-bOrgzmP3zvpn7/+CtVLMFAmnq7Sf8T5+B+bEeFvEMVrOTvGIFH1G4l1zajb10caAZ18+yXHTGethVmberV45Hw== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@nomiclabs/hardhat-ethers" "^2.0.6" + axios "^0.21.1" + ethers "^5.6.8" + fs-extra "^9.0.1" + hardhat-deploy "^0.11.10" + js-yaml "^3.14.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/abstract-leveldown@*": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" + integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + dependencies: + "@types/node" "*" + +"@types/level-errors@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" + integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== + +"@types/levelup@^4.3.0": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" + integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== + dependencies: + "@types/abstract-leveldown" "*" + "@types/level-errors" "*" + "@types/node" "*" + +"@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/node@*", "@types/node@^18.6.3": + version "18.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.5.tgz#f1c1d4b7d8231c0278962347163656f9c36f3e83" + integrity sha512-NcKK6Ts+9LqdHJaW6HQmgr7dT/i3GOHG+pt6BiWv++5SnjtRd4NXeiuN2kA153SjhXPR/AhHIPHPbrsbpUVOww== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/qs@^6.9.7": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/secp256k1@^4.0.1": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + dependencies: + "@types/node" "*" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +abstract-leveldown@~6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +async-eventemitter@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async@^2.4.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@^4.0.0, bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + 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" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer-xor@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" + integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== + dependencies: + safe-buffer "^5.1.1" + +buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +chai@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" + integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + 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" + optionalDependencies: + fsevents "~2.3.2" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-js-pure@^3.0.1: + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3" + integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + 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@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + 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" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== + dependencies: + abstract-leveldown "~6.2.1" + inherits "^2.0.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dotenv@^16.0.1: + version "16.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" + integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== + +elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + 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" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== + dependencies: + abstract-leveldown "^6.2.1" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + +enquirer@^2.3.0, enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +errno@~0.1.1: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + 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" + +ethereum-cryptography@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" + integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + dependencies: + "@noble/hashes" "1.1.2" + "@noble/secp256k1" "1.6.3" + "@scure/bip32" "1.1.0" + "@scure/bip39" "1.1.0" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + 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" + +ethers@^5.5.3, ethers@^5.6.8, ethers@^5.6.9: + version "5.6.9" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.9.tgz#4e12f8dfcb67b88ae7a78a9519b384c23c576a4d" + integrity sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA== + dependencies: + "@ethersproject/abi" "5.6.4" + "@ethersproject/abstract-provider" "5.6.1" + "@ethersproject/abstract-signer" "5.6.2" + "@ethersproject/address" "5.6.1" + "@ethersproject/base64" "5.6.1" + "@ethersproject/basex" "5.6.1" + "@ethersproject/bignumber" "5.6.2" + "@ethersproject/bytes" "5.6.1" + "@ethersproject/constants" "5.6.1" + "@ethersproject/contracts" "5.6.2" + "@ethersproject/hash" "5.6.1" + "@ethersproject/hdnode" "5.6.2" + "@ethersproject/json-wallets" "5.6.1" + "@ethersproject/keccak256" "5.6.1" + "@ethersproject/logger" "5.6.0" + "@ethersproject/networks" "5.6.4" + "@ethersproject/pbkdf2" "5.6.1" + "@ethersproject/properties" "5.6.0" + "@ethersproject/providers" "5.6.8" + "@ethersproject/random" "5.6.1" + "@ethersproject/rlp" "5.6.1" + "@ethersproject/sha2" "5.6.1" + "@ethersproject/signing-key" "5.6.2" + "@ethersproject/solidity" "5.6.1" + "@ethersproject/strings" "5.6.1" + "@ethersproject/transactions" "5.6.2" + "@ethersproject/units" "5.6.1" + "@ethersproject/wallet" "5.6.2" + "@ethersproject/web" "5.6.1" + "@ethersproject/wordlists" "5.6.1" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" + +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.14.9: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + +get-intrinsic@^1.0.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +hardhat-deploy@^0.11.10: + version "0.11.12" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.12.tgz#323e05ecd8e6c80a9193b9c6f6c8ecbb6abfbe47" + integrity sha512-Wv0BqzwW4mz78raxkfQtBbkhZwZTRWXwRbEwgkTUimD3MX/0Z9+D4O+s1zHJlG0zwZvJMbwxPOrOHQm4NZ3JAQ== + dependencies: + "@types/qs" "^6.9.7" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + ethers "^5.5.3" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + zksync-web3 "^0.7.8" + +hardhat@^2.10.1: + version "2.10.1" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.10.1.tgz#37fdc0c96d6a5d16b322269db2ad8f9f115c4046" + integrity sha512-0FN9TyCtn7Lt25SB2ei2G7nA2rZjP+RN6MvFOm+zYwherxLZNo6RbD8nDz88eCbhRapevmXqOiL2nM8INKsjmA== + dependencies: + "@ethereumjs/block" "^3.6.2" + "@ethereumjs/blockchain" "^5.5.2" + "@ethereumjs/common" "^2.6.4" + "@ethereumjs/tx" "^3.5.1" + "@ethereumjs/vm" "^5.9.0" + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@sentry/node" "^5.18.1" + "@solidity-parser/parser" "^0.14.2" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + abort-controller "^3.0.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + ethereumjs-util "^7.1.4" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + lodash "^4.17.11" + merkle-patricia-tree "^4.2.4" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + qs "^6.7.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + slash "^3.0.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + "true-case-path" "^2.2.1" + tsort "0.0.1" + undici "^5.4.0" + uuid "^8.3.2" + ws "^7.4.6" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immediate@~3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== + +immutable@^4.0.0-rc.12: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.14.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keccak@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +level-codec@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" + integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== + dependencies: + buffer "^5.6.0" + +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== + +level-errors@^2.0.0, level-errors@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" + integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== + dependencies: + errno "~0.1.1" + +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" + +level-mem@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" + integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== + dependencies: + level-packager "^5.0.3" + memdown "^5.0.0" + +level-packager@^5.0.3: + version "5.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== + dependencies: + encoding-down "^6.3.0" + levelup "^4.3.2" + +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + dependencies: + xtend "^4.0.2" + +level-ws@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" + integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== + dependencies: + inherits "^2.0.3" + readable-stream "^3.1.0" + xtend "^4.0.1" + +levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== + dependencies: + deferred-leveldown "~5.3.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash@^4.17.11, lodash@^4.17.14: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loupe@^2.3.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" + integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + dependencies: + get-func-name "^2.0.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +ltgt@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +memdown@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" + integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== + dependencies: + abstract-leveldown "~6.2.1" + functional-red-black-tree "~1.0.1" + immediate "~3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.2.0" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +merkle-patricia-tree@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" + integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== + dependencies: + "@types/levelup" "^4.3.0" + ethereumjs-util "^7.1.4" + level-mem "^5.0.1" + level-ws "^2.0.0" + readable-stream "^3.6.0" + semaphore-async-await "^1.5.1" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" + integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-gyp-build@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" + integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +qs@^6.7.0, qs@^6.9.4: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +raw-body@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +rimraf@^2.2.8: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@3.0.1, scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semaphore-async-await@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" + integrity sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg== + +semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +tmp@0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +"true-case-path@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" + integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + 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" + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +typescript@^4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +undici@^5.4.0: + version "5.8.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.8.2.tgz#071fc8a6a5d24db0ad510ad442f607d9b09d5eec" + integrity sha512-3KLq3pXMS0Y4IELV045fTxqz04Nk9Ms7yfBBHum3yxsTR4XNn+ZCaUbf/mWitgYDAhsplQ0B1G4S5D345lMO3A== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + 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" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zksync-web3@^0.7.8: + version "0.7.11" + resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.7.11.tgz#1d829eda9b220b94a3d7e3ab29a2b37ab789a276" + integrity sha512-CdIHw+8BirGnYCXGIhF6NL7Ge30k/Sdvm8vmN/cV7WRaLcSOEYVfb9B7uYpcuzAwR44YTZ8yv1izcKCa1EGOtg== diff --git a/tic-tac-toe/tenderly.yaml b/tic-tac-toe/tenderly.yaml index 6cded95..bf255bd 100644 --- a/tic-tac-toe/tenderly.yaml +++ b/tic-tac-toe/tenderly.yaml @@ -1,7 +1,8 @@ -account_id: "nenad" -project_slug: "w3a-examples" +# TODO: replace TENDERLY_USERNAME and TENDERLY_PROJECT_SLUG with proper values +account_id: "TENDERLY_USERNAME" +project_slug: "TENDERLY_PROJECT_SLUG" actions: - nenad/w3a-examples: + TENDERLY_USERNAME/TENDERLY_PROJECT_SLUG: runtime: v1 sources: actions specs: diff --git a/uniswap-notify-discord/tenderly.yaml b/uniswap-notify-discord/tenderly.yaml index 1b9e9a5..dd1026f 100644 --- a/uniswap-notify-discord/tenderly.yaml +++ b/uniswap-notify-discord/tenderly.yaml @@ -1,6 +1,8 @@ -account_id: "" +# TODO: replace TENDERLY_USERNAME and TENDERLY_PROJECT_SLUG with proper values +account_id: "TENDERLY_USERNAME" +project_slug: "TENDERLY_PROJECT_SLUG" actions: - nenad/w3a-examples: + TENDERLY_USERNAME/TENDERLY_PROJECT_SLUG: runtime: v1 sources: actions specs: @@ -14,8 +16,7 @@ actions: - mined filters: - network: 1 - eventEmitted: - contract: + eventEmitted: + contract: address: 0xd849b2af570ffa3033973ea11be6e01b7ba661d9 name: PoolCreated -project_slug: "" From b8a232e517a5487b5c4133087c44a9e631bea914 Mon Sep 17 00:00:00 2001 From: Nenad Vitorovic Date: Tue, 16 Aug 2022 10:03:26 +0200 Subject: [PATCH 2/2] Minor cleanup --- multisig-wallet/README.md | 10 +++++----- multisig-wallet/hardhat.config.ts | 5 ++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/multisig-wallet/README.md b/multisig-wallet/README.md index 3e2c602..132b410 100644 --- a/multisig-wallet/README.md +++ b/multisig-wallet/README.md @@ -77,12 +77,12 @@ the [Ropsten testnet](https://ropsten.etherscan.io/). source demo-setup-scripts/init-env-hardhat.sh ``` -1. **▶️ Action**: Deploy the Contracts to Ropsten. Use shorthand script `npm run deploy:ropsten`. Hardhat project is set +1. **▶️ Action**: Deploy the Contracts to Ropsten. Use shorthand script `yarn deploy:ropsten`. Hardhat project is set up with [Tenderly Hardhat Plugin automatic contract verification](https://github.com/Tenderly/hardhat-tenderly#automatic-verification) - so your contracts are verified automatically as they're deployed + so your contracts are verified automatically as they're deployed. The contracts are vefified privately,see [hardhat.config.ts](hardhat.config.ts). 2. **▶️ Action**: Run a first set of transactions: submit 1 tx to multisig, do two approvals and optionally execute it. - Use the script `npm run multisig-play:ropsten`. + Use the script `yarn multisig-play:ropsten`. 3. **▶️ Action**: Copy the address of Multisig from deployment step (also found in `deployments.json`) and paste it into `tenderly.yaml` in place of `MULTISIG_ADDRESS` placeholder. @@ -91,8 +91,8 @@ source demo-setup-scripts/init-env-hardhat.sh Before deploying the action to Tenderly, you can test it out locally. ```bash -cd web3-actions -npm run multisig-local +source demo-setup-scripts/init-env-hardhat.sh +yarn multisig-local ``` 👾 You should get several Discord messages and see some meaningful output. If all went well, you can go on and deploy the diff --git a/multisig-wallet/hardhat.config.ts b/multisig-wallet/hardhat.config.ts index 822ced1..477ed9f 100644 --- a/multisig-wallet/hardhat.config.ts +++ b/multisig-wallet/hardhat.config.ts @@ -1,9 +1,8 @@ -import { HardhatUserConfig } from "hardhat/config"; import "@nomicfoundation/hardhat-toolbox"; -import * as dotenv from "dotenv"; import * as tdly from "@tenderly/hardhat-tenderly"; -import { tenderlyNetwork } from "hardhat"; +import * as dotenv from "dotenv"; import { readFileSync } from "fs"; +import { HardhatUserConfig } from "hardhat/config"; import { Infra as ForkInfra } from "./lib/api/t-forks-clean-recreate"; tdly.setup({ automaticVerifications: true });