Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: cast storage displays wrong values for packed slots #6319

Closed
2 tasks done
pcaversaccio opened this issue Nov 15, 2023 · 19 comments
Closed
2 tasks done

Bug: cast storage displays wrong values for packed slots #6319

pcaversaccio opened this issue Nov 15, 2023 · 19 comments
Assignees
Labels
good first issue Good for newcomers T-bug Type: bug

Comments

@pcaversaccio
Copy link
Contributor

Component

Cast

Have you ensured that all of these are up to date?

  • Foundry
  • Foundryup

What version of Foundry are you on?

forge 0.2.0 (64b0e8f 2023-11-15T14:06:05.905353479Z)

What command(s) is the bug in?

cast storage

Operating System

Linux

Describe the bug

Repro example (replace it with your Etherscan API key of Optimism).

Run:

cast storage --rpc-url https://mainnet.optimism.io --etherscan-api-key <YOUR_API_KEY> 0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2

which returns:

| Name    | Type    | Slot | Offset | Bytes | Value                                            | Contract
                       |
|---------|---------|------|--------|-------|--------------------------------------------------|-----------------------------------------------|
| _owner  | address | 0    | 0      | 20    | 486747459873938072359747357390379788195179410093 | contracts/Create2Deployer.sol:Create2Deployer |
| _paused | bool    | 0    | 20     | 1     | 486747459873938072359747357390379788195179410093 | contracts/Create2Deployer.sol:Create2Deployer |

The value of _paused is set to the _owner value, which however should be simply 0 in this case.

@pcaversaccio pcaversaccio added the T-bug Type: bug label Nov 15, 2023
@gakonst gakonst added this to Foundry Nov 15, 2023
@github-project-automation github-project-automation bot moved this to Todo in Foundry Nov 15, 2023
@mattsse
Copy link
Member

mattsse commented Nov 15, 2023

I see we don't actually handle the offset of the Storage entry

let slot_h256 = B256::from(U256::from_str(&slot.slot)?);
Ok(provider.get_storage_at(address.clone(), slot_h256.to_ethers(), None))

@mattsse mattsse added the good first issue Good for newcomers label Nov 15, 2023
@mattsse
Copy link
Member

mattsse commented Nov 15, 2023

maybe we should also include the raw slot value as hex in the output?

@mattsse
Copy link
Member

mattsse commented Nov 15, 2023

@DoTheBestToGetTheBest this should be straight forward, basically only including the relevant range of the get_storage_at response value determined by the offset

do you want to take this?

@pcaversaccio
Copy link
Contributor Author

maybe we should also include the raw slot value as hex in the output?

Fully support this.

@DoTheBestToGetTheBest
Copy link
Contributor

his should be straight forward, basically only including the relevant range of the get_storage_at response value determined by the offset

Happy to take this

@pcaversaccio
Copy link
Contributor Author

Any update on this? I think this should be fixed sooner rather than later as storage inspection is important during incident analysis and cast storage should be reliable...

@DoTheBestToGetTheBest
Copy link
Contributor

Any update on this? I think this should be fixed sooner rather than later as storage inspection is important during incident analysis and cast storage should be reliable...

still working on it, i'm having bit difficulty to understand how to fix this

@DoTheBestToGetTheBest
Copy link
Contributor

what i'm doing is probably not the right way to fix this error, so i'm trying to understand how i can do it in different way

 let results = futures::future::join_all(futures).await;


    let mut values = Vec::new();
    for (storage_entry, result) in layout.storage.iter().zip(results.into_iter()) {
        let raw_slot_data = result?.to_alloy(); 

        
        let storage_type = layout.types.get(&storage_entry.storage_type)
            .ok_or_else(|| eyre::Error::msg("Storage type not found"))?;
        let num_bytes = storage_type.number_of_bytes.parse::<usize>()
            .map_err(|_| eyre::Error::msg("Invalid number of bytes"))?;

     
        let offset = storage_entry.offset as usize;
        if offset + num_bytes > 32 {
            return Err(eyre::Error::msg("Offset out of bounds"));
        }

        
        let value = match storage_type.label.as_str() {
            "bool" => {
                
                let byte_index = offset / 8;
                let bit_index = offset % 8;
                let relevant_bit = (raw_slot_data.0[byte_index] >> bit_index) & 1;
              
                B256::from(relevant_bit)
            },
            _ => {
                
                let mut bytes = [0u8; 32];
                bytes[32 - num_bytes..].copy_from_slice(&raw_slot_data.0[offset..offset + num_bytes]);
                B256(bytes)
            },
        };

        values.push(value);

@DoTheBestToGetTheBest
Copy link
Contributor

sorry for the late guys

@mattsse
Copy link
Member

mattsse commented Nov 20, 2023

please open a PR so we can review,

I think you just need to slice the storage slot accordingly

@pcaversaccio
Copy link
Contributor Author

Guys, I don't wanna be a pain in the ass, but can we please get this fixed?

@DoTheBestToGetTheBest
Copy link
Contributor

Guys, I don't wanna be a pain in the ass, but can we please get this fixed?

it is already fixed :)

@pcaversaccio
Copy link
Contributor Author

Guys, I don't wanna be a pain in the ass, but can we please get this fixed?

it is already fixed :)

Your PR is still open and I just tried it with the latest cast version cast 0.2.0 (d4e6b43 2023-12-04T00:22:30.496154195Z) which gives me the following:

| Name    | Type    | Slot | Offset | Bytes | Value                                            | Hex Value
                                            | Contract                                      |
|---------|---------|------|--------|-------|--------------------------------------------------|--------------------------------------------------------------------|-----------------------------------------------|
| _owner  | address | 0    | 0      | 20    | 486747459873938072359747357390379788195179410093 | 0x000000000000000000000000554282cf65b42fc8fddc6041eb24ce5e8a0632ad | contracts/Create2Deployer.sol:Create2Deployer |
| _paused | bool    | 0    | 20     | 1     | 486747459873938072359747357390379788195179410093 | 0x000000000000000000000000554282cf65b42fc8fddc6041eb24ce5e8a0632ad | contracts/Create2Deployer.sol:Create2Deployer |

The value for _paused is not 0x000000000000000000000000554282cf65b42fc8fddc6041eb24ce5e8a0632ad but should be simply 0x00.

@DoTheBestToGetTheBest
Copy link
Contributor

DoTheBestToGetTheBest commented Dec 4, 2023

Guys, I don't wanna be a pain in the ass, but can we please get this fixed?

it is already fixed :)

Your PR is still open and I just tried it with the latest cast version cast 0.2.0 (d4e6b43 2023-12-04T00:22:30.496154195Z) which gives me the following:

| Name    | Type    | Slot | Offset | Bytes | Value                                            | Hex Value
                                            | Contract                                      |
|---------|---------|------|--------|-------|--------------------------------------------------|--------------------------------------------------------------------|-----------------------------------------------|
| _owner  | address | 0    | 0      | 20    | 486747459873938072359747357390379788195179410093 | 0x000000000000000000000000554282cf65b42fc8fddc6041eb24ce5e8a0632ad | contracts/Create2Deployer.sol:Create2Deployer |
| _paused | bool    | 0    | 20     | 1     | 486747459873938072359747357390379788195179410093 | 0x000000000000000000000000554282cf65b42fc8fddc6041eb24ce5e8a0632ad | contracts/Create2Deployer.sol:Create2Deployer |

The value for _paused is not 0x000000000000000000000000554282cf65b42fc8fddc6041eb24ce5e8a0632ad but should be simply 0x00.

it's not already merged with main branch, i don't know why, but the bug should be fixed with the pr :)

@pcaversaccio
Copy link
Contributor Author

@mattsse what's the expected timeline for merging the fix PR?

@mattsse
Copy link
Member

mattsse commented Dec 4, 2023

reviewing asap,
sorry forgot about it -.-

@plotchy
Copy link
Contributor

plotchy commented Jan 21, 2024

The #6370 PR mentions further downstream improvements in a PR. Adding an example for bool offset calculating values as not 0 or 1

reproduce:

cast storage --rpc-url https://mainnet.optimism.io --etherscan-api-key T2KRFNUMEN4U8XZQ87YCN82I3AF6XE21NF 0xB67c152E69217b5aCB85A2e19dF13423351b0E27

what:

  • isUserCancelEnabled is a bool and is 256
  • allowUserCloseOnly is a bool and is 16777216
| Name                          | Type                                                            | Slot | Offset | Bytes | Value                                             | Hex Value                                                          | Contract                                           |
|-------------------------------|-----------------------------------------------------------------|------|--------|-------|---------------------------------------------------|--------------------------------------------------------------------|----------------------------------------------------|
| gov                           | address                                                         | 0    | 0      | 20    | 1352965747418285184211909460723571462248744342032 | 0x000000000000000000000000ecfd15165d994c2766fbe0d6bacdc2e8dedfd210 | contracts/perp/PositionManager.sol:PositionManager |
| _status                       | uint256                                                         | 1    | 0      | 32    | 1                                                 | 0x0000000000000000000000000000000000000000000000000000000000000001 | contracts/perp/PositionManager.sol:PositionManager |
| admin                         | address                                                         | 2    | 0      | 20    | 1352965747418285184211909460723571462248744342032 | 0x000000000000000000000000ecfd15165d994c2766fbe0d6bacdc2e8dedfd210 | contracts/perp/PositionManager.sol:PositionManager |
| feeCalculator                 | address                                                         | 3    | 0      | 20    | 1297482016264593221714872710065075000476194625473 | 0x000000000000000000000000e3451b170806aab3e24b5cd03a331c1ccdb4d7c1 | contracts/perp/PositionManager.sol:PositionManager |
| oracle                        | address                                                         | 4    | 0      | 20    | 241116142622541106669066767052022920958068430970  | 0x0000000000000000000000002a3c0592dcb58accd346ccee2bb46e3fb744987a | contracts/perp/PositionManager.sol:PositionManager |
| referralStorage               | address                                                         | 5    | 0      | 20    | 1224602325975115131568536406232630666650384091454 | 0x000000000000000000000000d6811146780d50d24bd3475acb23c2118034493e | contracts/perp/PositionManager.sol:PositionManager |
| minExecutionFee               | uint256                                                         | 6    | 0      | 32    | 20000                                             | 0x0000000000000000000000000000000000000000000000000000000000004e20 | contracts/perp/PositionManager.sol:PositionManager |
| minBlockDelayKeeper           | uint256                                                         | 7    | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| minTimeExecuteDelayPublic     | uint256                                                         | 8    | 0      | 32    | 180                                               | 0x00000000000000000000000000000000000000000000000000000000000000b4 | contracts/perp/PositionManager.sol:PositionManager |
| minTimeCancelDelayPublic      | uint256                                                         | 9    | 0      | 32    | 180                                               | 0x00000000000000000000000000000000000000000000000000000000000000b4 | contracts/perp/PositionManager.sol:PositionManager |
| maxTimeDelay                  | uint256                                                         | 10   | 0      | 32    | 1800                                              | 0x0000000000000000000000000000000000000000000000000000000000000708 | contracts/perp/PositionManager.sol:PositionManager |
| isUserExecuteEnabled          | bool                                                            | 11   | 0      | 1     | 1                                                 | 0x0000000000000000000000000000000000000000000000000000000000000001 | contracts/perp/PositionManager.sol:PositionManager |
| isUserCancelEnabled           | bool                                                            | 11   | 1      | 1     | 256                                               | 0x0000000000000000000000000000000000000000000000000000000000000100 | contracts/perp/PositionManager.sol:PositionManager |
| allowPublicKeeper             | bool                                                            | 11   | 2      | 1     | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| allowUserCloseOnly            | bool                                                            | 11   | 3      | 1     | 16777216                                          | 0x0000000000000000000000000000000000000000000000000000000001000000 | contracts/perp/PositionManager.sol:PositionManager |
| openPositionRequestKeys       | bytes32[]                                                       | 12   | 0      | 32    | 27359                                             | 0x0000000000000000000000000000000000000000000000000000000000006adf | contracts/perp/PositionManager.sol:PositionManager |
| closePositionRequestKeys      | bytes32[]                                                       | 13   | 0      | 32    | 16981                                             | 0x0000000000000000000000000000000000000000000000000000000000004255 | contracts/perp/PositionManager.sol:PositionManager |
| openPositionRequestKeysStart  | uint256                                                         | 14   | 0      | 32    | 27359                                             | 0x0000000000000000000000000000000000000000000000000000000000006adf | contracts/perp/PositionManager.sol:PositionManager |
| closePositionRequestKeysStart | uint256                                                         | 15   | 0      | 32    | 16981                                             | 0x0000000000000000000000000000000000000000000000000000000000004255 | contracts/perp/PositionManager.sol:PositionManager |
| isPositionKeeper              | mapping(address => bool)                                        | 16   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| openPositionsIndex            | mapping(address => uint256)                                     | 17   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| openPositionRequests          | mapping(bytes32 => struct PositionManager.OpenPositionRequest)  | 18   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| closePositionsIndex           | mapping(address => uint256)                                     | 19   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| closePositionRequests         | mapping(bytes32 => struct PositionManager.ClosePositionRequest) | 20   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| managers                      | mapping(address => bool)                                        | 21   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| approvedManagers              | mapping(address => mapping(address => bool))                    | 22   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |

grandizzy added a commit to grandizzy/foundry that referenced this issue Feb 21, 2024
mattsse pushed a commit that referenced this issue Feb 21, 2024
#7194)

* issue 6319: copy raw sliced value as tail in new value to be converted

* Add #6319 test
@grandizzy
Copy link
Collaborator

The #6370 PR mentions further downstream improvements in a PR. Adding an example for bool offset calculating values as not 0 or 1

reproduce:

cast storage --rpc-url https://mainnet.optimism.io --etherscan-api-key T2KRFNUMEN4U8XZQ87YCN82I3AF6XE21NF 0xB67c152E69217b5aCB85A2e19dF13423351b0E27

what:

* isUserCancelEnabled is a bool and is 256

* allowUserCloseOnly is a bool and is 16777216
| Name                          | Type                                                            | Slot | Offset | Bytes | Value                                             | Hex Value                                                          | Contract                                           |
|-------------------------------|-----------------------------------------------------------------|------|--------|-------|---------------------------------------------------|--------------------------------------------------------------------|----------------------------------------------------|
| gov                           | address                                                         | 0    | 0      | 20    | 1352965747418285184211909460723571462248744342032 | 0x000000000000000000000000ecfd15165d994c2766fbe0d6bacdc2e8dedfd210 | contracts/perp/PositionManager.sol:PositionManager |
| _status                       | uint256                                                         | 1    | 0      | 32    | 1                                                 | 0x0000000000000000000000000000000000000000000000000000000000000001 | contracts/perp/PositionManager.sol:PositionManager |
| admin                         | address                                                         | 2    | 0      | 20    | 1352965747418285184211909460723571462248744342032 | 0x000000000000000000000000ecfd15165d994c2766fbe0d6bacdc2e8dedfd210 | contracts/perp/PositionManager.sol:PositionManager |
| feeCalculator                 | address                                                         | 3    | 0      | 20    | 1297482016264593221714872710065075000476194625473 | 0x000000000000000000000000e3451b170806aab3e24b5cd03a331c1ccdb4d7c1 | contracts/perp/PositionManager.sol:PositionManager |
| oracle                        | address                                                         | 4    | 0      | 20    | 241116142622541106669066767052022920958068430970  | 0x0000000000000000000000002a3c0592dcb58accd346ccee2bb46e3fb744987a | contracts/perp/PositionManager.sol:PositionManager |
| referralStorage               | address                                                         | 5    | 0      | 20    | 1224602325975115131568536406232630666650384091454 | 0x000000000000000000000000d6811146780d50d24bd3475acb23c2118034493e | contracts/perp/PositionManager.sol:PositionManager |
| minExecutionFee               | uint256                                                         | 6    | 0      | 32    | 20000                                             | 0x0000000000000000000000000000000000000000000000000000000000004e20 | contracts/perp/PositionManager.sol:PositionManager |
| minBlockDelayKeeper           | uint256                                                         | 7    | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| minTimeExecuteDelayPublic     | uint256                                                         | 8    | 0      | 32    | 180                                               | 0x00000000000000000000000000000000000000000000000000000000000000b4 | contracts/perp/PositionManager.sol:PositionManager |
| minTimeCancelDelayPublic      | uint256                                                         | 9    | 0      | 32    | 180                                               | 0x00000000000000000000000000000000000000000000000000000000000000b4 | contracts/perp/PositionManager.sol:PositionManager |
| maxTimeDelay                  | uint256                                                         | 10   | 0      | 32    | 1800                                              | 0x0000000000000000000000000000000000000000000000000000000000000708 | contracts/perp/PositionManager.sol:PositionManager |
| isUserExecuteEnabled          | bool                                                            | 11   | 0      | 1     | 1                                                 | 0x0000000000000000000000000000000000000000000000000000000000000001 | contracts/perp/PositionManager.sol:PositionManager |
| isUserCancelEnabled           | bool                                                            | 11   | 1      | 1     | 256                                               | 0x0000000000000000000000000000000000000000000000000000000000000100 | contracts/perp/PositionManager.sol:PositionManager |
| allowPublicKeeper             | bool                                                            | 11   | 2      | 1     | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| allowUserCloseOnly            | bool                                                            | 11   | 3      | 1     | 16777216                                          | 0x0000000000000000000000000000000000000000000000000000000001000000 | contracts/perp/PositionManager.sol:PositionManager |
| openPositionRequestKeys       | bytes32[]                                                       | 12   | 0      | 32    | 27359                                             | 0x0000000000000000000000000000000000000000000000000000000000006adf | contracts/perp/PositionManager.sol:PositionManager |
| closePositionRequestKeys      | bytes32[]                                                       | 13   | 0      | 32    | 16981                                             | 0x0000000000000000000000000000000000000000000000000000000000004255 | contracts/perp/PositionManager.sol:PositionManager |
| openPositionRequestKeysStart  | uint256                                                         | 14   | 0      | 32    | 27359                                             | 0x0000000000000000000000000000000000000000000000000000000000006adf | contracts/perp/PositionManager.sol:PositionManager |
| closePositionRequestKeysStart | uint256                                                         | 15   | 0      | 32    | 16981                                             | 0x0000000000000000000000000000000000000000000000000000000000004255 | contracts/perp/PositionManager.sol:PositionManager |
| isPositionKeeper              | mapping(address => bool)                                        | 16   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| openPositionsIndex            | mapping(address => uint256)                                     | 17   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| openPositionRequests          | mapping(bytes32 => struct PositionManager.OpenPositionRequest)  | 18   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| closePositionsIndex           | mapping(address => uint256)                                     | 19   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| closePositionRequests         | mapping(bytes32 => struct PositionManager.ClosePositionRequest) | 20   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| managers                      | mapping(address => bool)                                        | 21   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |
| approvedManagers              | mapping(address => mapping(address => bool))                    | 22   | 0      | 32    | 0                                                 | 0x0000000000000000000000000000000000000000000000000000000000000000 | contracts/perp/PositionManager.sol:PositionManager |

there's a fix available for this in latest nightly, mind to recheck and report if you see any other discrepancies? thank you

@grandizzy
Copy link
Collaborator

@mattsse this one can be closed

@mattsse mattsse closed this as completed Apr 16, 2024
@jenpaff jenpaff moved this from Todo to Completed in Foundry Sep 30, 2024
zerosnacks added a commit that referenced this issue Oct 24, 2024
…ptimism explorer (#9182)

* fix failing test

* update test to use contract relevant to ticket #6319

* get more advanced test w/ packed bool in slot 3
nbaztec added a commit to matter-labs/foundry-zksync that referenced this issue Nov 5, 2024
* fix: respect `--auth` in `cast call` and `cast estimate` (#9120)

* fix: respect --auth in cast call and cast estimate

* access list parser

* fix(cheatcodes): convert fixed bytes to bytes in vm.rpc tuple result (#9117)

* fix(cheatcodes): convert fixed bytes to bytes in vm.rpc tuple result

* Changes after review: recursive convert_to_bytes fn

* feat(forge): add `compiler` subcommand (#7909)

* feat(forge): add solc subcommand and utilities

* style: improve formatting in solc.rs file

* fix: merge

* add json compatible output

* add basic tests

* add basic tests

* clean up

* finish tests

* add skip flag

* add vyper for unit tests

* move tests, pin compiler version, use forgetest!

* update CI test location for target Python / Vyper

* update foundry-compilers crate

* Update crates/forge/bin/cmd/compiler.rs

Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>

* `compiler` command is sync, remove conditions on CI for Vyper / Python installs

* is_jsonlines -> is_json

---------

Co-authored-by: zerosnacks <zerosnacks@protonmail.com>
Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>
Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>

* feat(forge): add max supported EVM version in compiler -vv (#9129)

* feat(forge): add max supported EVM version in compiler -v

* shorter message, displayed on -vv verbosity

* match on verbosity

* Respect verbosity in json, nicer json output

* Redact default EVM version in tests

* make --json output not output paths in verbosity mode 0, equivalent of non-verbose text mode

---------

Co-authored-by: zerosnacks <zerosnacks@protonmail.com>

* chore: bump `foundry-compilers` to include Vyper fix (#9133)

bump foundry-compilers to include Vyper fix: foundry-rs/compilers#213

* fix(cast): do not strip 0x / hex decode message before EIP-191 hashing (#9130)

* fix(cast): do not strip 0x / hex decode message before encoding

* Pass message directly to eip191_hash_message

* feat(`anvil`): `wallet_` namespace + inject P256BatchDelegation + executor (#9110)

* feat(anvil-rpc): wallet_ namespace

* feat: init sponsor and delegation contract in backend

* wallet_sendTransaction

* wallet_sendTransaction

* update p256 runtime code

* nit P256_DELEGATION_CONTRACT addr

* use correct runtime codes

* fix

* doc nits

* fix

* feat: anvil_addCapability

* nit

* feat: anvil_setExecutor

* tests

* fix: dont set state root (#9134)

* chore: alias wallet_sendTransaction as odyssey_sendTransaction (#9137)

chore: alias wallet_sendTransaction

* feat(`forge build`): add initcode size check (#9116)

* Adds init code size limit check & column to table.

* Adds option to ignore init code size check during --size output.

* Updates tests with new column for --sizes table.

* Adds test helpers for forge CLI.

* Implements test for init code size limit as per EIP-3860

* Adds test for --ignore-eip-3860

* Fixes for Cargo +nightly fmt warnings.

* Refactors both contract size functions into one with a boolean arg.

* Adds alias for --ignore-eip-3860 to --ignore-initcode-size.

* Brings back the original comments.

* Update compile.rs

* Changes --ignore-eip-3860 to be a boolean field.

* Fixes ranges in table display code and comment punctuation.

* Moves testing helper to existing utils module.

* Improve ranges in table display code.

* Adds output assertions to initcode size check tests.

* Minor change to ranges in display logic for sizes table.

---------

Co-authored-by: mgiagante <251503-mgiagante@users.noreply.gitlab.com>
Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* docs: update CLI help for init code size check (#9145)

* chore(deps): weekly `cargo update` (#9149)

Locking 8 packages to latest compatible versions
    Updating alloy-chains v0.1.38 -> v0.1.40
    Updating anyhow v1.0.89 -> v1.0.90
    Updating cc v1.1.30 -> v1.1.31
    Updating libc v0.2.160 -> v0.2.161
    Updating prettyplease v0.2.22 -> v0.2.23
    Updating serde_json v1.0.128 -> v1.0.132
    Updating syn v2.0.79 -> v2.0.80
    Updating unicase v2.7.0 -> v2.8.0
note: pass `--verbose` to see 39 unchanged dependencies behind latest

Co-authored-by: mattsse <19890894+mattsse@users.noreply.github.com>

* feat(`forge build`): `--watch` flag now watches `foundry.toml` config… (#9148)

feat(`forge build`): `--watch` flag now watches `foundry.toml` config changes

* fix: script simulation with default sender (#9042)

* add test

* fix: ensure correct sender nonce when dry-running script in fork

* fix test

* Fix test

---------

Co-authored-by: grandizzy <grandizzy.the.egg@gmail.com>

* feat(cast): add `json` flag in `cast wallet new-mnemonic` (#9139)

* feat(cast): add `json` flag in `cast wallet new-mnemonic`

* Update crates/cast/bin/cmd/wallet/mod.rs

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* Update crates/cast/tests/cli/main.rs

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* chore: adjust `wallet_mnemonic_from_entropy` to generate three accounts instead of one

* Update crates/cast/bin/cmd/wallet/mod.rs

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* fix: preserve check-summed format for addresses

* chore: simplify code

* fix: rustfmt

---------

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* fix(`anvil`): use header.number not best_number (#9151)

* fix(`anvil`): use header.number not best_number

* test

* ignore test_arbitrum_fork_block_number

* fix(`anvil`): arb fork mining (#9153)

* fix(`anvil`): use header.number not best_number

* test

* ignore test_arbitrum_fork_block_number

* fix(`anvil`): miner logic for arb-like chains

* clippy

* test

* fix(cheatcodes): improve fork cheatcodes messages (#9141)

fix(cheatcodes): chain report source errors

* feat(`anvil`): support mining with same block.timestamp (#9160)

* feat(`anvil`): support mining with same block.timestamp

* fix timestamp tests

* fix

* chore: format chained error for EvmError (#9169)

* Add debug file dump (#7375)

* Refactored debugger to extract TUI abstraction. Added option to dump debugger context to file as json.

* Update crates/forge/bin/cmd/test/mod.rs

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* Update crates/script/src/lib.rs

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* Cleanup code.

* Added test.

* Reformat code.

* Reformat code.

---------

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* chore(deps): bumps alloy, revm, fork-db (#9150)

* chore(deps): bump alloy, revm, fork-db

* fix: chain_id u64

* use SpecId::Osaka in place of PragueEOF

* fix(`anvil`): test state files - tackle alloy breaking change alloy-rs/alloy#1486

* fix test

* minify state json

* feat: add `foundry_common::shell` to unify log behavior (#9109)

* replace existing shell::println, add macros

* finish replacing shell::println

* remove p_println

* remove redundant quiet or silent variables

* install global shells in binaries

* CastArgs -> Cast, Cast -> CastInstance

* fix tests, always initialize Mutex::new(Shell::new()) on initial access, for some reason cfg!(test) path is not handled when running with tokio tests

* revert .quiet(true)

* add back quiet

* undo CastInstance -> Cast, Cast -> CastArgs

* add global --json format

* use global --json flag

* revert sequence / multisequence save silent mode

* fix failing tests

* fix tests

* fix tests

* replace cli_warn with sh_warn

* use shell json directly instead of passing in

* clean up, document print modes in respect to --quiet flag

* group shell options under display options

* revert global --json flag

* remove redundant import

* fix: quiet

* remove faulty argument conflict test as there is no way to currently assert a conflict between global and local args without custom reject at runtime

* add back conflicts_with quiet flag, global args w/ conflicts_with works fine

* remove yellow()

* Apply suggestions from code review

- update dependencies
- use default

Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>

* fix deprecated terminal_size method

* revert quiet flag, fix os:fd import for windows

* add replacing tests, add back quiet conflicting flag

* make output windows compatible

* to avoid visual regression, style warning message content in yellow, error message content in red - both not bold

* fix docs links

* fix junit throwing mixed content on warnings, avoid modifying global verbosity

* remove set_verbosity shell helper, redundant

* revert default .expect on printing, prefer passing. revert message style formatting - no longer style the message

* fix doc test, fix formatting

* fix merge issues

---------

Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>

* chore: refactor debugger dump code (#9170)

chore: refactor debugger code

* fix(anvil): Apply state overrides in debug_traceCall (#9172)

* fix(anvil): Apply state overrides in debug_traceCall

Co-authored-by: mixy1 <michael_debono@hotmail.com>

* chore(anvil): fix formatting

---------

Co-authored-by: mixy1 <michael_debono@hotmail.com>

* feat(fmt): add `all_params` config - same as `all` but split single param too (#9176)

fet(fmt): add all_params config - smae as all but split single param too

* fix(chisel): on edit fail command only if execution failed (#9155)

* chore: cleanup shell module (#9178)

* chore: add warning on persisted invariant scenario failure (#9171)

* feat(invariant): add basic metrics report (#9158)

* feat(invariant): add basic metrics report

* Put metrics behind show-metrics invariant config

* fix: add back `silent` option in Anvil's `NodeConfig` (#9181)

* add quiet handling for Anvil tests using NodeConfig

* add back `silent` flag, inheriting default from global shell --quiet setting, overrides as true in test

* fix unrelated failing test

* revert fix, moved to foundry-rs/foundry#9182

* chore(`cast`): fix `storage_layout` test due to request timeouts w/ Optimism explorer (#9182)

* fix failing test

* update test to use contract relevant to ticket foundry-rs/foundry#6319

* get more advanced test w/ packed bool in slot 3

* chore(deps): bump alloy + revm + fork-db (#9183)

* chore(deps): bump alloy + revm + fork-db

* bump alloy-core

* fix(`evm`): detect blob tx and set evm version (#9185)

* fix(`evm`): set blob_excess_gas_and_price (#9186)

* chore(`cast`): enforce `common::shell` for cast binary (#9174)

* enforce common::shell for cast binary

* revert unrelated Makefile change

* revert formatting of commands

* revert accidental fmt changes

* fix(cli): etherlink needs eth_estimateGas for gas calculation (#9188)

* fix(fmt): multiline single param only if func definition is multiline for `all_params` (#9187)

* test: adjust single param multiline expected behavior

* fix: `AllParams` single param multiline condition

* refactor: try simplifying the condition logic

* chore(`chisel`): enforce `common::shell` for chisel binary (#9177)

* enforce common::shell for chisel binary

* revert accidental fmt changes

* change UnrecognizedCommand(e) to use sh_err!

* avoid message painting, use default error formatting for consistency

* revert color changes as this is in a REPL

* avoid double rendering of error prefix

* feat(`cast`): add flag equivalents of parseUnits, formatUnits  (#9165)

* feat: base func for parseunints and formatuints

* test: update doc and tests

* fix: function alias

* test: cast test

* refacctor: helper fucnction

* Update crates/cast/tests/cli/main.rs

* revert: format uints function cattest func name

---------

Co-authored-by: grandizzy <38490174+grandizzy@users.noreply.github.com>

* feat(cast): add `--rpc-timeout` option (#9044)

* feat: add timeout flag and override default rpc timeout value

* fix clippy

* fix: move timeout to rpc args

* refactor: move rpc timeout to RpcOpts

* clippy

* refactor unecessary code

* Apply suggestions from code review

Minor documentation nits

---------

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* chore(tests): bump forge-std version (#9193)

chore: bump forge-std version used for tests

Co-authored-by: DaniPopes <DaniPopes@users.noreply.github.com>

* fix(`anvil`): tag newly created legacy transactions on shadow fork as `Some(0)` (`0x0`) rather than `None` (#9195)

* mark legacy transaction type as 0x0 or Some(0) rather than None

* return as Some(0) for legacy tx

* revert Some(0) change per EIP-2718 spec

* chore: silence logger if silent (#9199)

* test: add test for rlp data (#9200)

* fix(anvil): correctly set hardfork-specific block fields (#9202)

* fix(anvil): correctly set hardfork-specific block fields

* fmt

* chore(deps): weekly `cargo update` (#9206)

Locking 26 packages to latest compatible versions
    Updating alloy-chains v0.1.40 -> v0.1.42
    Updating anstream v0.6.15 -> v0.6.17
    Updating anstyle v1.0.8 -> v1.0.9
    Updating anstyle-parse v0.2.5 -> v0.2.6
    Updating anstyle-query v1.1.1 -> v1.1.2
    Updating anstyle-wincon v3.0.4 -> v3.0.6
    Updating aws-config v1.5.8 -> v1.5.9
    Updating aws-sdk-kms v1.47.0 -> v1.48.0
    Updating aws-sdk-sso v1.46.0 -> v1.47.0
    Updating aws-sdk-ssooidc v1.47.0 -> v1.48.0
    Updating aws-sdk-sts v1.46.0 -> v1.47.0
    Updating aws-sigv4 v1.2.4 -> v1.2.5
    Updating aws-smithy-runtime v1.7.2 -> v1.7.3
    Updating aws-smithy-types v1.2.7 -> v1.2.8
    Updating colorchoice v1.0.2 -> v1.0.3
    Updating libm v0.2.8 -> v0.2.9
    Updating op-alloy-consensus v0.5.0 -> v0.5.1
    Updating op-alloy-rpc-types v0.5.0 -> v0.5.1
    Updating pin-project v1.1.6 -> v1.1.7
    Updating pin-project-internal v1.1.6 -> v1.1.7
    Updating pin-project-lite v0.2.14 -> v0.2.15
    Updating regex v1.11.0 -> v1.11.1
    Updating scale-info v2.11.4 -> v2.11.5
    Updating scale-info-derive v2.11.4 -> v2.11.5
    Updating scc v2.2.2 -> v2.2.4
    Updating wasm-streams v0.4.1 -> v0.4.2
note: pass `--verbose` to see 13 unchanged dependencies behind latest

Co-authored-by: mattsse <19890894+mattsse@users.noreply.github.com>

* fix: include withdrawals root in response (#9208)

* fix(script): correctly detect additional contracts (#9207)

* add test

* fix(script): correctly detect additional contracts

* fix

* fix(`cast block`): ensure to print all fields (#9209)

fix(cast block): ensure to print all fields

* feat(cast): add --int flag to from-rlp (#9210)

* bet

* fmt

* bet

* bet

* remove unneccessary validation

* chore: try from eyre:Result for TraceResult (display chained error) (#9212)

* feat(`forge install`): add `@tag=` `@branch=` `@rev=` specific refs (#9214)

* fix(`forge install`): add @tag= @Branch= @commit= for refs

* Consistent @Rev=

* feat: make `--gas-report` w/ `--json` output one JSON blob and add `contract_path` to output (#9216)

* show resolved contract name

* split out helpers

* add basic test for multiple selectors resolve to same name w/ different args

* collect JSON gas reports and render it as one blob

* update tests

* avoid unnecessary nesting of non-overloaded function names

* fix(forge create): set skip_is_verified_check: true (#9222)

fix(verify): set skip_is_verified_check: true for deploy (similar to broadcast)

* feat(cast) add creation-code method [#8973] (#9029)

* feat(cast) add creation-code method [#8973]

* Fix typo

* Fix CI

* Code review fixes

* Add creation-code flags and creation-args

* Update comments

* eyre style fixes

* typo

* use r#".."# for snapbox

* Apply suggestions from code review

* fix test regression

* tag arguments as mutually exclusive

* use unreachable!

* Rename and add abi_path param

* Decode constructor args

* Update crates/cast/bin/cmd/constructor_args.rs

* fix test

* Update crates/cast/bin/args.rs

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* Update crates/cast/bin/cmd/creation_code.rs

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* Update crates/cast/bin/cmd/creation_code.rs

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* Fix formatting

* Code review fixes

---------

Co-authored-by: zerosnacks <zerosnacks@protonmail.com>
Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* refactor: simplify `merge_db_account_data` (#9223)

* refactor: simplify `merge_db_account_data`

* chore: fmt

* test: update test (#9226)

* style: smol refactor (#9224)

* fix: allow_hyphen_values for constructor args (#9225)

* fix: unescape ints

* use allow_hyp

* chore(meta): update SECURITY.md (#9230)

* fix(`--gas-report`): add back signatures, even if empty, avoid nesting multiple selectors (#9229)

* add back signatures, even if empty, flatten multiple selectors per feedback foundry-rs/foundry#9216 (comment)

* avoid manually serializing `gas_info`, already implements serialize

* feat(`cheatcodes`): access broadcast artifacts (#9107)

* refac(`script`): extract script sequence and related types to new crate

* replace MultiChainSequence in script crate

* replace TransactionWithMetadata and AdditionalContract

* replace ScriptSequence

* replace all underlying ScriptSequence and related types

* doc nits

* add `ScriptTransactionBuilder`

* remove `TxWithMetadata`

* mv verify fns and use `ScriptSequence` directly

* clippy

* feat(`cheatcodes`): vm.getDeployment

* cargo cheats

* getBroadcast by txType

* get all broadcast txs

* nits

* fix

* feat: getBroadcasts by txType

* nit

* fix

* mv `BroadcastReader` to script-sequence

* fix: search all broadcast files and then apply filters

* fix: ignore run-latest to avoid duplicating entries

* nit

* sort by descending block number

* tests

* feat(`CheatsConfig`): add `broadcast` dir path

* feat: read multichain sequences

* nit

* minify json

* use walkdir

* fix

* fix path

* feat: getDeployment cheatcodes

* feat: read broadcasts with multiple tx types

* test: getDeployment

* nit

* fmt

* fix

* nit

* cli test

* nit

* remove solidity test

* nit

* fix(`anvil`): set `storage.best_number` correctly (#9215)

* feat(`anvil`): persist accounts in `ForkedStorage`

* load accounts

* test

* fix(`anvil`): override storage.best_number with fork_block_num if loading state on a fork url

* Revert "load accounts"

This reverts commit b650f56fe52f79be3eb7c8ab4d2ad1aaca08a32f.

* Revert "feat(`anvil`): persist accounts in `ForkedStorage`"

This reverts commit 456da156e07b1ede01c08c4f48ef36eed4094f17.

* nit

---------

Co-authored-by: grandizzy <grandizzy.the.egg@gmail.com>

* nit

---------

Co-authored-by: grandizzy <grandizzy.the.egg@gmail.com>

* feat(`--gas-report`): add option to include tests (#9232)

feat(`--gas-report`): add option to show gas for tests

* fix: remove steps after steps tracing cheatcodes are done (#9234)

* fix: rename flag as_int -> as-int (#9235)

* fix: rename flag as_int -> as-int

* Update crates/cast/bin/args.rs

Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>

---------

Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>

* feat(cast): add string-decode to decode string (#9237)

* feat(cast): add error-decode to decode error string

Signed-off-by: jsvisa <delweng@gmail.com>

* feat(cast): error-decode -> string-decode

Signed-off-by: jsvisa <delweng@gmail.com>

* add test case for string-decode

Signed-off-by: jsvisa <delweng@gmail.com>

* Apply suggestions from code review

---------

Signed-off-by: jsvisa <delweng@gmail.com>
Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* chore: avoid unnecessary `mut` (#9238)

* fix(anvil): on anvil_mine jump to next timestamp before mine new block (#9241)

* fix(anvil): on anvil_mine jump to next timestamp before mine new block

* Fix unrelated clippy, simplify test

* fix(`deps`): update `alloy-chains` to fix Celo explorer API URL (#9242)

chore(deps): weekly `cargo update`

     Locking 32 packages to latest compatible versions
    Updating alloy-chains v0.1.42 -> v0.1.45
    Updating alloy-dyn-abi v0.8.9 -> v0.8.10
    Updating alloy-json-abi v0.8.9 -> v0.8.10
    Updating alloy-primitives v0.8.9 -> v0.8.10
    Updating alloy-sol-macro v0.8.9 -> v0.8.10
    Updating alloy-sol-macro-expander v0.8.9 -> v0.8.10
    Updating alloy-sol-macro-input v0.8.9 -> v0.8.10
    Updating alloy-sol-type-parser v0.8.9 -> v0.8.10
    Updating alloy-sol-types v0.8.9 -> v0.8.10
    Updating anyhow v1.0.91 -> v1.0.92
    Updating aws-sdk-kms v1.48.0 -> v1.49.0
    Updating aws-sdk-sso v1.47.0 -> v1.48.0
    Updating aws-sdk-ssooidc v1.48.0 -> v1.49.0
    Updating aws-sdk-sts v1.47.0 -> v1.48.0
    Updating clap_complete v4.5.35 -> v4.5.36
    Updating divan v0.1.14 -> v0.1.15
    Updating divan-macros v0.1.14 -> v0.1.15
    Updating hyper-util v0.1.9 -> v0.1.10
    Updating libm v0.2.9 -> v0.2.11
    Updating op-alloy-consensus v0.5.1 -> v0.5.2
    Updating op-alloy-rpc-types v0.5.1 -> v0.5.2
    Updating quinn-udp v0.5.5 -> v0.5.6
    Updating reqwest v0.12.8 -> v0.12.9
    Updating rustix v0.38.37 -> v0.38.38
    Updating rustls v0.23.15 -> v0.23.16
    Updating serde v1.0.213 -> v1.0.214
    Updating serde_derive v1.0.213 -> v1.0.214
    Updating snapbox v0.6.18 -> v0.6.19
    Updating syn v2.0.85 -> v2.0.86
    Updating syn-solidity v0.8.9 -> v0.8.10
    Updating thiserror v1.0.65 -> v1.0.66
    Updating thiserror-impl v1.0.65 -> v1.0.66
note: pass `--verbose` to see 14 unchanged dependencies behind latest

Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>

* fix: reset shell colors based on the input style (#9243)

* fix: avoid deadlock in nested shell calls (#9245)

* fix: avoid deadlock in nested shell calls

* cleanup

* anvil: Correctly set HF fields for Genesis block (#9248)

Some fields were missing for some HF, leading to an invalid Genesis
block hash.

* perf: cap default poll interval (#9250)

* fix: better error handling when waiting for receipt (#9253)

* fix: better error handling when waiting for receipt

* fmt

* fix: use `Debug` when formatting errors (#9251)

* fix: use Debug when formatting errors

* sh_err

* rm newline in handler

* chore(deps): weekly `cargo update` (#9254)

Locking 5 packages to latest compatible versions
    Updating alloy-chains v0.1.45 -> v0.1.46
    Updating anstyle v1.0.9 -> v1.0.10
    Updating cc v1.1.31 -> v1.1.34
    Updating jiff v0.1.13 -> v0.1.14
    Updating syn v2.0.86 -> v2.0.87
note: pass `--verbose` to see 14 unchanged dependencies behind latest

Co-authored-by: mattsse <19890894+mattsse@users.noreply.github.com>

* fix(`forge doc`): display custom natspec tag (#9257)

fix(forge doc): display custom natspec tag

* chore: do not print anvil launch info if silent (#9259)

chore: do not print anvil port if silent

* feat: add global `--json` flag (#9244)

* add global json --flag

* finish port to shell::is_json

* fix test

* update message

* very strange stalling bug, fixed by assignment?

* remove jobs -j shorthand clashing with global json flag

* fix test after -j change

* fix doctests

* temporarily disable junit conflict, revert -j as --json shorthand

* tag --color, --quiet as conflicting with --json

* update tests to be aware of global args to avoid `Argument or group quiet specified in conflicts_with* for junit does not exist` error

* fix missed test

* make sure tests throw on non-matching command

* use --format-json in command to show alias works

* chore(`forge`): enforce `common::shell` for `forge` crate (#9231)

* enforce common shell for forge crate

* revert clippy.toml

* fix tests

* avoid empty printlns

* fix missed eprint / print

* avoid style regression

* fix(remappings): check if remapping to add starts with existing remapping name (#9246)

* fix(remappings): check if remapping to add starts with existing remapping name

* Push remapping fn doesn't have to be pub, proper test remappings

* chore: ignore flaky rostock chain test (#9261)

* fix(anvil): set auto-unlock an alias of auto-impersonate (#9256)

* fix(anvil): alias --auto-unlock of auto-impersonate

Signed-off-by: jsvisa <delweng@gmail.com>

* feat(anvil): add more clear help messge for auto-impersonate

Signed-off-by: jsvisa <delweng@gmail.com>

---------

Signed-off-by: jsvisa <delweng@gmail.com>

* update alloy fork

---------

Signed-off-by: jsvisa <delweng@gmail.com>
Co-authored-by: Arsenii Kulikov <klkvrr@gmail.com>
Co-authored-by: grandizzy <38490174+grandizzy@users.noreply.github.com>
Co-authored-by: jpgonzalezra <jpgonzalezra@gmail.com>
Co-authored-by: zerosnacks <zerosnacks@protonmail.com>
Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com>
Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>
Co-authored-by: Yash Atreya <44857776+yash-atreya@users.noreply.github.com>
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
Co-authored-by: mgiagante <5287175+mgiagante@users.noreply.github.com>
Co-authored-by: mgiagante <251503-mgiagante@users.noreply.gitlab.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: mattsse <19890894+mattsse@users.noreply.github.com>
Co-authored-by: Léo Vincent <28714795+leovct@users.noreply.github.com>
Co-authored-by: grandizzy <grandizzy.the.egg@gmail.com>
Co-authored-by: Piotr Heilman <1212808+piohei@users.noreply.github.com>
Co-authored-by: Ilias Tsatiris <eliastsatiris@gmail.com>
Co-authored-by: mixy1 <michael_debono@hotmail.com>
Co-authored-by: Pierrick Couderc <pierrick@thrim.me>
Co-authored-by: χ² <88190723+ChiTimesChi@users.noreply.github.com>
Co-authored-by: Kien Trinh <51135161+kien6034@users.noreply.github.com>
Co-authored-by: Panagiotis Ganelis <50522617+PanGan21@users.noreply.github.com>
Co-authored-by: DaniPopes <DaniPopes@users.noreply.github.com>
Co-authored-by: Tuan Tran <tropicaldog17@gmail.com>
Co-authored-by: Paweł Urbanek <contact@pawelurbanek.com>
Co-authored-by: Karrq <franci.dainese@gmail.com>
Co-authored-by: Delweng <delweng@gmail.com>
Co-authored-by: Nicolas Gotchac <ngotchac@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers T-bug Type: bug
Projects
Status: Completed
Development

No branches or pull requests

5 participants