├── .gitignore ├── assets └── price_tracking_example.jpg ├── .rustfmt.toml ├── contracts └── utils │ ├── foundry.toml │ ├── .gitignore │ ├── src │ ├── ArenaToken.sol │ ├── LiquidExchange.sol │ ├── Fetcher.sol │ └── ArenaController.sol │ ├── .github │ └── workflows │ │ └── test.yml │ ├── README.md │ └── test │ └── ModifyLiquidityTest.sol ├── .github └── workflows │ ├── rust.yml │ └── lint.yml ├── src ├── error.rs ├── strategy.rs ├── config.rs ├── engine │ ├── mod.rs │ ├── arbitrageur.rs │ └── inspector.rs ├── feed.rs ├── lib.rs └── arena.rs ├── .gitmodules ├── Cargo.toml ├── LICENSE ├── examples └── template_strategy.rs ├── README.md ├── CONTRIBUTING.md └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /assets/price_tracking_example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ts0yu/arena/HEAD/assets/price_tracking_example.jpg -------------------------------------------------------------------------------- /.rustfmt.toml: -------------------------------------------------------------------------------- 1 | imports_granularity = "Crate" 2 | group_imports = "StdExternalCrate" 3 | 4 | format_code_in_doc_comments = true 5 | 6 | use_field_init_shorthand = true -------------------------------------------------------------------------------- /contracts/utils/foundry.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | src = "src" 3 | out = "out" 4 | libs = ["lib"] 5 | evm-version = "cancun" 6 | # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options 7 | -------------------------------------------------------------------------------- /contracts/utils/.gitignore: -------------------------------------------------------------------------------- 1 | # Compiler files 2 | cache/ 3 | out/ 4 | 5 | # Ignores development broadcast logs 6 | !/broadcast 7 | /broadcast/*/31337/ 8 | /broadcast/**/dry-run/ 9 | 10 | # Docs 11 | docs/ 12 | 13 | # Dotenv file 14 | .env 15 | -------------------------------------------------------------------------------- /contracts/utils/src/ArenaToken.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.8.10; 2 | 3 | import "solmate/tokens/ERC20.sol"; 4 | 5 | contract ArenaToken is ERC20 { 6 | constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol, decimals) {} 7 | 8 | function mint(address receiver, uint256 amount) public returns (bool) { 9 | _mint(receiver, amount); 10 | return true; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.github/workflows/rust.yml: -------------------------------------------------------------------------------- 1 | name: Rust 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | pull_request: 7 | branches: [ "main" ] 8 | 9 | env: 10 | CARGO_TERM_COLOR: always 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v3, foundry-rs/foundry-toolchain@v1 19 | - name: Build 20 | run: cargo build --verbose 21 | - name: Run tests 22 | run: cargo test --verbose -------------------------------------------------------------------------------- /src/error.rs: -------------------------------------------------------------------------------- 1 | use thiserror::Error; 2 | 3 | /// Error type for Arena. 4 | #[derive(Error, Debug)] 5 | pub enum ArenaError { 6 | /// Contract interaction failed. 7 | #[error("alloy contract error {0}")] 8 | ContractError(#[from] alloy_contract::Error), 9 | 10 | /// Pending transaction error. 11 | #[error("alloy pending transaction error {0}")] 12 | PendingTransactionError(#[from] alloy::providers::PendingTransactionError), 13 | 14 | /// Conversion error when parsing ether values. 15 | #[error("alloy conversion error {0}")] 16 | ConversionError(#[from] alloy::primitives::utils::UnitsError), 17 | } 18 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "contracts/v4-core"] 2 | path = contracts/v4-core 3 | url = https://github.com/uniswap/v4-core 4 | [submodule "contracts/lib/forge-std"] 5 | path = contracts/lib/forge-std 6 | url = https://github.com/foundry-rs/forge-std 7 | [submodule "contracts/utils/lib/forge-std"] 8 | path = contracts/utils/lib/forge-std 9 | url = https://github.com/foundry-rs/forge-std 10 | [submodule "contracts/utils/lib/solmate"] 11 | path = contracts/utils/lib/solmate 12 | url = https://github.com/transmissions11/solmate 13 | [submodule "contracts/utils/lib/v4-core"] 14 | path = contracts/utils/lib/v4-core 15 | url = https://github.com/uniswap/v4-core 16 | -------------------------------------------------------------------------------- /src/strategy.rs: -------------------------------------------------------------------------------- 1 | use async_trait::async_trait; 2 | 3 | use super::*; 4 | 5 | /// Represents a strategy that can be run in an [`Arena`]. 6 | #[async_trait] 7 | pub trait Strategy { 8 | /// Initialization function for ths strategy to be run upon simulation startup. 9 | async fn init( 10 | &self, 11 | provider: AnvilProvider, 12 | signal: Signal, 13 | inspector: &mut Box>, 14 | engine: Engine, 15 | ); 16 | 17 | /// Processing function for the strategy to be run each simulation step. 18 | async fn process( 19 | &self, 20 | provider: AnvilProvider, 21 | signal: Signal, 22 | inspector: &mut Box>, 23 | engine: Engine, 24 | ); 25 | } 26 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "arena-core" 3 | version = "0.1.7" 4 | edition = "2021" 5 | repository = "https://github.com/arena-rs/arena" 6 | description = "Framework for holistic economic modelling and simulation of Uniswap v4 strategies, hooks and pools." 7 | license-file = "./LICENSE" 8 | exclude = ["contracts"] 9 | 10 | [dependencies] 11 | csv = "1.1" 12 | rug = "1.25.0" 13 | rand = "0.8.5" 14 | plotly = "0.9.0" 15 | serde_json = "1.0" 16 | rand_distr = "0.4.3" 17 | thiserror = "1.0.63" 18 | async-trait = "0.1.81" 19 | alloy-chains = "0.1.29" 20 | alloy-contract = "0.3.0" 21 | alloy-sol-macro = "0.8.0" 22 | alloy-sol-types = "0.8.0" 23 | alloy-transport-http = "0.3.0" 24 | serde = { version = "1.0", features = ["derive"] } 25 | clap = { version = "4.5.16", features = ["derive"] } 26 | tokio = { version = "1.39.2", features = ["macros", "rt-multi-thread"] } 27 | alloy = { version = "0.3.0", features = ["full", "node-bindings", "json"] } -------------------------------------------------------------------------------- /contracts/utils/.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | pull_request: 6 | workflow_dispatch: 7 | 8 | env: 9 | FOUNDRY_PROFILE: ci 10 | 11 | jobs: 12 | check: 13 | strategy: 14 | fail-fast: true 15 | 16 | name: Foundry project 17 | runs-on: ubuntu-latest 18 | steps: 19 | - uses: actions/checkout@v4 20 | with: 21 | submodules: recursive 22 | 23 | - name: Install Foundry 24 | uses: foundry-rs/foundry-toolchain@v1 25 | with: 26 | version: nightly 27 | 28 | - name: Show Forge version 29 | run: | 30 | forge --version 31 | 32 | - name: Run Forge fmt 33 | run: | 34 | forge fmt --check 35 | id: fmt 36 | 37 | - name: Run Forge build 38 | run: | 39 | forge build --sizes 40 | id: build 41 | 42 | - name: Run Forge tests 43 | run: | 44 | forge test -vvv 45 | id: test 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2024 arena-rs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: lint 2 | 3 | on: 4 | pull_request: 5 | types: [opened, synchronize, reopened] 6 | push: 7 | branches: [main] 8 | 9 | jobs: 10 | fmt: 11 | name: fmt 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - uses: actions/checkout@v3 16 | 17 | - name: install rust toolchain 18 | uses: actions-rs/toolchain@v1 19 | with: 20 | toolchain: nightly 21 | components: rustfmt 22 | - name: git submodule update 23 | run: git submodule update --init --recursive 24 | - name: cargo fmt 25 | run: cargo +nightly fmt --all -- --check 26 | 27 | clippy: 28 | name: clippy 29 | runs-on: ubuntu-latest 30 | 31 | steps: 32 | - uses: actions/checkout@v3 33 | 34 | - name: install rust toolchain 35 | uses: actions-rs/toolchain@v1 36 | with: 37 | toolchain: stable 38 | components: clippy 39 | - name: git submodule update 40 | run: git submodule update --init --recursive 41 | - name: cargo clippy 42 | run: cargo clippy --workspace --all-features -- -D warnings -------------------------------------------------------------------------------- /contracts/utils/README.md: -------------------------------------------------------------------------------- 1 | ## Foundry 2 | 3 | **Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.** 4 | 5 | Foundry consists of: 6 | 7 | - **Forge**: Ethereum testing framework (like Truffle, Hardhat and DappTools). 8 | - **Cast**: Swiss army knife for interacting with EVM smart contracts, sending transactions and getting chain data. 9 | - **Anvil**: Local Ethereum node, akin to Ganache, Hardhat Network. 10 | - **Chisel**: Fast, utilitarian, and verbose solidity REPL. 11 | 12 | ## Documentation 13 | 14 | https://book.getfoundry.sh/ 15 | 16 | ## Usage 17 | 18 | ### Build 19 | 20 | ```shell 21 | $ forge build 22 | ``` 23 | 24 | ### Test 25 | 26 | ```shell 27 | $ forge test 28 | ``` 29 | 30 | ### Format 31 | 32 | ```shell 33 | $ forge fmt 34 | ``` 35 | 36 | ### Gas Snapshots 37 | 38 | ```shell 39 | $ forge snapshot 40 | ``` 41 | 42 | ### Anvil 43 | 44 | ```shell 45 | $ anvil 46 | ``` 47 | 48 | ### Deploy 49 | 50 | ```shell 51 | $ forge script script/Counter.s.sol:CounterScript --rpc-url --private-key 52 | ``` 53 | 54 | ### Cast 55 | 56 | ```shell 57 | $ cast 58 | ``` 59 | 60 | ### Help 61 | 62 | ```shell 63 | $ forge --help 64 | $ anvil --help 65 | $ cast --help 66 | ``` 67 | -------------------------------------------------------------------------------- /src/config.rs: -------------------------------------------------------------------------------- 1 | use alloy::primitives::U256; 2 | 3 | use super::*; 4 | 5 | /// Configuration for the simulation. 6 | pub struct Config { 7 | /// Number of steps to run the simulation for. 8 | pub steps: usize, 9 | 10 | /// Pool manager fee. 11 | pub manager_fee: U256, 12 | 13 | /// Pool tick spacing. 14 | pub tick_spacing: Signed<24, 1>, 15 | 16 | /// Pool hook data. 17 | pub hook_data: Bytes, 18 | 19 | /// Pool sqrt price x96. 20 | pub sqrt_price_x96: Uint<160, 3>, 21 | 22 | /// Pool fee. 23 | pub pool_fee: Uint<24, 1>, 24 | 25 | /// Initial price. 26 | pub initial_price: U256, 27 | 28 | /// Pool hooks. 29 | pub hooks: Address, 30 | } 31 | 32 | impl Config { 33 | /// Public constructor function for a new [`Config`]. 34 | #[allow(clippy::too_many_arguments)] 35 | pub fn new( 36 | steps: usize, 37 | manager_fee: U256, 38 | tick_spacing: Signed<24, 1>, 39 | hook_data: Bytes, 40 | sqrt_price_x96: Uint<160, 3>, 41 | pool_fee: Uint<24, 1>, 42 | initial_price: U256, 43 | hooks: Address, 44 | ) -> Self { 45 | Self { 46 | steps, 47 | manager_fee, 48 | tick_spacing, 49 | hook_data, 50 | sqrt_price_x96, 51 | pool_fee, 52 | initial_price, 53 | hooks, 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/engine/mod.rs: -------------------------------------------------------------------------------- 1 | use alloy::{ 2 | primitives::{Address, Signed, I256}, 3 | providers::{Provider, WalletProvider}, 4 | }; 5 | 6 | use super::*; 7 | use crate::{error::ArenaError, types::controller::ArenaController}; 8 | /// Defines a trait for custom arbitrage strategies. 9 | pub mod arbitrageur; 10 | 11 | /// Defines a trait that allows custom strategy logging and telemetry. 12 | pub mod inspector; 13 | 14 | /// Abstraction to allow strategies to call state changing functions on the PoolManager without having to worry about callbacks. 15 | #[derive(Debug, Clone)] 16 | pub struct Engine { 17 | pub(crate) controller: Address, 18 | } 19 | 20 | #[allow(clippy::redundant_closure)] 21 | impl Engine { 22 | /// Modify pool liquidity. 23 | pub async fn modify_liquidity( 24 | &self, 25 | liquidity_delta: I256, 26 | tick_lower: Signed<24, 1>, 27 | tick_upper: Signed<24, 1>, 28 | hook_data: Bytes, 29 | provider: AnvilProvider, 30 | ) -> Result<(), ArenaError> { 31 | let controller = ArenaController::new(self.controller, provider.clone()); 32 | 33 | controller 34 | .addLiquidity(liquidity_delta, tick_lower, tick_upper, hook_data) 35 | .nonce( 36 | provider 37 | .get_transaction_count(provider.default_signer_address()) 38 | .await 39 | .unwrap(), 40 | ) 41 | .send() 42 | .await 43 | .map_err(ArenaError::ContractError)? 44 | .watch() 45 | .await 46 | .map_err(|e| ArenaError::PendingTransactionError(e))?; 47 | 48 | Ok(()) 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /contracts/utils/src/LiquidExchange.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.17; 3 | 4 | import "solmate/tokens/ERC20.sol"; 5 | import "solmate/utils/FixedPointMathLib.sol"; 6 | import "./ArenaToken.sol"; 7 | 8 | /** 9 | * @dev Implementation of the test interface for Arbiter writing contracts. 10 | */ 11 | contract LiquidExchange { 12 | using FixedPointMathLib for int256; 13 | using FixedPointMathLib for uint256; 14 | 15 | address public arenaTokenX; 16 | address public arenaTokenY; 17 | 18 | uint256 public price; 19 | uint256 constant WAD = 10 ** 18; 20 | 21 | constructor(address arenaTokenX_, address arenaTokenY_, uint256 price_) { 22 | arenaTokenX = arenaTokenX_; 23 | arenaTokenY = arenaTokenY_; 24 | 25 | price = price_; 26 | } 27 | 28 | event PriceChange(uint256 price); 29 | event Swap(address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut, address to); 30 | 31 | function setPrice(uint256 _price) public { 32 | price = _price; 33 | emit PriceChange(price); 34 | } 35 | 36 | function swap(address tokenIn, uint256 amountIn) public { 37 | uint256 amountOut; 38 | address tokenOut; 39 | 40 | if (tokenIn == arenaTokenX) { 41 | tokenOut = arenaTokenY; 42 | amountOut = FixedPointMathLib.mulWadDown(amountIn, price); 43 | } else if (tokenIn == arenaTokenY) { 44 | tokenOut = arenaTokenX; 45 | amountOut = FixedPointMathLib.divWadDown(amountIn, price); 46 | } else { 47 | revert("Invalid token"); 48 | } 49 | 50 | require(ERC20(tokenIn).transferFrom(msg.sender, address(this), amountIn), "Transfer failed"); 51 | require(ERC20(tokenOut).transfer(msg.sender, amountOut), "Transfer failed"); 52 | 53 | emit Swap(tokenIn, tokenOut, amountIn, amountOut, msg.sender); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /contracts/utils/test/ModifyLiquidityTest.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.8.10; 2 | 3 | import {PoolManager} from "v4-core/PoolManager.sol"; 4 | import {PoolModifyLiquidityTest} from "v4-core/test/PoolModifyLiquidityTest.sol"; 5 | import {ArenaToken} from "src/ArenaToken.sol"; 6 | import {PoolKey} from "v4-core/types/PoolKey.sol"; 7 | import {Currency} from "v4-core/types/Currency.sol"; 8 | import {IHooks} from "v4-core/interfaces/IHooks.sol"; 9 | import {IPoolManager} from "v4-core/interfaces/IPoolManager.sol"; 10 | 11 | contract Test { 12 | function test_liquidityAdd() public { 13 | PoolManager poolManager = new PoolManager(0); 14 | PoolModifyLiquidityTest router = new PoolModifyLiquidityTest(poolManager); 15 | 16 | ArenaToken currency0 = new ArenaToken("currency0", "c0", 18); 17 | ArenaToken currency1 = new ArenaToken("currency1", "c1", 18); 18 | 19 | currency0.mint(address(this), type(uint256).max); 20 | currency1.mint(address(this), type(uint256).max); 21 | 22 | currency0.approve(address(router), type(uint256).max); 23 | currency1.approve(address(router), type(uint256).max); 24 | 25 | if (currency0 > currency1) { 26 | (currency0, currency1) = (currency1, currency0); 27 | } 28 | 29 | PoolKey memory poolKey = PoolKey({ 30 | currency0: Currency.wrap(address(currency0)), 31 | currency1: Currency.wrap(address(currency1)), 32 | fee: 4000, 33 | tickSpacing: 2, 34 | hooks: IHooks(address(0)) 35 | }); 36 | 37 | // Represents a 1:1 ratio of assets in the pool. 38 | poolManager.initialize(poolKey, 7922816251426433543950336, ""); 39 | 40 | IPoolManager.ModifyLiquidityParams memory params = 41 | IPoolManager.ModifyLiquidityParams({tickLower: -20, tickUpper: 20, liquidityDelta: 10000000000, salt: ""}); 42 | 43 | router.modifyLiquidity(poolKey, params, ""); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/engine/arbitrageur.rs: -------------------------------------------------------------------------------- 1 | use async_trait::async_trait; 2 | 3 | use super::*; 4 | use crate::{types::controller::ArenaController, AnvilProvider, Signal}; 5 | 6 | /// Generic trait allowing user defined arbitrage strategies. 7 | #[async_trait] 8 | pub trait Arbitrageur { 9 | /// Initialize arbitrageur agent. 10 | async fn init(&mut self, signal: &Signal, provider: AnvilProvider); 11 | 12 | /// Perform an arbitrage based on a [`Signal`]. 13 | async fn arbitrage(&mut self, signal: &Signal, provider: AnvilProvider); 14 | } 15 | 16 | /// Default implementation of an [`Arbitrageur`] that uses the closed-form optimal swap amount to determine the optimal arbitrage. 17 | #[derive(Default)] 18 | pub struct FixedArbitrageur { 19 | /// The fixed amount to swap on each arbitrage opportunity. 20 | pub depth: Signed<256, 4>, 21 | } 22 | 23 | #[async_trait] 24 | impl Arbitrageur for FixedArbitrageur { 25 | async fn init(&mut self, _signal: &Signal, _provider: AnvilProvider) {} 26 | 27 | async fn arbitrage(&mut self, signal: &Signal, provider: AnvilProvider) { 28 | let controller = ArenaController::new(signal.controller, provider.clone()); 29 | 30 | controller 31 | .equalizePrice(self.depth) 32 | .nonce( 33 | provider 34 | .clone() 35 | .get_transaction_count(provider.clone().default_signer_address()) 36 | .await 37 | .unwrap(), 38 | ) 39 | .send() 40 | .await 41 | .unwrap() 42 | .watch() 43 | .await 44 | .unwrap(); 45 | } 46 | } 47 | 48 | /// No-op implementation of an [`Arbitrageur`] for custom usecases. 49 | pub struct EmptyArbitrageur; 50 | 51 | #[async_trait] 52 | impl Arbitrageur for EmptyArbitrageur { 53 | async fn init(&mut self, _signal: &Signal, _provider: AnvilProvider) {} 54 | async fn arbitrage(&mut self, _signal: &Signal, _provider: AnvilProvider) {} 55 | } 56 | -------------------------------------------------------------------------------- /examples/template_strategy.rs: -------------------------------------------------------------------------------- 1 | use alloy::primitives::{Address, Bytes, Signed, Uint, I256}; 2 | use arena_core::{ 3 | arena::{Arena, ArenaBuilder}, 4 | config::Config, 5 | engine::{ 6 | arbitrageur::FixedArbitrageur, 7 | inspector::{EmptyInspector, Inspector}, 8 | Engine, 9 | }, 10 | feed::OrnsteinUhlenbeck, 11 | strategy::Strategy, 12 | AnvilProvider, Signal, 13 | }; 14 | use async_trait::async_trait; 15 | 16 | struct TemplateStrategy; 17 | 18 | #[async_trait] 19 | impl Strategy for TemplateStrategy { 20 | async fn init( 21 | &self, 22 | provider: AnvilProvider, 23 | _signal: Signal, 24 | _inspector: &mut Box>, 25 | engine: Engine, 26 | ) { 27 | // provide a fixed amount of liquidity upon runtime initialization to the pool across the full tick range. 28 | engine 29 | .modify_liquidity( 30 | I256::try_from(10000000).unwrap(), 31 | Signed::try_from(-887272).unwrap(), 32 | Signed::try_from(887272).unwrap(), 33 | Bytes::new(), 34 | provider, 35 | ) 36 | .await 37 | .unwrap(); 38 | } 39 | async fn process( 40 | &self, 41 | _provider: AnvilProvider, 42 | _signal: Signal, 43 | _inspector: &mut Box>, 44 | _engine: Engine, 45 | ) { 46 | } 47 | } 48 | 49 | #[tokio::main] 50 | async fn main() { 51 | let builder: ArenaBuilder<_> = ArenaBuilder::new(); 52 | 53 | let mut arena: Arena<_> = builder 54 | .with_strategy(Box::new(TemplateStrategy)) 55 | .with_feed(Box::new(OrnsteinUhlenbeck::new(1.0, 0.1, 1.0, 0.1, 0.1))) 56 | .with_inspector(Box::new(EmptyInspector {})) 57 | .with_arbitrageur(Box::new(FixedArbitrageur { 58 | depth: Signed::try_from(10000).unwrap(), 59 | })) 60 | .build(); 61 | 62 | arena 63 | .run(Config::new( 64 | // timesteps to run for 65 | 1000, 66 | // manager fee 67 | Uint::from(0), 68 | // pool tick spacing 69 | Signed::try_from(2).unwrap(), 70 | // hook data 71 | Bytes::new(), 72 | // sqrtpricex96 73 | Uint::from(79228162514264337593543950336_u128), 74 | // pool fee 75 | Uint::from(0), 76 | // initial price 77 | Uint::from(1), 78 | // hook contract 79 | Address::ZERO, 80 | )) 81 | .await 82 | .unwrap(); 83 | } 84 | -------------------------------------------------------------------------------- /contracts/utils/src/Fetcher.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.8.10; 2 | 3 | import {PoolId} from "v4-core/types/PoolId.sol"; 4 | import {PoolKey} from "v4-core/types/PoolKey.sol"; 5 | import {IPoolManager} from "v4-core/interfaces/IPoolManager.sol"; 6 | import {Position} from "v4-core/libraries/Position.sol"; 7 | 8 | // This contract is a compact version of StateLibrary, which can be found below. 9 | // https://github.com/Uniswap/v4-core/blob/799dd2cb980319a8d3b827b6a7aa59a606634553/src/libraries/StateLibrary.sol 10 | contract Fetcher { 11 | bytes32 public constant POOLS_SLOT = bytes32(uint256(6)); 12 | uint256 public constant TICKS_OFFSET = 4; 13 | 14 | function _getPoolStateSlot(PoolId poolId) internal pure returns (bytes32) { 15 | return keccak256(abi.encodePacked(PoolId.unwrap(poolId), POOLS_SLOT)); 16 | } 17 | 18 | function toId(PoolKey memory poolKey) external pure returns (PoolId poolId) { 19 | assembly ("memory-safe") { 20 | poolId := keccak256(poolKey, mul(32, 5)) 21 | } 22 | } 23 | 24 | function getTickInfo(IPoolManager manager, PoolId poolId, int24 tick) 25 | external 26 | view 27 | returns ( 28 | uint128 liquidityGross, 29 | int128 liquidityNet, 30 | uint256 feeGrowthOutside0X128, 31 | uint256 feeGrowthOutside1X128 32 | ) 33 | { 34 | bytes32 slot = _getTickInfoSlot(poolId, tick); 35 | 36 | // read all 3 words of the TickInfo struct 37 | bytes32[] memory data = manager.extsload(slot, 3); 38 | assembly ("memory-safe") { 39 | let firstWord := mload(add(data, 32)) 40 | liquidityNet := sar(128, firstWord) 41 | liquidityGross := and(firstWord, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) 42 | feeGrowthOutside0X128 := mload(add(data, 64)) 43 | feeGrowthOutside1X128 := mload(add(data, 96)) 44 | } 45 | } 46 | 47 | function getSlot0(IPoolManager manager, PoolId poolId) 48 | external 49 | view 50 | returns (uint160 sqrtPriceX96, int24 tick, uint24 protocolFee, uint24 lpFee) 51 | { 52 | // slot key of Pool.State value: `pools[poolId]` 53 | bytes32 stateSlot = _getPoolStateSlot(poolId); 54 | 55 | bytes32 data = manager.extsload(stateSlot); 56 | 57 | // 24 bits |24bits|24bits |24 bits|160 bits 58 | // 0x000000 |000bb8|000000 |ffff75 |0000000000000000fe3aa841ba359daa0ea9eff7 59 | // ---------- | fee |protocolfee | tick | sqrtPriceX96 60 | assembly ("memory-safe") { 61 | // bottom 160 bits of data 62 | sqrtPriceX96 := and(data, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) 63 | // next 24 bits of data 64 | tick := signextend(2, shr(160, data)) 65 | // next 24 bits of data 66 | protocolFee := and(shr(184, data), 0xFFFFFF) 67 | // last 24 bits of data 68 | lpFee := and(shr(208, data), 0xFFFFFF) 69 | } 70 | } 71 | 72 | function _getTickInfoSlot(PoolId poolId, int24 tick) internal pure returns (bytes32) { 73 | // slot key of Pool.State value: `pools[poolId]` 74 | bytes32 stateSlot = _getPoolStateSlot(poolId); 75 | 76 | // Pool.State: `mapping(int24 => TickInfo) ticks` 77 | bytes32 ticksMappingSlot = bytes32(uint256(stateSlot) + TICKS_OFFSET); 78 | 79 | // slot key of the tick key: `pools[poolId].ticks[tick] 80 | return keccak256(abi.encodePacked(int256(tick), ticksMappingSlot)); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/feed.rs: -------------------------------------------------------------------------------- 1 | use rand::thread_rng; 2 | use rand_distr::{Distribution, Normal}; 3 | 4 | /// Represents an arbitrary price feed. 5 | pub trait Feed { 6 | /// Returns the current value of the feed. 7 | fn current_value(&self) -> f64; 8 | 9 | /// Advances the feed by one step and returns the new value. 10 | fn step(&mut self) -> f64; 11 | } 12 | 13 | #[derive(Debug)] 14 | /// Implementation of an Ornstein-Uhlenbeck process using a Euler-Maruyama discretization scheme. 15 | pub struct OrnsteinUhlenbeck { 16 | current_value: f64, 17 | 18 | /// Mean reversion rate. 19 | theta: f64, 20 | 21 | /// Long-term mean. 22 | mu: f64, 23 | 24 | /// Volatility. 25 | sigma: f64, 26 | 27 | /// Time step. 28 | dt: f64, 29 | } 30 | 31 | impl OrnsteinUhlenbeck { 32 | /// Public constructor function for a new [`OrnsteinUhlenbeck`]. 33 | pub fn new(initial_value: f64, theta: f64, mu: f64, sigma: f64, dt: f64) -> Self { 34 | OrnsteinUhlenbeck { 35 | current_value: initial_value, 36 | theta, 37 | mu, 38 | sigma, 39 | dt, 40 | } 41 | } 42 | } 43 | 44 | impl Feed for OrnsteinUhlenbeck { 45 | fn current_value(&self) -> f64 { 46 | self.current_value 47 | } 48 | 49 | fn step(&mut self) -> f64 { 50 | let mut rng = thread_rng(); 51 | let normal = Normal::new(0.0, 1.0).unwrap(); 52 | 53 | let drift = self.theta * (self.mu - self.current_value) * self.dt; 54 | let randomness = self.sigma * self.dt.sqrt() * normal.sample(&mut rng); 55 | 56 | self.current_value += drift + randomness; 57 | self.current_value 58 | } 59 | } 60 | 61 | #[derive(Debug)] 62 | /// Implementation of a geometric Brownian motion using a Euler-Maruyama discretization scheme. 63 | pub struct GeometricBrownianMotion { 64 | /// The initial value of the process. 65 | pub initial_value: f64, 66 | 67 | /// The current value of the process. 68 | pub current_value: f64, 69 | 70 | /// The current time in the process, incremented with each step by the time step `dt`. 71 | pub current_time: f64, 72 | 73 | /// The drift coefficient. 74 | pub mu: f64, 75 | 76 | /// The volatility coefficient. 77 | pub sigma: f64, 78 | 79 | /// The time step size used for advancing the process. 80 | pub dt: f64, 81 | } 82 | 83 | impl GeometricBrownianMotion { 84 | /// Public constructor function for a new [`GeometricBrownianMotion`]. 85 | pub fn new(initial_value: f64, mu: f64, sigma: f64, dt: f64) -> Self { 86 | GeometricBrownianMotion { 87 | initial_value, 88 | current_value: initial_value, 89 | current_time: 0.0, 90 | mu, 91 | sigma, 92 | dt, 93 | } 94 | } 95 | } 96 | 97 | impl Feed for GeometricBrownianMotion { 98 | fn current_value(&self) -> f64 { 99 | self.current_value 100 | } 101 | 102 | fn step(&mut self) -> f64 { 103 | let mut rng = thread_rng(); 104 | let normal = Normal::new(0.0, 1.0).unwrap(); 105 | 106 | let wiener_process = normal.sample(&mut rng) * self.dt.sqrt(); 107 | 108 | let drift = (self.mu - 0.5 * self.sigma.powi(2)) * self.dt; 109 | 110 | let volatility = self.sigma * wiener_process; 111 | 112 | let change = drift + volatility; 113 | 114 | self.current_value *= (change).exp(); 115 | self.current_time += self.dt; 116 | self.current_value 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /src/engine/inspector.rs: -------------------------------------------------------------------------------- 1 | use std::{fs::OpenOptions, io::Seek}; 2 | 3 | use serde::{Deserialize, Serialize}; 4 | 5 | /// Trait allowing custom behavior to be defined for logging and inspecting values. 6 | pub trait Inspector { 7 | /// Log a value to state. 8 | fn log(&mut self, value: V); 9 | 10 | /// Inspect a value at a given time step. 11 | fn inspect(&self, step: usize) -> Option; 12 | 13 | /// Save the inspector state. 14 | fn save(&self); 15 | } 16 | 17 | /// Type that allows for logging indexed values to files on disc. 18 | #[derive(Serialize, Deserialize, Debug, Clone)] 19 | pub struct LogMessage { 20 | /// Index of the log message. 21 | pub id: usize, 22 | 23 | /// Key of the log message. 24 | pub name: String, 25 | 26 | /// Data of the log message. 27 | pub data: String, 28 | } 29 | 30 | impl LogMessage { 31 | /// Public constructor function for a new [`LogMessage`]. 32 | pub fn new(name: String, data: String) -> Self { 33 | Self { id: 0, name, data } 34 | } 35 | } 36 | 37 | #[derive(Debug)] 38 | /// Custom implementation of an [`Inspector`] for logging values to a file (CSV or JSON). 39 | pub struct Logger { 40 | values: Vec, 41 | counter: usize, 42 | file_path: String, 43 | format: LogFormat, 44 | } 45 | 46 | #[derive(Debug)] 47 | /// Enum to specify the logging format. 48 | enum LogFormat { 49 | Csv, 50 | Json, 51 | } 52 | 53 | impl Logger { 54 | /// Public constructor function for a new [`Logger`] for CSV format. 55 | pub fn new_csv(file_path: String) -> Self { 56 | Self { 57 | values: Vec::new(), 58 | counter: 0, 59 | file_path, 60 | format: LogFormat::Csv, 61 | } 62 | } 63 | 64 | /// Public constructor function for a new [`Logger`] for JSON format. 65 | pub fn new_json(file_path: String) -> Self { 66 | Self { 67 | values: Vec::new(), 68 | counter: 0, 69 | file_path, 70 | format: LogFormat::Json, 71 | } 72 | } 73 | 74 | /// Append a log message to the appropriate file format. 75 | fn append_to_file(&self, record: &LogMessage) -> Result<(), Box> { 76 | let mut file = OpenOptions::new() 77 | .append(true) 78 | .create(true) 79 | .open(&self.file_path)?; 80 | 81 | match self.format { 82 | LogFormat::Csv => { 83 | let mut writer = csv::Writer::from_writer(file); 84 | writer.serialize((record.id, &record.name, &record.data))?; 85 | writer.flush()?; 86 | } 87 | LogFormat::Json => { 88 | let mut records: Vec = if file.metadata()?.len() > 0 { 89 | serde_json::from_reader(&file)? 90 | } else { 91 | Vec::new() 92 | }; 93 | records.push(record.clone()); 94 | file.set_len(0)?; 95 | file.seek(std::io::SeekFrom::Start(0))?; 96 | serde_json::to_writer_pretty(file, &records)?; 97 | } 98 | } 99 | Ok(()) 100 | } 101 | } 102 | 103 | impl Inspector for Logger { 104 | fn log(&mut self, mut value: LogMessage) { 105 | value.id = self.counter; 106 | self.counter += 1; 107 | self.values.push(value.clone()); 108 | 109 | if let Err(e) = self.append_to_file(&value) { 110 | eprintln!("Failed to append to file: {}", e); 111 | } 112 | } 113 | 114 | fn inspect(&self, step: usize) -> Option { 115 | self.values.get(step).cloned() 116 | } 117 | 118 | fn save(&self) {} 119 | } 120 | 121 | /// No-op implementation of an [`Inspector`] for custom use cases. 122 | pub struct EmptyInspector; 123 | 124 | impl Inspector for EmptyInspector { 125 | fn inspect(&self, _step: usize) -> Option { 126 | None 127 | } 128 | fn log(&mut self, _value: f64) {} 129 | fn save(&self) {} 130 | } 131 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # arena 🏟️ 2 | 3 | ![visitors](https://visitor-badge.laobi.icu/badge?page_id=arena-rs.arena) 4 | [![Twitter Badge](https://badgen.net/badge/icon/twitter?icon=twitter&label)](https://twitter.com/anthiasxyz) 5 | ![Telegram badge](https://img.shields.io/badge/chat-Discuss-blue?logo=telegram&style=flat-square&link=https://t.me/+U043cjuV5lA2ZDQ8) 6 | ![Github Actions](https://github.com/arena-rs/arena/workflows/lint/badge.svg) 7 | 8 | ![image](https://github.com/arena-rs/.github/blob/main/arena_banner.png) 9 | 10 | > *Arena is a powerful and extensible framework for holistic economic modelling and simulation of Uniswap v4 strategies, hooks and pools.* 11 | 12 | Track how metrics evolve over time, and over various market conditions. 13 | 14 | Arena has an [examples](https://github.com/arena-rs/arena/tree/main/examples) folder on how to use the framework. 15 | 16 | ## Overview 17 | 18 | Arena introduces a novel approach to LP simulation through a highly-configurable event-driven runtime. Each event consists of integral market information for a strategy, from which the actor can derive insight from. 19 | 20 | Arena is an [alloy](https://alloy.rs) native project, utilizing many crate-native features such as the `sol!` procedural macro, and the `Anvil` testnet node implementation. 21 | 22 | ## Key features 23 | - Event-driven simulation runtime. 24 | - Flexible performance analysis and telemetry. 25 | - Multi-strategy support. 26 | - Customizable stochastic process price feeds. 27 | - Customizable arbitrageur and market dynamics. 28 | 29 | ## Technical details 30 | Every LP strategy must implement the `Strategy` trait. This contains two key methods: 31 | - `init()` is called upon initialization of the Arena runtime. 32 | - `process()` is called each discrete timestep of the simulation. 33 | 34 | These methods allow LP strategies to define specific behaviors and heuristics based on general market updates. Both functions are provided with: 35 | - An `Engine` for liquidity modification 36 | - A provider connected to the Anvil instance 37 | - A `Signal` containing comprehensive market information 38 | 39 | Additionally, each LP strategy accepts an `Inspector`. An `Inspector` allows custom behavior to be defined for performance analysis of strategy and continuous telemetry. Arena provides default `Inspector` implementations for CSV output and JSON output. 40 | 41 | The runtime can hold multiple strategies in paralell. 42 | 43 | The price of the Uniswap pool being simulated is set via the `Feed` trait. This allows for custom stochastic processes or backtesting feeds to be defined. The price of the pool is pegged to this price feed by utilizing an arbitrageur. 44 | 45 | Arena also provides an infinitely liquid exchange, much like centralized exchanges in real markets, which the price is set on. The arbitrageur then swaps between this and the pool, thus tying the two prices. 46 | 47 | The arbitrageur makes swaps every timestep to equalize the price between these two markets. Arena also provides an `Arbitrageur` trait, allowing for custom behaviors to be defined and custom arbitrage strategies. We recommend most users use the `FixedArbitrageur` implementation, which swaps a fixed amount each price equalization. This simulates an inefficient market whilst also tracking the price feed effectively. 48 | 49 | Below is a graph showing the price of the liquid exchange with relation to the Uniswap pool, using a `FixedArbitrageur`. The `FixedArbitrageur` accepts a `depth` parameter, which controls how much is swapped on each timestep. The below graph shows a run with a depth of 100000, which we find is a good balance between tracking granularity and minimizing tracking lag. 50 | 51 | ![image](./assets/price_tracking_example.jpg) 52 | 53 | ## Usage 54 | 55 | To use Arena, the Rust programming language alongside the Foundry framework must be installed on your machine. This is commonly achieved using [`rustup`](https://rustup.rs/), and [`foundryup`](https://book.getfoundry.sh/getting-started/installation) 56 | 57 | Arena can be added to your library or binary with 58 | ``` 59 | cargo add arena-core 60 | ``` 61 | 62 | If you wish to build from source, the project can be cloned with: 63 | ``` 64 | git clone https://github.com/arena-rs/arena.git 65 | cd arena 66 | git submodule update --init --recursive 67 | ``` 68 | 69 | ## Next steps 70 | 71 | - Explore the documentation for detailed usage instructions. 72 | - Check out example strategies in the `examples/` directory. 73 | 74 | We welcome contributions! 75 | 76 | See our [Contributing Guidelines](https://github.com/arena-rs/arena/blob/main/CONTRIBUTING.md) 77 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Welcome to the Arena contributing guide 2 | 3 | Thank you for investing your time in contributing to our project! Any contribution you make is greatly appreciated :sparkles:. 4 | 5 | In this guide you will get an overview of the contribution workflow from opening an issue, creating a PR, reviewing, and merging the PR. 6 | 7 | Use the table of contents icon on the top left corner of this document to get to a specific section of this guide quickly. 8 | 9 | ## New contributor guide 10 | 11 | To get an overview of the project, read the [README](https://github.com/arena-rs/arena/blob/main/README.md). Here are some resources to help you get started with open source contributions: 12 | 13 | - [Finding ways to contribute to open source on GitHub](https://docs.github.com/en/get-started/exploring-projects-on-github/finding-ways-to-contribute-to-open-source-on-github) 14 | - [Set up Git](https://docs.github.com/en/get-started/quickstart/set-up-git) 15 | - [GitHub flow](https://docs.github.com/en/get-started/quickstart/github-flow) 16 | - [Collaborating with pull requests](https://docs.github.com/en/github/collaborating-with-pull-requests) 17 | 18 | ## Getting started 19 | 20 | ### Issues 21 | 22 | #### Create a new issue 23 | 24 | If you spot a problem with the docs, [search if an issue already exists](https://docs.github.com/en/github/searching-for-information-on-github/searching-on-github/searching-issues-and-pull-requests#search-by-the-title-body-or-comments). If a related issue doesn't exist, you can open a new issue! 25 | 26 | #### Solve an issue 27 | 28 | Scan through our [existing issues](https://github.com/primitivefinance/arbiter/issues) to find one that interests you. You can narrow down the search using `labels` as filters. If you find an issue to work on, you are welcome to assign it to yourself and open a PR with a fix. 29 | 30 | ### Make Changes 31 | 32 | 1. [Install Git LFS](https://docs.github.com/en/github/managing-large-files/versioning-large-files/installing-git-large-file-storage). 33 | 2. Fork the repository. 34 | - Using GitHub Desktop: 35 | - [Getting started with GitHub Desktop](https://docs.github.com/en/desktop/installing-and-configuring-github-desktop/getting-started-with-github-desktop) will guide you through setting up Desktop. 36 | - Once Desktop is set up, you can use it to [fork the repo](https://docs.github.com/en/desktop/contributing-and-collaborating-using-github-desktop/cloning-and-forking-repositories-from-github-desktop)! 37 | 38 | - Using the command line: 39 | - [Fork the repo](https://docs.github.com/en/github/getting-started-with-github/fork-a-repo#fork-an-example-repository) so that you can make your changes without affecting the original project until you're ready to merge them. 40 | 41 | 3. Create a working branch and start with your changes! 42 | 43 | ### Commit your update 44 | 45 | Commit the changes once you are happy with them with descriptive comments:zap:. 46 | 47 | ### Pull Request 48 | 49 | When you're finished with the changes, create a pull request, also known as a PR. 50 | - Check to see your pull request passes our continuous integration (CI). If you cannot get a certain integration test to pass, let us know. We can assist you in fixing these issues or approve a merge manually. 51 | - Make sure your additions are properly documented! You can see the [Rust book](https://doc.rust-lang.org/rustdoc/how-to-write-documentation.html) for documentation guidelines. Each module uses the diagnostic attribute `#![warn(missing_docs)]` which will trigger clippy in our CI. 52 | - Don't forget to [link PR to issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) if you are solving one. 53 | - Enable the checkbox to [allow maintainer edits](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork) so the branch can be updated for a merge. 54 | Once you submit your PR, a Arbiter team member will review your proposal. We may ask questions or request additional information. 55 | - We may ask for changes to be made before a PR can be merged, either using [suggested changes](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/incorporating-feedback-in-your-pull-request) or pull request comments. You can apply suggested changes directly through the UI. You can make any other changes in your fork, then commit them to your branch. 56 | - As you update your PR and apply changes, mark each conversation as [resolved](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/commenting-on-a-pull-request#resolving-conversations). 57 | - If you run into any merge issues, checkout this [git tutorial](https://github.com/skills/resolve-merge-conflicts) to help you resolve merge conflicts and other issues. 58 | 59 | ### Your PR is merged! 60 | 61 | Congratulations :tada::tada: The Arena team thanks you :sparkles:. 62 | 63 | Once your PR is merged, your contributions will be publicly visible on the [Arena Repository](https://github.com/arena-rs/arena). 64 | 65 | *Forked from [Arbiter contribution guide](https://github.com/primitivefinance/arbiter/blob/main/.github/CONTRIBUTING.md)* 66 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![warn(missing_docs)] 2 | //! Arena 3 | 4 | /// Defines the main simulation runtime. 5 | pub mod arena; 6 | 7 | /// Contains configuration types for the simulation. 8 | pub mod config; 9 | 10 | /// Contains the types for various price processes. 11 | pub mod feed; 12 | 13 | /// Defines the base strategy trait. 14 | pub mod strategy; 15 | 16 | /// Defines core simulation logic types, such as an [`Arbitrageur`]. 17 | pub mod engine; 18 | 19 | /// Contains error types for Arena. 20 | pub mod error; 21 | use alloy::{ 22 | network::{Ethereum, EthereumWallet}, 23 | node_bindings::{Anvil, AnvilInstance}, 24 | primitives::{Address, Bytes, Signed, Uint}, 25 | providers::{ 26 | fillers::{ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, WalletFiller}, 27 | Identity, RootProvider, 28 | }, 29 | transports::http::{Client, Http}, 30 | }; 31 | 32 | use crate::types::controller::ArenaController::PoolKey; 33 | pub use crate::{ 34 | arena::{Arena, ArenaBuilder}, 35 | config::Config, 36 | engine::{ 37 | arbitrageur::{Arbitrageur, EmptyArbitrageur}, 38 | inspector::{EmptyInspector, Inspector, LogMessage, Logger}, 39 | Engine, 40 | }, 41 | feed::{Feed, GeometricBrownianMotion, OrnsteinUhlenbeck}, 42 | strategy::Strategy, 43 | }; 44 | 45 | /// Provider type that includes all necessary fillers to execute transactions on an [`Anvil`] node. 46 | pub type AnvilProvider = FillProvider< 47 | JoinFill< 48 | JoinFill, NonceFiller>, ChainIdFiller>, 49 | WalletFiller, 50 | >, 51 | RootProvider>, 52 | Http, 53 | Ethereum, 54 | >; 55 | 56 | mod types { 57 | pub mod controller { 58 | use alloy_sol_macro::sol; 59 | sol! { 60 | #[sol(rpc)] 61 | #[derive(Debug)] 62 | ArenaController, 63 | "src/artifacts/ArenaController.json" 64 | } 65 | } 66 | } 67 | 68 | /// A signal that is passed to a [`Strategy`] to provide information about the current state of the pool. 69 | #[derive(Debug, Clone)] 70 | pub struct Signal { 71 | /// Current theoretical value of the pool. 72 | pub lex_price: Uint<256, 4>, 73 | 74 | /// Current step of the simulation. 75 | pub step: Option, 76 | 77 | /// Current tick of the pool. 78 | pub tick: Signed<24, 1>, 79 | 80 | /// Current price of the pool. 81 | pub sqrt_price_x96: Uint<160, 3>, 82 | 83 | /// Pool manager. 84 | pub manager: Address, 85 | 86 | /// Pool key. 87 | pub pool: PoolKey, 88 | 89 | /// Fetcher. 90 | pub fetcher: Address, 91 | 92 | /// Current value of the price feed. 93 | pub current_value: f64, 94 | 95 | /// The arena controller. 96 | pub controller: Address, 97 | } 98 | 99 | impl Signal { 100 | /// Public constructor function for a new [`Signal`]. 101 | #[allow(clippy::too_many_arguments)] 102 | pub fn new( 103 | lex_price: Uint<256, 4>, 104 | step: Option, 105 | tick: Signed<24, 1>, 106 | sqrt_price_x96: Uint<160, 3>, 107 | manager: Address, 108 | pool: PoolKey, 109 | fetcher: Address, 110 | current_value: f64, 111 | controller: Address, 112 | ) -> Self { 113 | Self { 114 | lex_price, 115 | step, 116 | tick, 117 | sqrt_price_x96, 118 | manager, 119 | pool, 120 | fetcher, 121 | current_value, 122 | controller, 123 | } 124 | } 125 | } 126 | 127 | #[cfg(test)] 128 | mod tests { 129 | use alloy::primitives::{Signed, Uint, I256}; 130 | use async_trait::async_trait; 131 | use rug::{ops::Pow, Float}; 132 | 133 | use super::*; 134 | use crate::{ 135 | arena::{Arena, ArenaBuilder}, 136 | config::Config, 137 | engine::{arbitrageur::FixedArbitrageur, inspector::EmptyInspector}, 138 | feed::OrnsteinUhlenbeck, 139 | strategy::Strategy, 140 | }; 141 | 142 | struct StrategyMock; 143 | 144 | #[async_trait] 145 | impl Strategy for StrategyMock { 146 | async fn init( 147 | &self, 148 | provider: AnvilProvider, 149 | _signal: Signal, 150 | _inspector: &mut Box>, 151 | engine: Engine, 152 | ) { 153 | engine 154 | .modify_liquidity( 155 | I256::try_from(10000000).unwrap(), 156 | Signed::try_from(-887272).unwrap(), 157 | Signed::try_from(887272).unwrap(), 158 | Bytes::new(), 159 | provider, 160 | ) 161 | .await 162 | .unwrap(); 163 | } 164 | async fn process( 165 | &self, 166 | _provider: AnvilProvider, 167 | _signal: Signal, 168 | _inspector: &mut Box>, 169 | _engine: Engine, 170 | ) { 171 | } 172 | } 173 | 174 | #[tokio::test] 175 | async fn test_arena() { 176 | let builder: ArenaBuilder<_> = ArenaBuilder::new(); 177 | 178 | let mut arena: Arena<_> = builder 179 | .with_strategy(Box::new(StrategyMock)) 180 | .with_feed(Box::new(OrnsteinUhlenbeck::new(1.0, 0.1, 1.0, 0.1, 0.1))) 181 | .with_inspector(Box::new(EmptyInspector {})) 182 | .with_arbitrageur(Box::new(FixedArbitrageur { 183 | depth: Signed::try_from(10000).unwrap(), 184 | })) 185 | .build(); 186 | 187 | arena 188 | .run(Config::new( 189 | 100, 190 | Uint::from(0), 191 | Signed::try_from(2).unwrap(), 192 | Bytes::new(), 193 | Uint::from(79228162514264337593543950336_u128), 194 | Uint::from(0), 195 | Uint::from(1), 196 | Address::ZERO, 197 | )) 198 | .await 199 | .unwrap(); 200 | } 201 | } 202 | -------------------------------------------------------------------------------- /contracts/utils/src/ArenaController.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.8.10; 2 | 3 | import {PoolManager} from "v4-core/PoolManager.sol"; 4 | import {PoolModifyLiquidityTest} from "v4-core/test/PoolModifyLiquidityTest.sol"; 5 | import {ArenaToken} from "./ArenaToken.sol"; 6 | import {PoolKey} from "v4-core/types/PoolKey.sol"; 7 | import {Currency} from "v4-core/types/Currency.sol"; 8 | import {IHooks} from "v4-core/interfaces/IHooks.sol"; 9 | import {IPoolManager} from "v4-core/interfaces/IPoolManager.sol"; 10 | import {LiquidExchange} from "./LiquidExchange.sol"; 11 | import {Fetcher} from "./Fetcher.sol"; 12 | import {FullMath} from "v4-core/libraries/FullMath.sol"; 13 | import {SqrtPriceMath} from "v4-core/libraries/SqrtPriceMath.sol"; 14 | import {PoolSwapTest} from "v4-core/test/PoolSwapTest.sol"; 15 | import {TickMath} from "v4-core/libraries/TickMath.sol"; 16 | import {PoolId} from "v4-core/types/PoolId.sol"; 17 | import {IPoolManager} from "v4-core/interfaces/IPoolManager.sol"; 18 | import {Position} from "v4-core/libraries/Position.sol"; 19 | 20 | contract ArenaController { 21 | PoolManager immutable poolManager; 22 | PoolModifyLiquidityTest immutable router; 23 | PoolSwapTest immutable swapRouter; 24 | LiquidExchange immutable lex; 25 | Fetcher immutable fetcher; 26 | 27 | ArenaToken immutable currency0; 28 | ArenaToken immutable currency1; 29 | 30 | PoolKey public poolKey; 31 | 32 | uint256 internal constant MAX_SWAP_FEE = 1e6; 33 | 34 | uint160 public constant MIN_PRICE_LIMIT = TickMath.MIN_SQRT_PRICE + 1; 35 | uint160 public constant MAX_PRICE_LIMIT = TickMath.MAX_SQRT_PRICE - 1; 36 | 37 | bytes32 public constant POOLS_SLOT = bytes32(uint256(6)); 38 | uint256 public constant POSITIONS_OFFSET = 6; 39 | 40 | struct Signal { 41 | int24 currentTick; 42 | uint160 sqrtPriceX96; 43 | address manager; 44 | uint256 lexPrice; 45 | PoolKey pool; 46 | address fetcher; 47 | } 48 | 49 | constructor(uint256 fee, uint256 initialPrice) { 50 | poolManager = new PoolManager(fee); 51 | router = new PoolModifyLiquidityTest(poolManager); 52 | swapRouter = new PoolSwapTest(poolManager); 53 | fetcher = new Fetcher(); 54 | 55 | currency0 = new ArenaToken("currency0", "c0", 18); 56 | currency1 = new ArenaToken("currency1", "c1", 18); 57 | 58 | if (currency0 > currency1) { 59 | (currency0, currency1) = (currency1, currency0); 60 | } 61 | 62 | lex = new LiquidExchange(address(currency0), address(currency1), initialPrice); 63 | 64 | require(currency0.mint(address(this), 10000000000000000000), "Minting currency0 to liquid exchange failed"); 65 | require(currency1.mint(address(this), 10000000000000000000), "Minting currency1 to liquid exchange failed"); 66 | } 67 | 68 | function getRouter() external view returns (address) { 69 | return address(router); 70 | } 71 | 72 | function constructSignal() public view returns (Signal memory) { 73 | (uint160 sqrtPriceX96, int24 tick,,) = fetcher.getSlot0(poolManager, fetcher.toId(poolKey)); 74 | 75 | return Signal({ 76 | currentTick: tick, 77 | sqrtPriceX96: sqrtPriceX96, 78 | manager: address(poolManager), 79 | lexPrice: lex.price(), 80 | pool: poolKey, 81 | fetcher: address(fetcher) 82 | }); 83 | } 84 | 85 | function setPrice(uint256 price) public { 86 | lex.setPrice(price); 87 | } 88 | 89 | function swapOnLex(address tokenIn, uint256 amountIn) public { 90 | lex.swap(tokenIn, amountIn); 91 | } 92 | 93 | function equalizePrice(int256 depth) public { 94 | require(currency0.approve(address(swapRouter), type(uint256).max), "Approval for currency0 failed"); 95 | require(currency1.approve(address(swapRouter), type(uint256).max), "Approval for currency1 failed"); 96 | 97 | (uint160 sqrtPriceX96,,,) = fetcher.getSlot0(poolManager, fetcher.toId(poolKey)); 98 | 99 | uint256 uniswapPrice = FullMath.mulDiv(uint256(sqrtPriceX96) * 10**18, uint256(sqrtPriceX96), 1 << 192); 100 | uint256 lexPrice = lex.price(); 101 | 102 | if (uniswapPrice > lexPrice) { 103 | bool zeroForOne = true; 104 | 105 | IPoolManager.SwapParams memory params = IPoolManager.SwapParams({ 106 | zeroForOne: zeroForOne, 107 | amountSpecified: depth, 108 | sqrtPriceLimitX96: zeroForOne ? MIN_PRICE_LIMIT : MAX_PRICE_LIMIT // unlimited impact 109 | }); 110 | 111 | PoolSwapTest.TestSettings memory testSettings = 112 | PoolSwapTest.TestSettings({takeClaims: false, settleUsingBurn: false}); 113 | 114 | swapRouter.swap(poolKey, params, testSettings, ""); 115 | 116 | } else if (uniswapPrice < lexPrice) { 117 | bool zeroForOne = false; 118 | 119 | IPoolManager.SwapParams memory params = IPoolManager.SwapParams({ 120 | zeroForOne: zeroForOne, 121 | amountSpecified: depth, 122 | sqrtPriceLimitX96: zeroForOne ? MIN_PRICE_LIMIT : MAX_PRICE_LIMIT // unlimited impact 123 | }); 124 | 125 | PoolSwapTest.TestSettings memory testSettings = 126 | PoolSwapTest.TestSettings({takeClaims: false, settleUsingBurn: false}); 127 | 128 | swapRouter.swap(poolKey, params, testSettings, ""); 129 | } 130 | } 131 | 132 | function setPool(uint24 poolFee, int24 tickSpacing, IHooks hooks, uint160 sqrtPriceX96, bytes memory hookData) 133 | public 134 | { 135 | poolKey = PoolKey({ 136 | currency0: Currency.wrap(address(currency0)), 137 | currency1: Currency.wrap(address(currency1)), 138 | fee: poolFee, 139 | tickSpacing: tickSpacing, 140 | hooks: hooks 141 | }); 142 | 143 | poolManager.initialize(poolKey, sqrtPriceX96, hookData); 144 | } 145 | 146 | function addLiquidity(int256 liquidityDelta, int24 tickLower, int24 tickUpper, bytes memory hookData) public { 147 | if (liquidityDelta > 0) { 148 | require(currency0.mint(address(this), uint256(liquidityDelta)), "Minting currency0 failed"); 149 | require(currency1.mint(address(this), uint256(liquidityDelta)), "Minting currency1 failed"); 150 | } 151 | 152 | require(currency0.approve(address(router), type(uint256).max), "Approval for currency0 failed"); 153 | require(currency1.approve(address(router), type(uint256).max), "Approval for currency1 failed"); 154 | 155 | IPoolManager.ModifyLiquidityParams memory params = IPoolManager.ModifyLiquidityParams({ 156 | tickLower: tickLower, 157 | tickUpper: tickUpper, 158 | liquidityDelta: liquidityDelta, 159 | salt: "" 160 | }); 161 | 162 | router.modifyLiquidity(poolKey, params, hookData); 163 | } 164 | } 165 | -------------------------------------------------------------------------------- /src/arena.rs: -------------------------------------------------------------------------------- 1 | use std::{collections::HashMap, time::Instant}; 2 | 3 | use alloy::{ 4 | providers::{Provider, ProviderBuilder, WalletProvider}, 5 | signers::local::PrivateKeySigner, 6 | }; 7 | 8 | use super::*; 9 | use crate::{ 10 | config::Config, 11 | engine::{arbitrageur::Arbitrageur, inspector::Inspector}, 12 | error::ArenaError, 13 | feed::Feed, 14 | strategy::Strategy, 15 | types::controller::ArenaController, 16 | }; 17 | 18 | /// Represents an [`Arena`] that can be used to run a simulation and execute strategies. 19 | pub struct Arena { 20 | /// The underlying Anvil execution environment. 21 | pub env: AnvilInstance, 22 | 23 | /// The strategies that are to be run in the simulation. 24 | pub strategies: Vec>>, 25 | 26 | /// The feed that provides the current, theoretical value of the pool. 27 | pub feed: Box, 28 | 29 | /// The inspector that is used to evaluate the performance of the strategies. 30 | pub inspector: Box>, 31 | 32 | /// The arbitrageur that is used to peg the pool. 33 | pub arbitrageur: Box, 34 | 35 | providers: HashMap, 36 | } 37 | 38 | #[allow(clippy::redundant_closure)] 39 | impl Arena { 40 | /// Run all strategies in the simulation with a given configuration. 41 | pub async fn run(&mut self, config: Config) -> Result<(), ArenaError> { 42 | let admin_provider = self.providers[&0].clone(); 43 | 44 | let controller = ArenaController::deploy( 45 | admin_provider.clone(), 46 | config.manager_fee, 47 | config.initial_price, 48 | ) 49 | .await?; 50 | 51 | controller 52 | .setPool( 53 | config.pool_fee, 54 | config.tick_spacing, 55 | config.hooks, 56 | config.sqrt_price_x96, 57 | config.hook_data, 58 | ) 59 | .send() 60 | .await 61 | .map_err(ArenaError::ContractError)? 62 | .watch() 63 | .await 64 | .map_err(|e| ArenaError::PendingTransactionError(e))?; 65 | 66 | let engine = Engine { 67 | controller: *controller.address(), 68 | }; 69 | 70 | for (idx, strategy) in self.strategies.iter_mut().enumerate() { 71 | let strategy_provider = self.providers[&(idx + 1)].clone(); 72 | 73 | let signal = controller.constructSignal().call().await?._0; 74 | 75 | let signal = Signal::new( 76 | signal.lexPrice, 77 | None, 78 | signal.currentTick, 79 | signal.sqrtPriceX96, 80 | signal.manager, 81 | signal.pool, 82 | signal.fetcher, 83 | self.feed.current_value(), 84 | *controller.address(), 85 | ); 86 | 87 | strategy 88 | .init( 89 | strategy_provider.clone(), 90 | signal, 91 | &mut self.inspector, 92 | engine.clone(), 93 | ) 94 | .await; 95 | } 96 | 97 | let signal = controller.constructSignal().call().await?._0; 98 | 99 | let signal = Signal::new( 100 | signal.lexPrice, 101 | None, 102 | signal.currentTick, 103 | signal.sqrtPriceX96, 104 | signal.manager, 105 | signal.pool, 106 | signal.fetcher, 107 | self.feed.current_value(), 108 | *controller.address(), 109 | ); 110 | 111 | self.arbitrageur.init(&signal, admin_provider.clone()).await; 112 | 113 | for step in 0..config.steps { 114 | let instant = Instant::now(); 115 | controller 116 | .setPrice( 117 | alloy::primitives::utils::parse_ether(&self.feed.step().to_string()) 118 | .map_err(ArenaError::ConversionError)?, 119 | ) 120 | .nonce( 121 | admin_provider 122 | .get_transaction_count(admin_provider.default_signer_address()) 123 | .await 124 | .unwrap(), 125 | ) 126 | .send() 127 | .await 128 | .map_err(ArenaError::ContractError)? 129 | .watch() 130 | .await 131 | .map_err(|e| ArenaError::PendingTransactionError(e))?; 132 | 133 | let signal = controller.constructSignal().call().await?._0; 134 | 135 | let signal = Signal::new( 136 | signal.lexPrice, 137 | None, 138 | signal.currentTick, 139 | signal.sqrtPriceX96, 140 | signal.manager, 141 | signal.pool, 142 | signal.fetcher, 143 | self.feed.current_value(), 144 | *controller.address(), 145 | ); 146 | 147 | self.arbitrageur 148 | .arbitrage(&signal, admin_provider.clone()) 149 | .await; 150 | 151 | for (idx, strategy) in self.strategies.iter_mut().enumerate() { 152 | let signal = controller.constructSignal().call().await?._0; 153 | 154 | let signal = Signal::new( 155 | signal.lexPrice, 156 | Some(step), 157 | signal.currentTick, 158 | signal.sqrtPriceX96, 159 | signal.manager, 160 | signal.pool, 161 | signal.fetcher, 162 | self.feed.current_value(), 163 | *controller.address(), 164 | ); 165 | 166 | strategy 167 | .process( 168 | self.providers[&(idx + 1)].clone(), 169 | signal, 170 | &mut self.inspector, 171 | engine.clone(), 172 | ) 173 | .await; 174 | } 175 | 176 | self.feed.step(); 177 | println!("Step {} took {:?}", step, instant.elapsed()); 178 | } 179 | 180 | // controller 181 | // .addLiquidity(1000) 182 | // .send() 183 | // .await 184 | // .map_err(ArenaError::ContractError)? 185 | // .watch() 186 | // .await 187 | // .map_err(|e| ArenaError::PendingTransactionError(e))?; 188 | 189 | Ok(()) 190 | } 191 | } 192 | 193 | /// A builder for an [`Arena`] that can be used to configure the simulation. 194 | pub struct ArenaBuilder { 195 | /// [`Arena::env`] 196 | pub env: AnvilInstance, 197 | 198 | /// [`Arena::strategies`] 199 | pub strategies: Vec>>, 200 | 201 | /// [`Arena::feed`] 202 | pub feed: Option>, 203 | 204 | /// [`Arena::inspector`] 205 | pub inspector: Option>>, 206 | 207 | /// [`Arena::arbitrageur`] 208 | pub arbitrageur: Option>, 209 | } 210 | 211 | impl Default for ArenaBuilder { 212 | fn default() -> Self { 213 | Self::new() 214 | } 215 | } 216 | 217 | impl ArenaBuilder { 218 | /// Public constructor function for a new [`ArenaBuilder`]. 219 | pub fn new() -> Self { 220 | ArenaBuilder { 221 | env: Anvil::default().spawn(), 222 | strategies: Vec::new(), 223 | feed: None, 224 | inspector: None, 225 | arbitrageur: None, 226 | } 227 | } 228 | 229 | /// Add a strategy to the simulation. 230 | pub fn with_strategy(mut self, strategy: Box>) -> Self { 231 | self.strategies.push(strategy); 232 | self 233 | } 234 | 235 | /// Set the feed that provides the current, theoretical value of the pool. 236 | pub fn with_feed(mut self, feed: Box) -> Self { 237 | self.feed = Some(feed); 238 | self 239 | } 240 | 241 | /// Set the inspector that is used to evaluate the performance of the strategies. 242 | pub fn with_inspector(mut self, inspector: Box>) -> Self { 243 | self.inspector = Some(inspector); 244 | self 245 | } 246 | 247 | /// Set the inspector that is used to evaluate the performance of the strategies. 248 | pub fn with_arbitrageur(mut self, arbitrageur: Box) -> Self { 249 | self.arbitrageur = Some(arbitrageur); 250 | self 251 | } 252 | 253 | /// Build the [`Arena`] with the given configuration. 254 | pub fn build(self) -> Arena { 255 | let mut providers = HashMap::new(); 256 | 257 | for i in 0..9 { 258 | let signer: PrivateKeySigner = self.env.keys()[i].clone().into(); 259 | let wallet = EthereumWallet::from(signer); 260 | 261 | let rpc_url = self.env.endpoint().parse().unwrap(); 262 | 263 | let provider = ProviderBuilder::new() 264 | .with_recommended_fillers() 265 | .wallet(wallet) 266 | .on_http(rpc_url); 267 | 268 | providers.insert(i, provider); 269 | } 270 | 271 | Arena { 272 | env: self.env, 273 | strategies: self.strategies, 274 | feed: self.feed.unwrap(), 275 | inspector: self.inspector.unwrap(), 276 | arbitrageur: self.arbitrageur.unwrap(), 277 | providers, 278 | } 279 | } 280 | } 281 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.22.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "ahash" 22 | version = "0.8.11" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 25 | dependencies = [ 26 | "cfg-if", 27 | "once_cell", 28 | "version_check", 29 | "zerocopy", 30 | ] 31 | 32 | [[package]] 33 | name = "allocator-api2" 34 | version = "0.2.18" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" 37 | 38 | [[package]] 39 | name = "alloy" 40 | version = "0.3.0" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | checksum = "3eadd758805fe353ea8a520da4531efb9739382312c354d3e90b7a16353b0315" 43 | dependencies = [ 44 | "alloy-consensus", 45 | "alloy-contract", 46 | "alloy-core", 47 | "alloy-eips", 48 | "alloy-genesis", 49 | "alloy-network", 50 | "alloy-node-bindings", 51 | "alloy-provider", 52 | "alloy-pubsub", 53 | "alloy-rpc-client", 54 | "alloy-rpc-types", 55 | "alloy-serde", 56 | "alloy-signer", 57 | "alloy-signer-local", 58 | "alloy-transport", 59 | "alloy-transport-http", 60 | "alloy-transport-ipc", 61 | "alloy-transport-ws", 62 | ] 63 | 64 | [[package]] 65 | name = "alloy-chains" 66 | version = "0.1.29" 67 | source = "registry+https://github.com/rust-lang/crates.io-index" 68 | checksum = "bb07629a5d0645d29f68d2fb6f4d0cf15c89ec0965be915f303967180929743f" 69 | dependencies = [ 70 | "num_enum", 71 | "serde", 72 | "strum", 73 | ] 74 | 75 | [[package]] 76 | name = "alloy-consensus" 77 | version = "0.3.0" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | checksum = "7198a527b4c4762cb88d54bcaeb0428f4298b72552c9c8ec4af614b4a4990c59" 80 | dependencies = [ 81 | "alloy-eips", 82 | "alloy-primitives", 83 | "alloy-rlp", 84 | "alloy-serde", 85 | "c-kzg", 86 | "serde", 87 | ] 88 | 89 | [[package]] 90 | name = "alloy-contract" 91 | version = "0.3.0" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "0450f718460a93ac8a3df08dca5fdea7cf3f08c5cb61b9548c02aa54f84841ad" 94 | dependencies = [ 95 | "alloy-dyn-abi", 96 | "alloy-json-abi", 97 | "alloy-network", 98 | "alloy-network-primitives", 99 | "alloy-primitives", 100 | "alloy-provider", 101 | "alloy-pubsub", 102 | "alloy-rpc-types-eth", 103 | "alloy-sol-types", 104 | "alloy-transport", 105 | "futures", 106 | "futures-util", 107 | "thiserror", 108 | ] 109 | 110 | [[package]] 111 | name = "alloy-core" 112 | version = "0.8.0" 113 | source = "registry+https://github.com/rust-lang/crates.io-index" 114 | checksum = "8e6dbb79f4e3285cc87f50c0d4be9a3a812643623b2e3558d425b41cbd795ceb" 115 | dependencies = [ 116 | "alloy-dyn-abi", 117 | "alloy-json-abi", 118 | "alloy-primitives", 119 | "alloy-sol-types", 120 | ] 121 | 122 | [[package]] 123 | name = "alloy-dyn-abi" 124 | version = "0.8.0" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "ba5b68572f5dfa99ede0a491d658c9842626c956b840d0b97d0bbc9637742504" 127 | dependencies = [ 128 | "alloy-json-abi", 129 | "alloy-primitives", 130 | "alloy-sol-type-parser", 131 | "alloy-sol-types", 132 | "const-hex", 133 | "itoa", 134 | "serde", 135 | "serde_json", 136 | "winnow", 137 | ] 138 | 139 | [[package]] 140 | name = "alloy-eip2930" 141 | version = "0.1.0" 142 | source = "registry+https://github.com/rust-lang/crates.io-index" 143 | checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" 144 | dependencies = [ 145 | "alloy-primitives", 146 | "alloy-rlp", 147 | "serde", 148 | ] 149 | 150 | [[package]] 151 | name = "alloy-eip7702" 152 | version = "0.1.0" 153 | source = "registry+https://github.com/rust-lang/crates.io-index" 154 | checksum = "37d319bb544ca6caeab58c39cea8921c55d924d4f68f2c60f24f914673f9a74a" 155 | dependencies = [ 156 | "alloy-primitives", 157 | "alloy-rlp", 158 | "k256", 159 | "serde", 160 | ] 161 | 162 | [[package]] 163 | name = "alloy-eips" 164 | version = "0.3.0" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "159eab0e4e15b88571f55673af37314f4b8f17630dc1b393c3d70f2128a1d494" 167 | dependencies = [ 168 | "alloy-eip2930", 169 | "alloy-eip7702", 170 | "alloy-primitives", 171 | "alloy-rlp", 172 | "alloy-serde", 173 | "c-kzg", 174 | "derive_more 1.0.0", 175 | "once_cell", 176 | "serde", 177 | "sha2", 178 | ] 179 | 180 | [[package]] 181 | name = "alloy-genesis" 182 | version = "0.3.0" 183 | source = "registry+https://github.com/rust-lang/crates.io-index" 184 | checksum = "210f4b358d724f85df8adaec753c583defb58169ad3cad3d48c80d1a25a6ff0e" 185 | dependencies = [ 186 | "alloy-primitives", 187 | "alloy-serde", 188 | "serde", 189 | ] 190 | 191 | [[package]] 192 | name = "alloy-json-abi" 193 | version = "0.8.0" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | checksum = "299d2a937b6c60968df3dad2a988b0f0e03277b344639a4f7a31bd68e6285e59" 196 | dependencies = [ 197 | "alloy-primitives", 198 | "alloy-sol-type-parser", 199 | "serde", 200 | "serde_json", 201 | ] 202 | 203 | [[package]] 204 | name = "alloy-json-rpc" 205 | version = "0.3.0" 206 | source = "registry+https://github.com/rust-lang/crates.io-index" 207 | checksum = "f7733446dd531f8eb877331fea02f6c40bdbb47444a17dc3464bf75319cc073a" 208 | dependencies = [ 209 | "alloy-primitives", 210 | "alloy-sol-types", 211 | "serde", 212 | "serde_json", 213 | "thiserror", 214 | "tracing", 215 | ] 216 | 217 | [[package]] 218 | name = "alloy-network" 219 | version = "0.3.0" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "b80851d1697fc4fa2827998e3ee010a3d1fc59c7d25e87070840169fcf465832" 222 | dependencies = [ 223 | "alloy-consensus", 224 | "alloy-eips", 225 | "alloy-json-rpc", 226 | "alloy-network-primitives", 227 | "alloy-primitives", 228 | "alloy-rpc-types-eth", 229 | "alloy-serde", 230 | "alloy-signer", 231 | "alloy-sol-types", 232 | "async-trait", 233 | "auto_impl", 234 | "futures-utils-wasm", 235 | "thiserror", 236 | ] 237 | 238 | [[package]] 239 | name = "alloy-network-primitives" 240 | version = "0.3.0" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "d76a2336889f3d0624b18213239d27f4f34eb476eb35bef22f6a8cc24e0c0078" 243 | dependencies = [ 244 | "alloy-primitives", 245 | "alloy-serde", 246 | "serde", 247 | ] 248 | 249 | [[package]] 250 | name = "alloy-node-bindings" 251 | version = "0.3.0" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "2657dae91ae61ed6cdd4c58b7e09330de934eea4e14d2f54f72f2a6720b23437" 254 | dependencies = [ 255 | "alloy-genesis", 256 | "alloy-primitives", 257 | "k256", 258 | "serde_json", 259 | "tempfile", 260 | "thiserror", 261 | "tracing", 262 | "url", 263 | ] 264 | 265 | [[package]] 266 | name = "alloy-primitives" 267 | version = "0.8.0" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | checksum = "a767e59c86900dd7c3ce3ecef04f3ace5ac9631ee150beb8b7d22f7fa3bbb2d7" 270 | dependencies = [ 271 | "alloy-rlp", 272 | "bytes", 273 | "cfg-if", 274 | "const-hex", 275 | "derive_more 0.99.18", 276 | "hex-literal", 277 | "itoa", 278 | "k256", 279 | "keccak-asm", 280 | "proptest", 281 | "rand", 282 | "ruint", 283 | "serde", 284 | "tiny-keccak", 285 | ] 286 | 287 | [[package]] 288 | name = "alloy-provider" 289 | version = "0.3.0" 290 | source = "registry+https://github.com/rust-lang/crates.io-index" 291 | checksum = "f2d2a195caa6707f5ce13905794865765afc6d9ea92c3a56e3a973c168d703bc" 292 | dependencies = [ 293 | "alloy-chains", 294 | "alloy-consensus", 295 | "alloy-eips", 296 | "alloy-json-rpc", 297 | "alloy-network", 298 | "alloy-network-primitives", 299 | "alloy-node-bindings", 300 | "alloy-primitives", 301 | "alloy-pubsub", 302 | "alloy-rpc-client", 303 | "alloy-rpc-types-anvil", 304 | "alloy-rpc-types-eth", 305 | "alloy-signer-local", 306 | "alloy-transport", 307 | "alloy-transport-http", 308 | "alloy-transport-ipc", 309 | "alloy-transport-ws", 310 | "async-stream", 311 | "async-trait", 312 | "auto_impl", 313 | "dashmap", 314 | "futures", 315 | "futures-utils-wasm", 316 | "lru", 317 | "pin-project", 318 | "reqwest", 319 | "serde", 320 | "serde_json", 321 | "thiserror", 322 | "tokio", 323 | "tracing", 324 | "url", 325 | ] 326 | 327 | [[package]] 328 | name = "alloy-pubsub" 329 | version = "0.3.0" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | checksum = "b4c59e13200322138fe4279b4676b0d78c4f55502de127f5a448495d3ddfaa43" 332 | dependencies = [ 333 | "alloy-json-rpc", 334 | "alloy-primitives", 335 | "alloy-transport", 336 | "bimap", 337 | "futures", 338 | "serde", 339 | "serde_json", 340 | "tokio", 341 | "tokio-stream", 342 | "tower", 343 | "tracing", 344 | ] 345 | 346 | [[package]] 347 | name = "alloy-rlp" 348 | version = "0.3.8" 349 | source = "registry+https://github.com/rust-lang/crates.io-index" 350 | checksum = "26154390b1d205a4a7ac7352aa2eb4f81f391399d4e2f546fb81a2f8bb383f62" 351 | dependencies = [ 352 | "alloy-rlp-derive", 353 | "arrayvec", 354 | "bytes", 355 | ] 356 | 357 | [[package]] 358 | name = "alloy-rlp-derive" 359 | version = "0.3.8" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | checksum = "4d0f2d905ebd295e7effec65e5f6868d153936130ae718352771de3e7d03c75c" 362 | dependencies = [ 363 | "proc-macro2", 364 | "quote", 365 | "syn 2.0.76", 366 | ] 367 | 368 | [[package]] 369 | name = "alloy-rpc-client" 370 | version = "0.3.0" 371 | source = "registry+https://github.com/rust-lang/crates.io-index" 372 | checksum = "ed31cdba2b23d71c555505b06674f8e7459496abfd7f4875d268434ef5a99ee6" 373 | dependencies = [ 374 | "alloy-json-rpc", 375 | "alloy-primitives", 376 | "alloy-pubsub", 377 | "alloy-transport", 378 | "alloy-transport-http", 379 | "alloy-transport-ipc", 380 | "alloy-transport-ws", 381 | "futures", 382 | "pin-project", 383 | "reqwest", 384 | "serde", 385 | "serde_json", 386 | "tokio", 387 | "tokio-stream", 388 | "tower", 389 | "tracing", 390 | "url", 391 | ] 392 | 393 | [[package]] 394 | name = "alloy-rpc-types" 395 | version = "0.3.0" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | checksum = "e2d758f65aa648491c6358335c578de45cd7de6fdf2877c3cef61f2c9bebea21" 398 | dependencies = [ 399 | "alloy-rpc-types-engine", 400 | "alloy-rpc-types-eth", 401 | "alloy-serde", 402 | "serde", 403 | ] 404 | 405 | [[package]] 406 | name = "alloy-rpc-types-anvil" 407 | version = "0.3.0" 408 | source = "registry+https://github.com/rust-lang/crates.io-index" 409 | checksum = "fa5ee4ffe3e687a6372dd02e998f4f65e512ffdfe0d2c248db822649814c36cd" 410 | dependencies = [ 411 | "alloy-primitives", 412 | "alloy-serde", 413 | "serde", 414 | ] 415 | 416 | [[package]] 417 | name = "alloy-rpc-types-engine" 418 | version = "0.3.0" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "24e800d959606fa19b36b31d7c24d68ef75b970c654b7aa581dce23de82db0a5" 421 | dependencies = [ 422 | "alloy-consensus", 423 | "alloy-eips", 424 | "alloy-primitives", 425 | "alloy-rlp", 426 | "alloy-rpc-types-eth", 427 | "alloy-serde", 428 | "serde", 429 | "thiserror", 430 | ] 431 | 432 | [[package]] 433 | name = "alloy-rpc-types-eth" 434 | version = "0.3.0" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "c0ba05d6ee4db0d89113294a614137940f79abfc2c40a9a3bee2995660358776" 437 | dependencies = [ 438 | "alloy-consensus", 439 | "alloy-eips", 440 | "alloy-network-primitives", 441 | "alloy-primitives", 442 | "alloy-rlp", 443 | "alloy-serde", 444 | "alloy-sol-types", 445 | "itertools 0.13.0", 446 | "serde", 447 | "serde_json", 448 | "thiserror", 449 | ] 450 | 451 | [[package]] 452 | name = "alloy-serde" 453 | version = "0.3.0" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | checksum = "bfd260ede54f0b53761fdd04133acc10ae70427f66a69aa9590529bbd066cd58" 456 | dependencies = [ 457 | "alloy-primitives", 458 | "serde", 459 | "serde_json", 460 | ] 461 | 462 | [[package]] 463 | name = "alloy-signer" 464 | version = "0.3.0" 465 | source = "registry+https://github.com/rust-lang/crates.io-index" 466 | checksum = "7b5193ee6b370b89db154d7dc40c6a8e6ce11213865baaf2b418a9f2006be762" 467 | dependencies = [ 468 | "alloy-primitives", 469 | "async-trait", 470 | "auto_impl", 471 | "elliptic-curve", 472 | "k256", 473 | "thiserror", 474 | ] 475 | 476 | [[package]] 477 | name = "alloy-signer-local" 478 | version = "0.3.0" 479 | source = "registry+https://github.com/rust-lang/crates.io-index" 480 | checksum = "bf6b19bbb231c7f941af07f363d4c74d356dfcdfcd7dfa85a41a504ae856a6d5" 481 | dependencies = [ 482 | "alloy-consensus", 483 | "alloy-network", 484 | "alloy-primitives", 485 | "alloy-signer", 486 | "async-trait", 487 | "k256", 488 | "rand", 489 | "thiserror", 490 | ] 491 | 492 | [[package]] 493 | name = "alloy-sol-macro" 494 | version = "0.8.0" 495 | source = "registry+https://github.com/rust-lang/crates.io-index" 496 | checksum = "183bcfc0f3291d9c41a3774172ee582fb2ce6eb6569085471d8f225de7bb86fc" 497 | dependencies = [ 498 | "alloy-sol-macro-expander", 499 | "alloy-sol-macro-input", 500 | "proc-macro-error", 501 | "proc-macro2", 502 | "quote", 503 | "syn 2.0.76", 504 | ] 505 | 506 | [[package]] 507 | name = "alloy-sol-macro-expander" 508 | version = "0.8.0" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "71c4d842beb7a6686d04125603bc57614d5ed78bf95e4753274db3db4ba95214" 511 | dependencies = [ 512 | "alloy-json-abi", 513 | "alloy-sol-macro-input", 514 | "const-hex", 515 | "heck", 516 | "indexmap 2.4.0", 517 | "proc-macro-error", 518 | "proc-macro2", 519 | "quote", 520 | "syn 2.0.76", 521 | "syn-solidity", 522 | "tiny-keccak", 523 | ] 524 | 525 | [[package]] 526 | name = "alloy-sol-macro-input" 527 | version = "0.8.0" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | checksum = "1306e8d3c9e6e6ecf7a39ffaf7291e73a5f655a2defd366ee92c2efebcdf7fee" 530 | dependencies = [ 531 | "alloy-json-abi", 532 | "const-hex", 533 | "dunce", 534 | "heck", 535 | "proc-macro2", 536 | "quote", 537 | "serde_json", 538 | "syn 2.0.76", 539 | "syn-solidity", 540 | ] 541 | 542 | [[package]] 543 | name = "alloy-sol-type-parser" 544 | version = "0.8.0" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "f4691da83dce9c9b4c775dd701c87759f173bd3021cbf2e60cde00c5fe6d7241" 547 | dependencies = [ 548 | "serde", 549 | "winnow", 550 | ] 551 | 552 | [[package]] 553 | name = "alloy-sol-types" 554 | version = "0.8.0" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "577e262966e92112edbd15b1b2c0947cc434d6e8311df96d3329793fe8047da9" 557 | dependencies = [ 558 | "alloy-json-abi", 559 | "alloy-primitives", 560 | "alloy-sol-macro", 561 | "const-hex", 562 | "serde", 563 | ] 564 | 565 | [[package]] 566 | name = "alloy-transport" 567 | version = "0.3.0" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | checksum = "454220c714857cf68af87d788d1f0638ad8766268b94f6a49fed96cbc2ab382c" 570 | dependencies = [ 571 | "alloy-json-rpc", 572 | "base64", 573 | "futures-util", 574 | "futures-utils-wasm", 575 | "serde", 576 | "serde_json", 577 | "thiserror", 578 | "tokio", 579 | "tower", 580 | "tracing", 581 | "url", 582 | ] 583 | 584 | [[package]] 585 | name = "alloy-transport-http" 586 | version = "0.3.0" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | checksum = "377f2353d7fea03a2dba6b9ffbb7d610402c040dd5700d1fae8b9ec2673eed9b" 589 | dependencies = [ 590 | "alloy-json-rpc", 591 | "alloy-transport", 592 | "reqwest", 593 | "serde_json", 594 | "tower", 595 | "tracing", 596 | "url", 597 | ] 598 | 599 | [[package]] 600 | name = "alloy-transport-ipc" 601 | version = "0.3.0" 602 | source = "registry+https://github.com/rust-lang/crates.io-index" 603 | checksum = "8653c47dcc30326fb09a34140e8800fa21987fc52453de6cfcdd5c7b8b6e9886" 604 | dependencies = [ 605 | "alloy-json-rpc", 606 | "alloy-pubsub", 607 | "alloy-transport", 608 | "bytes", 609 | "futures", 610 | "interprocess", 611 | "pin-project", 612 | "serde_json", 613 | "tokio", 614 | "tokio-util", 615 | "tracing", 616 | ] 617 | 618 | [[package]] 619 | name = "alloy-transport-ws" 620 | version = "0.3.0" 621 | source = "registry+https://github.com/rust-lang/crates.io-index" 622 | checksum = "26d43ba8e9a3a7fef626d5fd93cc87ff2d6d2c81acfb866f068b3dce31dda060" 623 | dependencies = [ 624 | "alloy-pubsub", 625 | "alloy-transport", 626 | "futures", 627 | "http", 628 | "rustls", 629 | "serde_json", 630 | "tokio", 631 | "tokio-tungstenite", 632 | "tracing", 633 | "ws_stream_wasm", 634 | ] 635 | 636 | [[package]] 637 | name = "android-tzdata" 638 | version = "0.1.1" 639 | source = "registry+https://github.com/rust-lang/crates.io-index" 640 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 641 | 642 | [[package]] 643 | name = "android_system_properties" 644 | version = "0.1.5" 645 | source = "registry+https://github.com/rust-lang/crates.io-index" 646 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 647 | dependencies = [ 648 | "libc", 649 | ] 650 | 651 | [[package]] 652 | name = "anstream" 653 | version = "0.6.15" 654 | source = "registry+https://github.com/rust-lang/crates.io-index" 655 | checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" 656 | dependencies = [ 657 | "anstyle", 658 | "anstyle-parse", 659 | "anstyle-query", 660 | "anstyle-wincon", 661 | "colorchoice", 662 | "is_terminal_polyfill", 663 | "utf8parse", 664 | ] 665 | 666 | [[package]] 667 | name = "anstyle" 668 | version = "1.0.8" 669 | source = "registry+https://github.com/rust-lang/crates.io-index" 670 | checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" 671 | 672 | [[package]] 673 | name = "anstyle-parse" 674 | version = "0.2.5" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" 677 | dependencies = [ 678 | "utf8parse", 679 | ] 680 | 681 | [[package]] 682 | name = "anstyle-query" 683 | version = "1.1.1" 684 | source = "registry+https://github.com/rust-lang/crates.io-index" 685 | checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" 686 | dependencies = [ 687 | "windows-sys 0.52.0", 688 | ] 689 | 690 | [[package]] 691 | name = "anstyle-wincon" 692 | version = "3.0.4" 693 | source = "registry+https://github.com/rust-lang/crates.io-index" 694 | checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" 695 | dependencies = [ 696 | "anstyle", 697 | "windows-sys 0.52.0", 698 | ] 699 | 700 | [[package]] 701 | name = "arena-core" 702 | version = "0.1.7" 703 | dependencies = [ 704 | "alloy", 705 | "alloy-chains", 706 | "alloy-contract", 707 | "alloy-sol-macro", 708 | "alloy-sol-types", 709 | "alloy-transport-http", 710 | "async-trait", 711 | "clap", 712 | "csv", 713 | "plotly", 714 | "rand", 715 | "rand_distr", 716 | "rug", 717 | "serde", 718 | "serde_json", 719 | "thiserror", 720 | "tokio", 721 | ] 722 | 723 | [[package]] 724 | name = "ark-ff" 725 | version = "0.3.0" 726 | source = "registry+https://github.com/rust-lang/crates.io-index" 727 | checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" 728 | dependencies = [ 729 | "ark-ff-asm 0.3.0", 730 | "ark-ff-macros 0.3.0", 731 | "ark-serialize 0.3.0", 732 | "ark-std 0.3.0", 733 | "derivative", 734 | "num-bigint", 735 | "num-traits", 736 | "paste", 737 | "rustc_version 0.3.3", 738 | "zeroize", 739 | ] 740 | 741 | [[package]] 742 | name = "ark-ff" 743 | version = "0.4.2" 744 | source = "registry+https://github.com/rust-lang/crates.io-index" 745 | checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" 746 | dependencies = [ 747 | "ark-ff-asm 0.4.2", 748 | "ark-ff-macros 0.4.2", 749 | "ark-serialize 0.4.2", 750 | "ark-std 0.4.0", 751 | "derivative", 752 | "digest 0.10.7", 753 | "itertools 0.10.5", 754 | "num-bigint", 755 | "num-traits", 756 | "paste", 757 | "rustc_version 0.4.1", 758 | "zeroize", 759 | ] 760 | 761 | [[package]] 762 | name = "ark-ff-asm" 763 | version = "0.3.0" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" 766 | dependencies = [ 767 | "quote", 768 | "syn 1.0.109", 769 | ] 770 | 771 | [[package]] 772 | name = "ark-ff-asm" 773 | version = "0.4.2" 774 | source = "registry+https://github.com/rust-lang/crates.io-index" 775 | checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" 776 | dependencies = [ 777 | "quote", 778 | "syn 1.0.109", 779 | ] 780 | 781 | [[package]] 782 | name = "ark-ff-macros" 783 | version = "0.3.0" 784 | source = "registry+https://github.com/rust-lang/crates.io-index" 785 | checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" 786 | dependencies = [ 787 | "num-bigint", 788 | "num-traits", 789 | "quote", 790 | "syn 1.0.109", 791 | ] 792 | 793 | [[package]] 794 | name = "ark-ff-macros" 795 | version = "0.4.2" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" 798 | dependencies = [ 799 | "num-bigint", 800 | "num-traits", 801 | "proc-macro2", 802 | "quote", 803 | "syn 1.0.109", 804 | ] 805 | 806 | [[package]] 807 | name = "ark-serialize" 808 | version = "0.3.0" 809 | source = "registry+https://github.com/rust-lang/crates.io-index" 810 | checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" 811 | dependencies = [ 812 | "ark-std 0.3.0", 813 | "digest 0.9.0", 814 | ] 815 | 816 | [[package]] 817 | name = "ark-serialize" 818 | version = "0.4.2" 819 | source = "registry+https://github.com/rust-lang/crates.io-index" 820 | checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" 821 | dependencies = [ 822 | "ark-std 0.4.0", 823 | "digest 0.10.7", 824 | "num-bigint", 825 | ] 826 | 827 | [[package]] 828 | name = "ark-std" 829 | version = "0.3.0" 830 | source = "registry+https://github.com/rust-lang/crates.io-index" 831 | checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" 832 | dependencies = [ 833 | "num-traits", 834 | "rand", 835 | ] 836 | 837 | [[package]] 838 | name = "ark-std" 839 | version = "0.4.0" 840 | source = "registry+https://github.com/rust-lang/crates.io-index" 841 | checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" 842 | dependencies = [ 843 | "num-traits", 844 | "rand", 845 | ] 846 | 847 | [[package]] 848 | name = "arrayvec" 849 | version = "0.7.6" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 852 | 853 | [[package]] 854 | name = "askama" 855 | version = "0.12.1" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28" 858 | dependencies = [ 859 | "askama_derive", 860 | "askama_escape", 861 | "humansize", 862 | "num-traits", 863 | "percent-encoding", 864 | "serde", 865 | "serde_json", 866 | ] 867 | 868 | [[package]] 869 | name = "askama_derive" 870 | version = "0.12.5" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | checksum = "19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83" 873 | dependencies = [ 874 | "askama_parser", 875 | "basic-toml", 876 | "mime", 877 | "mime_guess", 878 | "proc-macro2", 879 | "quote", 880 | "serde", 881 | "syn 2.0.76", 882 | ] 883 | 884 | [[package]] 885 | name = "askama_escape" 886 | version = "0.10.3" 887 | source = "registry+https://github.com/rust-lang/crates.io-index" 888 | checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" 889 | 890 | [[package]] 891 | name = "askama_parser" 892 | version = "0.2.1" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0" 895 | dependencies = [ 896 | "nom", 897 | ] 898 | 899 | [[package]] 900 | name = "async-stream" 901 | version = "0.3.5" 902 | source = "registry+https://github.com/rust-lang/crates.io-index" 903 | checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" 904 | dependencies = [ 905 | "async-stream-impl", 906 | "futures-core", 907 | "pin-project-lite", 908 | ] 909 | 910 | [[package]] 911 | name = "async-stream-impl" 912 | version = "0.3.5" 913 | source = "registry+https://github.com/rust-lang/crates.io-index" 914 | checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" 915 | dependencies = [ 916 | "proc-macro2", 917 | "quote", 918 | "syn 2.0.76", 919 | ] 920 | 921 | [[package]] 922 | name = "async-trait" 923 | version = "0.1.81" 924 | source = "registry+https://github.com/rust-lang/crates.io-index" 925 | checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" 926 | dependencies = [ 927 | "proc-macro2", 928 | "quote", 929 | "syn 2.0.76", 930 | ] 931 | 932 | [[package]] 933 | name = "async_io_stream" 934 | version = "0.3.3" 935 | source = "registry+https://github.com/rust-lang/crates.io-index" 936 | checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" 937 | dependencies = [ 938 | "futures", 939 | "pharos", 940 | "rustc_version 0.4.1", 941 | ] 942 | 943 | [[package]] 944 | name = "auto_impl" 945 | version = "1.2.0" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" 948 | dependencies = [ 949 | "proc-macro2", 950 | "quote", 951 | "syn 2.0.76", 952 | ] 953 | 954 | [[package]] 955 | name = "autocfg" 956 | version = "1.3.0" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 959 | 960 | [[package]] 961 | name = "az" 962 | version = "1.2.1" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" 965 | 966 | [[package]] 967 | name = "backtrace" 968 | version = "0.3.73" 969 | source = "registry+https://github.com/rust-lang/crates.io-index" 970 | checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" 971 | dependencies = [ 972 | "addr2line", 973 | "cc", 974 | "cfg-if", 975 | "libc", 976 | "miniz_oxide", 977 | "object", 978 | "rustc-demangle", 979 | ] 980 | 981 | [[package]] 982 | name = "base16ct" 983 | version = "0.2.0" 984 | source = "registry+https://github.com/rust-lang/crates.io-index" 985 | checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" 986 | 987 | [[package]] 988 | name = "base64" 989 | version = "0.22.1" 990 | source = "registry+https://github.com/rust-lang/crates.io-index" 991 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 992 | 993 | [[package]] 994 | name = "base64ct" 995 | version = "1.6.0" 996 | source = "registry+https://github.com/rust-lang/crates.io-index" 997 | checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" 998 | 999 | [[package]] 1000 | name = "basic-toml" 1001 | version = "0.1.9" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | checksum = "823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8" 1004 | dependencies = [ 1005 | "serde", 1006 | ] 1007 | 1008 | [[package]] 1009 | name = "bimap" 1010 | version = "0.6.3" 1011 | source = "registry+https://github.com/rust-lang/crates.io-index" 1012 | checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" 1013 | 1014 | [[package]] 1015 | name = "bit-set" 1016 | version = "0.5.3" 1017 | source = "registry+https://github.com/rust-lang/crates.io-index" 1018 | checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 1019 | dependencies = [ 1020 | "bit-vec", 1021 | ] 1022 | 1023 | [[package]] 1024 | name = "bit-vec" 1025 | version = "0.6.3" 1026 | source = "registry+https://github.com/rust-lang/crates.io-index" 1027 | checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 1028 | 1029 | [[package]] 1030 | name = "bitflags" 1031 | version = "2.6.0" 1032 | source = "registry+https://github.com/rust-lang/crates.io-index" 1033 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 1034 | 1035 | [[package]] 1036 | name = "bitvec" 1037 | version = "1.0.1" 1038 | source = "registry+https://github.com/rust-lang/crates.io-index" 1039 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" 1040 | dependencies = [ 1041 | "funty", 1042 | "radium", 1043 | "tap", 1044 | "wyz", 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "block-buffer" 1049 | version = "0.10.4" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 1052 | dependencies = [ 1053 | "generic-array", 1054 | ] 1055 | 1056 | [[package]] 1057 | name = "blst" 1058 | version = "0.3.13" 1059 | source = "registry+https://github.com/rust-lang/crates.io-index" 1060 | checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" 1061 | dependencies = [ 1062 | "cc", 1063 | "glob", 1064 | "threadpool", 1065 | "zeroize", 1066 | ] 1067 | 1068 | [[package]] 1069 | name = "bumpalo" 1070 | version = "3.16.0" 1071 | source = "registry+https://github.com/rust-lang/crates.io-index" 1072 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 1073 | 1074 | [[package]] 1075 | name = "byte-slice-cast" 1076 | version = "1.2.2" 1077 | source = "registry+https://github.com/rust-lang/crates.io-index" 1078 | checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" 1079 | 1080 | [[package]] 1081 | name = "byteorder" 1082 | version = "1.5.0" 1083 | source = "registry+https://github.com/rust-lang/crates.io-index" 1084 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 1085 | 1086 | [[package]] 1087 | name = "bytes" 1088 | version = "1.7.1" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" 1091 | dependencies = [ 1092 | "serde", 1093 | ] 1094 | 1095 | [[package]] 1096 | name = "c-kzg" 1097 | version = "1.0.3" 1098 | source = "registry+https://github.com/rust-lang/crates.io-index" 1099 | checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" 1100 | dependencies = [ 1101 | "blst", 1102 | "cc", 1103 | "glob", 1104 | "hex", 1105 | "libc", 1106 | "once_cell", 1107 | "serde", 1108 | ] 1109 | 1110 | [[package]] 1111 | name = "cc" 1112 | version = "1.1.15" 1113 | source = "registry+https://github.com/rust-lang/crates.io-index" 1114 | checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" 1115 | dependencies = [ 1116 | "shlex", 1117 | ] 1118 | 1119 | [[package]] 1120 | name = "cfg-if" 1121 | version = "1.0.0" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 1124 | 1125 | [[package]] 1126 | name = "chrono" 1127 | version = "0.4.38" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" 1130 | dependencies = [ 1131 | "android-tzdata", 1132 | "iana-time-zone", 1133 | "num-traits", 1134 | "serde", 1135 | "windows-targets", 1136 | ] 1137 | 1138 | [[package]] 1139 | name = "clap" 1140 | version = "4.5.16" 1141 | source = "registry+https://github.com/rust-lang/crates.io-index" 1142 | checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" 1143 | dependencies = [ 1144 | "clap_builder", 1145 | "clap_derive", 1146 | ] 1147 | 1148 | [[package]] 1149 | name = "clap_builder" 1150 | version = "4.5.15" 1151 | source = "registry+https://github.com/rust-lang/crates.io-index" 1152 | checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" 1153 | dependencies = [ 1154 | "anstream", 1155 | "anstyle", 1156 | "clap_lex", 1157 | "strsim", 1158 | ] 1159 | 1160 | [[package]] 1161 | name = "clap_derive" 1162 | version = "4.5.13" 1163 | source = "registry+https://github.com/rust-lang/crates.io-index" 1164 | checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" 1165 | dependencies = [ 1166 | "heck", 1167 | "proc-macro2", 1168 | "quote", 1169 | "syn 2.0.76", 1170 | ] 1171 | 1172 | [[package]] 1173 | name = "clap_lex" 1174 | version = "0.7.2" 1175 | source = "registry+https://github.com/rust-lang/crates.io-index" 1176 | checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" 1177 | 1178 | [[package]] 1179 | name = "colorchoice" 1180 | version = "1.0.2" 1181 | source = "registry+https://github.com/rust-lang/crates.io-index" 1182 | checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" 1183 | 1184 | [[package]] 1185 | name = "const-hex" 1186 | version = "1.12.0" 1187 | source = "registry+https://github.com/rust-lang/crates.io-index" 1188 | checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" 1189 | dependencies = [ 1190 | "cfg-if", 1191 | "cpufeatures", 1192 | "hex", 1193 | "proptest", 1194 | "serde", 1195 | ] 1196 | 1197 | [[package]] 1198 | name = "const-oid" 1199 | version = "0.9.6" 1200 | source = "registry+https://github.com/rust-lang/crates.io-index" 1201 | checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 1202 | 1203 | [[package]] 1204 | name = "convert_case" 1205 | version = "0.4.0" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 1208 | 1209 | [[package]] 1210 | name = "core-foundation" 1211 | version = "0.9.4" 1212 | source = "registry+https://github.com/rust-lang/crates.io-index" 1213 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 1214 | dependencies = [ 1215 | "core-foundation-sys", 1216 | "libc", 1217 | ] 1218 | 1219 | [[package]] 1220 | name = "core-foundation-sys" 1221 | version = "0.8.7" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 1224 | 1225 | [[package]] 1226 | name = "cpufeatures" 1227 | version = "0.2.13" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" 1230 | dependencies = [ 1231 | "libc", 1232 | ] 1233 | 1234 | [[package]] 1235 | name = "crossbeam-utils" 1236 | version = "0.8.20" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 1239 | 1240 | [[package]] 1241 | name = "crunchy" 1242 | version = "0.2.2" 1243 | source = "registry+https://github.com/rust-lang/crates.io-index" 1244 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 1245 | 1246 | [[package]] 1247 | name = "crypto-bigint" 1248 | version = "0.5.5" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" 1251 | dependencies = [ 1252 | "generic-array", 1253 | "rand_core", 1254 | "subtle", 1255 | "zeroize", 1256 | ] 1257 | 1258 | [[package]] 1259 | name = "crypto-common" 1260 | version = "0.1.6" 1261 | source = "registry+https://github.com/rust-lang/crates.io-index" 1262 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 1263 | dependencies = [ 1264 | "generic-array", 1265 | "typenum", 1266 | ] 1267 | 1268 | [[package]] 1269 | name = "csv" 1270 | version = "1.3.0" 1271 | source = "registry+https://github.com/rust-lang/crates.io-index" 1272 | checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" 1273 | dependencies = [ 1274 | "csv-core", 1275 | "itoa", 1276 | "ryu", 1277 | "serde", 1278 | ] 1279 | 1280 | [[package]] 1281 | name = "csv-core" 1282 | version = "0.1.11" 1283 | source = "registry+https://github.com/rust-lang/crates.io-index" 1284 | checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" 1285 | dependencies = [ 1286 | "memchr", 1287 | ] 1288 | 1289 | [[package]] 1290 | name = "darling" 1291 | version = "0.20.10" 1292 | source = "registry+https://github.com/rust-lang/crates.io-index" 1293 | checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" 1294 | dependencies = [ 1295 | "darling_core", 1296 | "darling_macro", 1297 | ] 1298 | 1299 | [[package]] 1300 | name = "darling_core" 1301 | version = "0.20.10" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" 1304 | dependencies = [ 1305 | "fnv", 1306 | "ident_case", 1307 | "proc-macro2", 1308 | "quote", 1309 | "strsim", 1310 | "syn 2.0.76", 1311 | ] 1312 | 1313 | [[package]] 1314 | name = "darling_macro" 1315 | version = "0.20.10" 1316 | source = "registry+https://github.com/rust-lang/crates.io-index" 1317 | checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" 1318 | dependencies = [ 1319 | "darling_core", 1320 | "quote", 1321 | "syn 2.0.76", 1322 | ] 1323 | 1324 | [[package]] 1325 | name = "dashmap" 1326 | version = "6.0.1" 1327 | source = "registry+https://github.com/rust-lang/crates.io-index" 1328 | checksum = "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28" 1329 | dependencies = [ 1330 | "cfg-if", 1331 | "crossbeam-utils", 1332 | "hashbrown 0.14.5", 1333 | "lock_api", 1334 | "once_cell", 1335 | "parking_lot_core", 1336 | ] 1337 | 1338 | [[package]] 1339 | name = "data-encoding" 1340 | version = "2.6.0" 1341 | source = "registry+https://github.com/rust-lang/crates.io-index" 1342 | checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" 1343 | 1344 | [[package]] 1345 | name = "der" 1346 | version = "0.7.9" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" 1349 | dependencies = [ 1350 | "const-oid", 1351 | "zeroize", 1352 | ] 1353 | 1354 | [[package]] 1355 | name = "deranged" 1356 | version = "0.3.11" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 1359 | dependencies = [ 1360 | "powerfmt", 1361 | "serde", 1362 | ] 1363 | 1364 | [[package]] 1365 | name = "derivative" 1366 | version = "2.2.0" 1367 | source = "registry+https://github.com/rust-lang/crates.io-index" 1368 | checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 1369 | dependencies = [ 1370 | "proc-macro2", 1371 | "quote", 1372 | "syn 1.0.109", 1373 | ] 1374 | 1375 | [[package]] 1376 | name = "derive_more" 1377 | version = "0.99.18" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" 1380 | dependencies = [ 1381 | "convert_case", 1382 | "proc-macro2", 1383 | "quote", 1384 | "rustc_version 0.4.1", 1385 | "syn 2.0.76", 1386 | ] 1387 | 1388 | [[package]] 1389 | name = "derive_more" 1390 | version = "1.0.0" 1391 | source = "registry+https://github.com/rust-lang/crates.io-index" 1392 | checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" 1393 | dependencies = [ 1394 | "derive_more-impl", 1395 | ] 1396 | 1397 | [[package]] 1398 | name = "derive_more-impl" 1399 | version = "1.0.0" 1400 | source = "registry+https://github.com/rust-lang/crates.io-index" 1401 | checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" 1402 | dependencies = [ 1403 | "proc-macro2", 1404 | "quote", 1405 | "syn 2.0.76", 1406 | ] 1407 | 1408 | [[package]] 1409 | name = "digest" 1410 | version = "0.9.0" 1411 | source = "registry+https://github.com/rust-lang/crates.io-index" 1412 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 1413 | dependencies = [ 1414 | "generic-array", 1415 | ] 1416 | 1417 | [[package]] 1418 | name = "digest" 1419 | version = "0.10.7" 1420 | source = "registry+https://github.com/rust-lang/crates.io-index" 1421 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 1422 | dependencies = [ 1423 | "block-buffer", 1424 | "const-oid", 1425 | "crypto-common", 1426 | "subtle", 1427 | ] 1428 | 1429 | [[package]] 1430 | name = "doctest-file" 1431 | version = "1.0.0" 1432 | source = "registry+https://github.com/rust-lang/crates.io-index" 1433 | checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" 1434 | 1435 | [[package]] 1436 | name = "dunce" 1437 | version = "1.0.5" 1438 | source = "registry+https://github.com/rust-lang/crates.io-index" 1439 | checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 1440 | 1441 | [[package]] 1442 | name = "dyn-clone" 1443 | version = "1.0.17" 1444 | source = "registry+https://github.com/rust-lang/crates.io-index" 1445 | checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" 1446 | 1447 | [[package]] 1448 | name = "ecdsa" 1449 | version = "0.16.9" 1450 | source = "registry+https://github.com/rust-lang/crates.io-index" 1451 | checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" 1452 | dependencies = [ 1453 | "der", 1454 | "digest 0.10.7", 1455 | "elliptic-curve", 1456 | "rfc6979", 1457 | "signature", 1458 | "spki", 1459 | ] 1460 | 1461 | [[package]] 1462 | name = "either" 1463 | version = "1.13.0" 1464 | source = "registry+https://github.com/rust-lang/crates.io-index" 1465 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 1466 | 1467 | [[package]] 1468 | name = "elliptic-curve" 1469 | version = "0.13.8" 1470 | source = "registry+https://github.com/rust-lang/crates.io-index" 1471 | checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" 1472 | dependencies = [ 1473 | "base16ct", 1474 | "crypto-bigint", 1475 | "digest 0.10.7", 1476 | "ff", 1477 | "generic-array", 1478 | "group", 1479 | "pkcs8", 1480 | "rand_core", 1481 | "sec1", 1482 | "subtle", 1483 | "zeroize", 1484 | ] 1485 | 1486 | [[package]] 1487 | name = "equivalent" 1488 | version = "1.0.1" 1489 | source = "registry+https://github.com/rust-lang/crates.io-index" 1490 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 1491 | 1492 | [[package]] 1493 | name = "erased-serde" 1494 | version = "0.4.5" 1495 | source = "registry+https://github.com/rust-lang/crates.io-index" 1496 | checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" 1497 | dependencies = [ 1498 | "serde", 1499 | "typeid", 1500 | ] 1501 | 1502 | [[package]] 1503 | name = "errno" 1504 | version = "0.3.9" 1505 | source = "registry+https://github.com/rust-lang/crates.io-index" 1506 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 1507 | dependencies = [ 1508 | "libc", 1509 | "windows-sys 0.52.0", 1510 | ] 1511 | 1512 | [[package]] 1513 | name = "fastrand" 1514 | version = "2.1.1" 1515 | source = "registry+https://github.com/rust-lang/crates.io-index" 1516 | checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" 1517 | 1518 | [[package]] 1519 | name = "fastrlp" 1520 | version = "0.3.1" 1521 | source = "registry+https://github.com/rust-lang/crates.io-index" 1522 | checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" 1523 | dependencies = [ 1524 | "arrayvec", 1525 | "auto_impl", 1526 | "bytes", 1527 | ] 1528 | 1529 | [[package]] 1530 | name = "ff" 1531 | version = "0.13.0" 1532 | source = "registry+https://github.com/rust-lang/crates.io-index" 1533 | checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" 1534 | dependencies = [ 1535 | "rand_core", 1536 | "subtle", 1537 | ] 1538 | 1539 | [[package]] 1540 | name = "fixed-hash" 1541 | version = "0.8.0" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" 1544 | dependencies = [ 1545 | "byteorder", 1546 | "rand", 1547 | "rustc-hex", 1548 | "static_assertions", 1549 | ] 1550 | 1551 | [[package]] 1552 | name = "fnv" 1553 | version = "1.0.7" 1554 | source = "registry+https://github.com/rust-lang/crates.io-index" 1555 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1556 | 1557 | [[package]] 1558 | name = "foreign-types" 1559 | version = "0.3.2" 1560 | source = "registry+https://github.com/rust-lang/crates.io-index" 1561 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1562 | dependencies = [ 1563 | "foreign-types-shared", 1564 | ] 1565 | 1566 | [[package]] 1567 | name = "foreign-types-shared" 1568 | version = "0.1.1" 1569 | source = "registry+https://github.com/rust-lang/crates.io-index" 1570 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1571 | 1572 | [[package]] 1573 | name = "form_urlencoded" 1574 | version = "1.2.1" 1575 | source = "registry+https://github.com/rust-lang/crates.io-index" 1576 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 1577 | dependencies = [ 1578 | "percent-encoding", 1579 | ] 1580 | 1581 | [[package]] 1582 | name = "funty" 1583 | version = "2.0.0" 1584 | source = "registry+https://github.com/rust-lang/crates.io-index" 1585 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" 1586 | 1587 | [[package]] 1588 | name = "futures" 1589 | version = "0.3.30" 1590 | source = "registry+https://github.com/rust-lang/crates.io-index" 1591 | checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" 1592 | dependencies = [ 1593 | "futures-channel", 1594 | "futures-core", 1595 | "futures-executor", 1596 | "futures-io", 1597 | "futures-sink", 1598 | "futures-task", 1599 | "futures-util", 1600 | ] 1601 | 1602 | [[package]] 1603 | name = "futures-channel" 1604 | version = "0.3.30" 1605 | source = "registry+https://github.com/rust-lang/crates.io-index" 1606 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 1607 | dependencies = [ 1608 | "futures-core", 1609 | "futures-sink", 1610 | ] 1611 | 1612 | [[package]] 1613 | name = "futures-core" 1614 | version = "0.3.30" 1615 | source = "registry+https://github.com/rust-lang/crates.io-index" 1616 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 1617 | 1618 | [[package]] 1619 | name = "futures-executor" 1620 | version = "0.3.30" 1621 | source = "registry+https://github.com/rust-lang/crates.io-index" 1622 | checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" 1623 | dependencies = [ 1624 | "futures-core", 1625 | "futures-task", 1626 | "futures-util", 1627 | ] 1628 | 1629 | [[package]] 1630 | name = "futures-io" 1631 | version = "0.3.30" 1632 | source = "registry+https://github.com/rust-lang/crates.io-index" 1633 | checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 1634 | 1635 | [[package]] 1636 | name = "futures-macro" 1637 | version = "0.3.30" 1638 | source = "registry+https://github.com/rust-lang/crates.io-index" 1639 | checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" 1640 | dependencies = [ 1641 | "proc-macro2", 1642 | "quote", 1643 | "syn 2.0.76", 1644 | ] 1645 | 1646 | [[package]] 1647 | name = "futures-sink" 1648 | version = "0.3.30" 1649 | source = "registry+https://github.com/rust-lang/crates.io-index" 1650 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 1651 | 1652 | [[package]] 1653 | name = "futures-task" 1654 | version = "0.3.30" 1655 | source = "registry+https://github.com/rust-lang/crates.io-index" 1656 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 1657 | 1658 | [[package]] 1659 | name = "futures-util" 1660 | version = "0.3.30" 1661 | source = "registry+https://github.com/rust-lang/crates.io-index" 1662 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 1663 | dependencies = [ 1664 | "futures-channel", 1665 | "futures-core", 1666 | "futures-io", 1667 | "futures-macro", 1668 | "futures-sink", 1669 | "futures-task", 1670 | "memchr", 1671 | "pin-project-lite", 1672 | "pin-utils", 1673 | "slab", 1674 | ] 1675 | 1676 | [[package]] 1677 | name = "futures-utils-wasm" 1678 | version = "0.1.0" 1679 | source = "registry+https://github.com/rust-lang/crates.io-index" 1680 | checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" 1681 | 1682 | [[package]] 1683 | name = "generic-array" 1684 | version = "0.14.7" 1685 | source = "registry+https://github.com/rust-lang/crates.io-index" 1686 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1687 | dependencies = [ 1688 | "typenum", 1689 | "version_check", 1690 | "zeroize", 1691 | ] 1692 | 1693 | [[package]] 1694 | name = "getrandom" 1695 | version = "0.2.15" 1696 | source = "registry+https://github.com/rust-lang/crates.io-index" 1697 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 1698 | dependencies = [ 1699 | "cfg-if", 1700 | "libc", 1701 | "wasi", 1702 | ] 1703 | 1704 | [[package]] 1705 | name = "gimli" 1706 | version = "0.29.0" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" 1709 | 1710 | [[package]] 1711 | name = "glob" 1712 | version = "0.3.1" 1713 | source = "registry+https://github.com/rust-lang/crates.io-index" 1714 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" 1715 | 1716 | [[package]] 1717 | name = "gmp-mpfr-sys" 1718 | version = "1.6.4" 1719 | source = "registry+https://github.com/rust-lang/crates.io-index" 1720 | checksum = "b0205cd82059bc63b63cf516d714352a30c44f2c74da9961dfda2617ae6b5918" 1721 | dependencies = [ 1722 | "libc", 1723 | "windows-sys 0.52.0", 1724 | ] 1725 | 1726 | [[package]] 1727 | name = "group" 1728 | version = "0.13.0" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" 1731 | dependencies = [ 1732 | "ff", 1733 | "rand_core", 1734 | "subtle", 1735 | ] 1736 | 1737 | [[package]] 1738 | name = "hashbrown" 1739 | version = "0.12.3" 1740 | source = "registry+https://github.com/rust-lang/crates.io-index" 1741 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1742 | 1743 | [[package]] 1744 | name = "hashbrown" 1745 | version = "0.14.5" 1746 | source = "registry+https://github.com/rust-lang/crates.io-index" 1747 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1748 | dependencies = [ 1749 | "ahash", 1750 | "allocator-api2", 1751 | ] 1752 | 1753 | [[package]] 1754 | name = "heck" 1755 | version = "0.5.0" 1756 | source = "registry+https://github.com/rust-lang/crates.io-index" 1757 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1758 | 1759 | [[package]] 1760 | name = "hermit-abi" 1761 | version = "0.3.9" 1762 | source = "registry+https://github.com/rust-lang/crates.io-index" 1763 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 1764 | 1765 | [[package]] 1766 | name = "hex" 1767 | version = "0.4.3" 1768 | source = "registry+https://github.com/rust-lang/crates.io-index" 1769 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1770 | dependencies = [ 1771 | "serde", 1772 | ] 1773 | 1774 | [[package]] 1775 | name = "hex-literal" 1776 | version = "0.4.1" 1777 | source = "registry+https://github.com/rust-lang/crates.io-index" 1778 | checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" 1779 | 1780 | [[package]] 1781 | name = "hmac" 1782 | version = "0.12.1" 1783 | source = "registry+https://github.com/rust-lang/crates.io-index" 1784 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1785 | dependencies = [ 1786 | "digest 0.10.7", 1787 | ] 1788 | 1789 | [[package]] 1790 | name = "http" 1791 | version = "1.1.0" 1792 | source = "registry+https://github.com/rust-lang/crates.io-index" 1793 | checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" 1794 | dependencies = [ 1795 | "bytes", 1796 | "fnv", 1797 | "itoa", 1798 | ] 1799 | 1800 | [[package]] 1801 | name = "http-body" 1802 | version = "1.0.1" 1803 | source = "registry+https://github.com/rust-lang/crates.io-index" 1804 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 1805 | dependencies = [ 1806 | "bytes", 1807 | "http", 1808 | ] 1809 | 1810 | [[package]] 1811 | name = "http-body-util" 1812 | version = "0.1.2" 1813 | source = "registry+https://github.com/rust-lang/crates.io-index" 1814 | checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" 1815 | dependencies = [ 1816 | "bytes", 1817 | "futures-util", 1818 | "http", 1819 | "http-body", 1820 | "pin-project-lite", 1821 | ] 1822 | 1823 | [[package]] 1824 | name = "httparse" 1825 | version = "1.9.4" 1826 | source = "registry+https://github.com/rust-lang/crates.io-index" 1827 | checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" 1828 | 1829 | [[package]] 1830 | name = "humansize" 1831 | version = "2.1.3" 1832 | source = "registry+https://github.com/rust-lang/crates.io-index" 1833 | checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" 1834 | dependencies = [ 1835 | "libm", 1836 | ] 1837 | 1838 | [[package]] 1839 | name = "hyper" 1840 | version = "1.4.1" 1841 | source = "registry+https://github.com/rust-lang/crates.io-index" 1842 | checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" 1843 | dependencies = [ 1844 | "bytes", 1845 | "futures-channel", 1846 | "futures-util", 1847 | "http", 1848 | "http-body", 1849 | "httparse", 1850 | "itoa", 1851 | "pin-project-lite", 1852 | "smallvec", 1853 | "tokio", 1854 | "want", 1855 | ] 1856 | 1857 | [[package]] 1858 | name = "hyper-tls" 1859 | version = "0.6.0" 1860 | source = "registry+https://github.com/rust-lang/crates.io-index" 1861 | checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 1862 | dependencies = [ 1863 | "bytes", 1864 | "http-body-util", 1865 | "hyper", 1866 | "hyper-util", 1867 | "native-tls", 1868 | "tokio", 1869 | "tokio-native-tls", 1870 | "tower-service", 1871 | ] 1872 | 1873 | [[package]] 1874 | name = "hyper-util" 1875 | version = "0.1.7" 1876 | source = "registry+https://github.com/rust-lang/crates.io-index" 1877 | checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" 1878 | dependencies = [ 1879 | "bytes", 1880 | "futures-channel", 1881 | "futures-util", 1882 | "http", 1883 | "http-body", 1884 | "hyper", 1885 | "pin-project-lite", 1886 | "socket2", 1887 | "tokio", 1888 | "tower", 1889 | "tower-service", 1890 | "tracing", 1891 | ] 1892 | 1893 | [[package]] 1894 | name = "iana-time-zone" 1895 | version = "0.1.60" 1896 | source = "registry+https://github.com/rust-lang/crates.io-index" 1897 | checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" 1898 | dependencies = [ 1899 | "android_system_properties", 1900 | "core-foundation-sys", 1901 | "iana-time-zone-haiku", 1902 | "js-sys", 1903 | "wasm-bindgen", 1904 | "windows-core", 1905 | ] 1906 | 1907 | [[package]] 1908 | name = "iana-time-zone-haiku" 1909 | version = "0.1.2" 1910 | source = "registry+https://github.com/rust-lang/crates.io-index" 1911 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1912 | dependencies = [ 1913 | "cc", 1914 | ] 1915 | 1916 | [[package]] 1917 | name = "ident_case" 1918 | version = "1.0.1" 1919 | source = "registry+https://github.com/rust-lang/crates.io-index" 1920 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1921 | 1922 | [[package]] 1923 | name = "idna" 1924 | version = "0.5.0" 1925 | source = "registry+https://github.com/rust-lang/crates.io-index" 1926 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 1927 | dependencies = [ 1928 | "unicode-bidi", 1929 | "unicode-normalization", 1930 | ] 1931 | 1932 | [[package]] 1933 | name = "impl-codec" 1934 | version = "0.6.0" 1935 | source = "registry+https://github.com/rust-lang/crates.io-index" 1936 | checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" 1937 | dependencies = [ 1938 | "parity-scale-codec", 1939 | ] 1940 | 1941 | [[package]] 1942 | name = "impl-trait-for-tuples" 1943 | version = "0.2.2" 1944 | source = "registry+https://github.com/rust-lang/crates.io-index" 1945 | checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" 1946 | dependencies = [ 1947 | "proc-macro2", 1948 | "quote", 1949 | "syn 1.0.109", 1950 | ] 1951 | 1952 | [[package]] 1953 | name = "indexmap" 1954 | version = "1.9.3" 1955 | source = "registry+https://github.com/rust-lang/crates.io-index" 1956 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1957 | dependencies = [ 1958 | "autocfg", 1959 | "hashbrown 0.12.3", 1960 | "serde", 1961 | ] 1962 | 1963 | [[package]] 1964 | name = "indexmap" 1965 | version = "2.4.0" 1966 | source = "registry+https://github.com/rust-lang/crates.io-index" 1967 | checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" 1968 | dependencies = [ 1969 | "equivalent", 1970 | "hashbrown 0.14.5", 1971 | "serde", 1972 | ] 1973 | 1974 | [[package]] 1975 | name = "interprocess" 1976 | version = "2.2.1" 1977 | source = "registry+https://github.com/rust-lang/crates.io-index" 1978 | checksum = "d2f4e4a06d42fab3e85ab1b419ad32b09eab58b901d40c57935ff92db3287a13" 1979 | dependencies = [ 1980 | "doctest-file", 1981 | "futures-core", 1982 | "libc", 1983 | "recvmsg", 1984 | "tokio", 1985 | "widestring", 1986 | "windows-sys 0.52.0", 1987 | ] 1988 | 1989 | [[package]] 1990 | name = "ipnet" 1991 | version = "2.9.0" 1992 | source = "registry+https://github.com/rust-lang/crates.io-index" 1993 | checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" 1994 | 1995 | [[package]] 1996 | name = "is_terminal_polyfill" 1997 | version = "1.70.1" 1998 | source = "registry+https://github.com/rust-lang/crates.io-index" 1999 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 2000 | 2001 | [[package]] 2002 | name = "itertools" 2003 | version = "0.10.5" 2004 | source = "registry+https://github.com/rust-lang/crates.io-index" 2005 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 2006 | dependencies = [ 2007 | "either", 2008 | ] 2009 | 2010 | [[package]] 2011 | name = "itertools" 2012 | version = "0.13.0" 2013 | source = "registry+https://github.com/rust-lang/crates.io-index" 2014 | checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" 2015 | dependencies = [ 2016 | "either", 2017 | ] 2018 | 2019 | [[package]] 2020 | name = "itoa" 2021 | version = "1.0.11" 2022 | source = "registry+https://github.com/rust-lang/crates.io-index" 2023 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 2024 | 2025 | [[package]] 2026 | name = "js-sys" 2027 | version = "0.3.70" 2028 | source = "registry+https://github.com/rust-lang/crates.io-index" 2029 | checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" 2030 | dependencies = [ 2031 | "wasm-bindgen", 2032 | ] 2033 | 2034 | [[package]] 2035 | name = "k256" 2036 | version = "0.13.3" 2037 | source = "registry+https://github.com/rust-lang/crates.io-index" 2038 | checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" 2039 | dependencies = [ 2040 | "cfg-if", 2041 | "ecdsa", 2042 | "elliptic-curve", 2043 | "once_cell", 2044 | "sha2", 2045 | ] 2046 | 2047 | [[package]] 2048 | name = "keccak-asm" 2049 | version = "0.1.3" 2050 | source = "registry+https://github.com/rust-lang/crates.io-index" 2051 | checksum = "422fbc7ff2f2f5bdffeb07718e5a5324dca72b0c9293d50df4026652385e3314" 2052 | dependencies = [ 2053 | "digest 0.10.7", 2054 | "sha3-asm", 2055 | ] 2056 | 2057 | [[package]] 2058 | name = "lazy_static" 2059 | version = "1.5.0" 2060 | source = "registry+https://github.com/rust-lang/crates.io-index" 2061 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 2062 | 2063 | [[package]] 2064 | name = "libc" 2065 | version = "0.2.158" 2066 | source = "registry+https://github.com/rust-lang/crates.io-index" 2067 | checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" 2068 | 2069 | [[package]] 2070 | name = "libm" 2071 | version = "0.2.8" 2072 | source = "registry+https://github.com/rust-lang/crates.io-index" 2073 | checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" 2074 | 2075 | [[package]] 2076 | name = "linux-raw-sys" 2077 | version = "0.4.14" 2078 | source = "registry+https://github.com/rust-lang/crates.io-index" 2079 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 2080 | 2081 | [[package]] 2082 | name = "lock_api" 2083 | version = "0.4.12" 2084 | source = "registry+https://github.com/rust-lang/crates.io-index" 2085 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 2086 | dependencies = [ 2087 | "autocfg", 2088 | "scopeguard", 2089 | ] 2090 | 2091 | [[package]] 2092 | name = "log" 2093 | version = "0.4.22" 2094 | source = "registry+https://github.com/rust-lang/crates.io-index" 2095 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 2096 | 2097 | [[package]] 2098 | name = "lru" 2099 | version = "0.12.4" 2100 | source = "registry+https://github.com/rust-lang/crates.io-index" 2101 | checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" 2102 | dependencies = [ 2103 | "hashbrown 0.14.5", 2104 | ] 2105 | 2106 | [[package]] 2107 | name = "memchr" 2108 | version = "2.7.4" 2109 | source = "registry+https://github.com/rust-lang/crates.io-index" 2110 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 2111 | 2112 | [[package]] 2113 | name = "mime" 2114 | version = "0.3.17" 2115 | source = "registry+https://github.com/rust-lang/crates.io-index" 2116 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2117 | 2118 | [[package]] 2119 | name = "mime_guess" 2120 | version = "2.0.5" 2121 | source = "registry+https://github.com/rust-lang/crates.io-index" 2122 | checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 2123 | dependencies = [ 2124 | "mime", 2125 | "unicase", 2126 | ] 2127 | 2128 | [[package]] 2129 | name = "minimal-lexical" 2130 | version = "0.2.1" 2131 | source = "registry+https://github.com/rust-lang/crates.io-index" 2132 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2133 | 2134 | [[package]] 2135 | name = "miniz_oxide" 2136 | version = "0.7.4" 2137 | source = "registry+https://github.com/rust-lang/crates.io-index" 2138 | checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" 2139 | dependencies = [ 2140 | "adler", 2141 | ] 2142 | 2143 | [[package]] 2144 | name = "mio" 2145 | version = "1.0.2" 2146 | source = "registry+https://github.com/rust-lang/crates.io-index" 2147 | checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" 2148 | dependencies = [ 2149 | "hermit-abi", 2150 | "libc", 2151 | "wasi", 2152 | "windows-sys 0.52.0", 2153 | ] 2154 | 2155 | [[package]] 2156 | name = "native-tls" 2157 | version = "0.2.12" 2158 | source = "registry+https://github.com/rust-lang/crates.io-index" 2159 | checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" 2160 | dependencies = [ 2161 | "libc", 2162 | "log", 2163 | "openssl", 2164 | "openssl-probe", 2165 | "openssl-sys", 2166 | "schannel", 2167 | "security-framework", 2168 | "security-framework-sys", 2169 | "tempfile", 2170 | ] 2171 | 2172 | [[package]] 2173 | name = "nom" 2174 | version = "7.1.3" 2175 | source = "registry+https://github.com/rust-lang/crates.io-index" 2176 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2177 | dependencies = [ 2178 | "memchr", 2179 | "minimal-lexical", 2180 | ] 2181 | 2182 | [[package]] 2183 | name = "num-bigint" 2184 | version = "0.4.6" 2185 | source = "registry+https://github.com/rust-lang/crates.io-index" 2186 | checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 2187 | dependencies = [ 2188 | "num-integer", 2189 | "num-traits", 2190 | ] 2191 | 2192 | [[package]] 2193 | name = "num-conv" 2194 | version = "0.1.0" 2195 | source = "registry+https://github.com/rust-lang/crates.io-index" 2196 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 2197 | 2198 | [[package]] 2199 | name = "num-integer" 2200 | version = "0.1.46" 2201 | source = "registry+https://github.com/rust-lang/crates.io-index" 2202 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 2203 | dependencies = [ 2204 | "num-traits", 2205 | ] 2206 | 2207 | [[package]] 2208 | name = "num-traits" 2209 | version = "0.2.19" 2210 | source = "registry+https://github.com/rust-lang/crates.io-index" 2211 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2212 | dependencies = [ 2213 | "autocfg", 2214 | "libm", 2215 | ] 2216 | 2217 | [[package]] 2218 | name = "num_cpus" 2219 | version = "1.16.0" 2220 | source = "registry+https://github.com/rust-lang/crates.io-index" 2221 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 2222 | dependencies = [ 2223 | "hermit-abi", 2224 | "libc", 2225 | ] 2226 | 2227 | [[package]] 2228 | name = "num_enum" 2229 | version = "0.7.3" 2230 | source = "registry+https://github.com/rust-lang/crates.io-index" 2231 | checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" 2232 | dependencies = [ 2233 | "num_enum_derive", 2234 | ] 2235 | 2236 | [[package]] 2237 | name = "num_enum_derive" 2238 | version = "0.7.3" 2239 | source = "registry+https://github.com/rust-lang/crates.io-index" 2240 | checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" 2241 | dependencies = [ 2242 | "proc-macro2", 2243 | "quote", 2244 | "syn 2.0.76", 2245 | ] 2246 | 2247 | [[package]] 2248 | name = "object" 2249 | version = "0.36.3" 2250 | source = "registry+https://github.com/rust-lang/crates.io-index" 2251 | checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" 2252 | dependencies = [ 2253 | "memchr", 2254 | ] 2255 | 2256 | [[package]] 2257 | name = "once_cell" 2258 | version = "1.19.0" 2259 | source = "registry+https://github.com/rust-lang/crates.io-index" 2260 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 2261 | 2262 | [[package]] 2263 | name = "openssl" 2264 | version = "0.10.66" 2265 | source = "registry+https://github.com/rust-lang/crates.io-index" 2266 | checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" 2267 | dependencies = [ 2268 | "bitflags", 2269 | "cfg-if", 2270 | "foreign-types", 2271 | "libc", 2272 | "once_cell", 2273 | "openssl-macros", 2274 | "openssl-sys", 2275 | ] 2276 | 2277 | [[package]] 2278 | name = "openssl-macros" 2279 | version = "0.1.1" 2280 | source = "registry+https://github.com/rust-lang/crates.io-index" 2281 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 2282 | dependencies = [ 2283 | "proc-macro2", 2284 | "quote", 2285 | "syn 2.0.76", 2286 | ] 2287 | 2288 | [[package]] 2289 | name = "openssl-probe" 2290 | version = "0.1.5" 2291 | source = "registry+https://github.com/rust-lang/crates.io-index" 2292 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 2293 | 2294 | [[package]] 2295 | name = "openssl-sys" 2296 | version = "0.9.103" 2297 | source = "registry+https://github.com/rust-lang/crates.io-index" 2298 | checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" 2299 | dependencies = [ 2300 | "cc", 2301 | "libc", 2302 | "pkg-config", 2303 | "vcpkg", 2304 | ] 2305 | 2306 | [[package]] 2307 | name = "parity-scale-codec" 2308 | version = "3.6.12" 2309 | source = "registry+https://github.com/rust-lang/crates.io-index" 2310 | checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" 2311 | dependencies = [ 2312 | "arrayvec", 2313 | "bitvec", 2314 | "byte-slice-cast", 2315 | "impl-trait-for-tuples", 2316 | "parity-scale-codec-derive", 2317 | "serde", 2318 | ] 2319 | 2320 | [[package]] 2321 | name = "parity-scale-codec-derive" 2322 | version = "3.6.12" 2323 | source = "registry+https://github.com/rust-lang/crates.io-index" 2324 | checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" 2325 | dependencies = [ 2326 | "proc-macro-crate", 2327 | "proc-macro2", 2328 | "quote", 2329 | "syn 1.0.109", 2330 | ] 2331 | 2332 | [[package]] 2333 | name = "parking_lot_core" 2334 | version = "0.9.10" 2335 | source = "registry+https://github.com/rust-lang/crates.io-index" 2336 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 2337 | dependencies = [ 2338 | "cfg-if", 2339 | "libc", 2340 | "redox_syscall", 2341 | "smallvec", 2342 | "windows-targets", 2343 | ] 2344 | 2345 | [[package]] 2346 | name = "paste" 2347 | version = "1.0.15" 2348 | source = "registry+https://github.com/rust-lang/crates.io-index" 2349 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2350 | 2351 | [[package]] 2352 | name = "percent-encoding" 2353 | version = "2.3.1" 2354 | source = "registry+https://github.com/rust-lang/crates.io-index" 2355 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 2356 | 2357 | [[package]] 2358 | name = "pest" 2359 | version = "2.7.11" 2360 | source = "registry+https://github.com/rust-lang/crates.io-index" 2361 | checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" 2362 | dependencies = [ 2363 | "memchr", 2364 | "thiserror", 2365 | "ucd-trie", 2366 | ] 2367 | 2368 | [[package]] 2369 | name = "pharos" 2370 | version = "0.5.3" 2371 | source = "registry+https://github.com/rust-lang/crates.io-index" 2372 | checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" 2373 | dependencies = [ 2374 | "futures", 2375 | "rustc_version 0.4.1", 2376 | ] 2377 | 2378 | [[package]] 2379 | name = "pin-project" 2380 | version = "1.1.5" 2381 | source = "registry+https://github.com/rust-lang/crates.io-index" 2382 | checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" 2383 | dependencies = [ 2384 | "pin-project-internal", 2385 | ] 2386 | 2387 | [[package]] 2388 | name = "pin-project-internal" 2389 | version = "1.1.5" 2390 | source = "registry+https://github.com/rust-lang/crates.io-index" 2391 | checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" 2392 | dependencies = [ 2393 | "proc-macro2", 2394 | "quote", 2395 | "syn 2.0.76", 2396 | ] 2397 | 2398 | [[package]] 2399 | name = "pin-project-lite" 2400 | version = "0.2.14" 2401 | source = "registry+https://github.com/rust-lang/crates.io-index" 2402 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 2403 | 2404 | [[package]] 2405 | name = "pin-utils" 2406 | version = "0.1.0" 2407 | source = "registry+https://github.com/rust-lang/crates.io-index" 2408 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2409 | 2410 | [[package]] 2411 | name = "pkcs8" 2412 | version = "0.10.2" 2413 | source = "registry+https://github.com/rust-lang/crates.io-index" 2414 | checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 2415 | dependencies = [ 2416 | "der", 2417 | "spki", 2418 | ] 2419 | 2420 | [[package]] 2421 | name = "pkg-config" 2422 | version = "0.3.30" 2423 | source = "registry+https://github.com/rust-lang/crates.io-index" 2424 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 2425 | 2426 | [[package]] 2427 | name = "plotly" 2428 | version = "0.9.0" 2429 | source = "registry+https://github.com/rust-lang/crates.io-index" 2430 | checksum = "25b8fd16c14ce31e4d48a31970530c2e3152b965e8567469e292712af7c9536f" 2431 | dependencies = [ 2432 | "askama", 2433 | "dyn-clone", 2434 | "erased-serde", 2435 | "once_cell", 2436 | "plotly_derive", 2437 | "rand", 2438 | "serde", 2439 | "serde_json", 2440 | "serde_repr", 2441 | "serde_with", 2442 | ] 2443 | 2444 | [[package]] 2445 | name = "plotly_derive" 2446 | version = "0.9.0" 2447 | source = "registry+https://github.com/rust-lang/crates.io-index" 2448 | checksum = "7817cbbd497db67dc5d21206fd0f4cab0cd6974b6fd2791f012c5455245b0e65" 2449 | dependencies = [ 2450 | "darling", 2451 | "proc-macro2", 2452 | "quote", 2453 | "syn 2.0.76", 2454 | ] 2455 | 2456 | [[package]] 2457 | name = "powerfmt" 2458 | version = "0.2.0" 2459 | source = "registry+https://github.com/rust-lang/crates.io-index" 2460 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2461 | 2462 | [[package]] 2463 | name = "ppv-lite86" 2464 | version = "0.2.20" 2465 | source = "registry+https://github.com/rust-lang/crates.io-index" 2466 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 2467 | dependencies = [ 2468 | "zerocopy", 2469 | ] 2470 | 2471 | [[package]] 2472 | name = "primitive-types" 2473 | version = "0.12.2" 2474 | source = "registry+https://github.com/rust-lang/crates.io-index" 2475 | checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" 2476 | dependencies = [ 2477 | "fixed-hash", 2478 | "impl-codec", 2479 | "uint", 2480 | ] 2481 | 2482 | [[package]] 2483 | name = "proc-macro-crate" 2484 | version = "3.2.0" 2485 | source = "registry+https://github.com/rust-lang/crates.io-index" 2486 | checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" 2487 | dependencies = [ 2488 | "toml_edit", 2489 | ] 2490 | 2491 | [[package]] 2492 | name = "proc-macro-error" 2493 | version = "1.0.4" 2494 | source = "registry+https://github.com/rust-lang/crates.io-index" 2495 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 2496 | dependencies = [ 2497 | "proc-macro-error-attr", 2498 | "proc-macro2", 2499 | "quote", 2500 | "syn 1.0.109", 2501 | "version_check", 2502 | ] 2503 | 2504 | [[package]] 2505 | name = "proc-macro-error-attr" 2506 | version = "1.0.4" 2507 | source = "registry+https://github.com/rust-lang/crates.io-index" 2508 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 2509 | dependencies = [ 2510 | "proc-macro2", 2511 | "quote", 2512 | "version_check", 2513 | ] 2514 | 2515 | [[package]] 2516 | name = "proc-macro2" 2517 | version = "1.0.86" 2518 | source = "registry+https://github.com/rust-lang/crates.io-index" 2519 | checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" 2520 | dependencies = [ 2521 | "unicode-ident", 2522 | ] 2523 | 2524 | [[package]] 2525 | name = "proptest" 2526 | version = "1.5.0" 2527 | source = "registry+https://github.com/rust-lang/crates.io-index" 2528 | checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" 2529 | dependencies = [ 2530 | "bit-set", 2531 | "bit-vec", 2532 | "bitflags", 2533 | "lazy_static", 2534 | "num-traits", 2535 | "rand", 2536 | "rand_chacha", 2537 | "rand_xorshift", 2538 | "regex-syntax", 2539 | "rusty-fork", 2540 | "tempfile", 2541 | "unarray", 2542 | ] 2543 | 2544 | [[package]] 2545 | name = "quick-error" 2546 | version = "1.2.3" 2547 | source = "registry+https://github.com/rust-lang/crates.io-index" 2548 | checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 2549 | 2550 | [[package]] 2551 | name = "quote" 2552 | version = "1.0.37" 2553 | source = "registry+https://github.com/rust-lang/crates.io-index" 2554 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 2555 | dependencies = [ 2556 | "proc-macro2", 2557 | ] 2558 | 2559 | [[package]] 2560 | name = "radium" 2561 | version = "0.7.0" 2562 | source = "registry+https://github.com/rust-lang/crates.io-index" 2563 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" 2564 | 2565 | [[package]] 2566 | name = "rand" 2567 | version = "0.8.5" 2568 | source = "registry+https://github.com/rust-lang/crates.io-index" 2569 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2570 | dependencies = [ 2571 | "libc", 2572 | "rand_chacha", 2573 | "rand_core", 2574 | ] 2575 | 2576 | [[package]] 2577 | name = "rand_chacha" 2578 | version = "0.3.1" 2579 | source = "registry+https://github.com/rust-lang/crates.io-index" 2580 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2581 | dependencies = [ 2582 | "ppv-lite86", 2583 | "rand_core", 2584 | ] 2585 | 2586 | [[package]] 2587 | name = "rand_core" 2588 | version = "0.6.4" 2589 | source = "registry+https://github.com/rust-lang/crates.io-index" 2590 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2591 | dependencies = [ 2592 | "getrandom", 2593 | ] 2594 | 2595 | [[package]] 2596 | name = "rand_distr" 2597 | version = "0.4.3" 2598 | source = "registry+https://github.com/rust-lang/crates.io-index" 2599 | checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" 2600 | dependencies = [ 2601 | "num-traits", 2602 | "rand", 2603 | ] 2604 | 2605 | [[package]] 2606 | name = "rand_xorshift" 2607 | version = "0.3.0" 2608 | source = "registry+https://github.com/rust-lang/crates.io-index" 2609 | checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" 2610 | dependencies = [ 2611 | "rand_core", 2612 | ] 2613 | 2614 | [[package]] 2615 | name = "recvmsg" 2616 | version = "1.0.0" 2617 | source = "registry+https://github.com/rust-lang/crates.io-index" 2618 | checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" 2619 | 2620 | [[package]] 2621 | name = "redox_syscall" 2622 | version = "0.5.3" 2623 | source = "registry+https://github.com/rust-lang/crates.io-index" 2624 | checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" 2625 | dependencies = [ 2626 | "bitflags", 2627 | ] 2628 | 2629 | [[package]] 2630 | name = "regex-syntax" 2631 | version = "0.8.4" 2632 | source = "registry+https://github.com/rust-lang/crates.io-index" 2633 | checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" 2634 | 2635 | [[package]] 2636 | name = "reqwest" 2637 | version = "0.12.7" 2638 | source = "registry+https://github.com/rust-lang/crates.io-index" 2639 | checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" 2640 | dependencies = [ 2641 | "base64", 2642 | "bytes", 2643 | "futures-core", 2644 | "futures-util", 2645 | "http", 2646 | "http-body", 2647 | "http-body-util", 2648 | "hyper", 2649 | "hyper-tls", 2650 | "hyper-util", 2651 | "ipnet", 2652 | "js-sys", 2653 | "log", 2654 | "mime", 2655 | "native-tls", 2656 | "once_cell", 2657 | "percent-encoding", 2658 | "pin-project-lite", 2659 | "rustls-pemfile", 2660 | "serde", 2661 | "serde_json", 2662 | "serde_urlencoded", 2663 | "sync_wrapper", 2664 | "tokio", 2665 | "tokio-native-tls", 2666 | "tower-service", 2667 | "url", 2668 | "wasm-bindgen", 2669 | "wasm-bindgen-futures", 2670 | "web-sys", 2671 | "windows-registry", 2672 | ] 2673 | 2674 | [[package]] 2675 | name = "rfc6979" 2676 | version = "0.4.0" 2677 | source = "registry+https://github.com/rust-lang/crates.io-index" 2678 | checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" 2679 | dependencies = [ 2680 | "hmac", 2681 | "subtle", 2682 | ] 2683 | 2684 | [[package]] 2685 | name = "ring" 2686 | version = "0.17.8" 2687 | source = "registry+https://github.com/rust-lang/crates.io-index" 2688 | checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 2689 | dependencies = [ 2690 | "cc", 2691 | "cfg-if", 2692 | "getrandom", 2693 | "libc", 2694 | "spin", 2695 | "untrusted", 2696 | "windows-sys 0.52.0", 2697 | ] 2698 | 2699 | [[package]] 2700 | name = "rlp" 2701 | version = "0.5.2" 2702 | source = "registry+https://github.com/rust-lang/crates.io-index" 2703 | checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" 2704 | dependencies = [ 2705 | "bytes", 2706 | "rustc-hex", 2707 | ] 2708 | 2709 | [[package]] 2710 | name = "rug" 2711 | version = "1.25.0" 2712 | source = "registry+https://github.com/rust-lang/crates.io-index" 2713 | checksum = "01d157703b9f96e9be75c739e7030d1d81be377d882d93046670309381517772" 2714 | dependencies = [ 2715 | "az", 2716 | "gmp-mpfr-sys", 2717 | "libc", 2718 | "libm", 2719 | ] 2720 | 2721 | [[package]] 2722 | name = "ruint" 2723 | version = "1.12.3" 2724 | source = "registry+https://github.com/rust-lang/crates.io-index" 2725 | checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" 2726 | dependencies = [ 2727 | "alloy-rlp", 2728 | "ark-ff 0.3.0", 2729 | "ark-ff 0.4.2", 2730 | "bytes", 2731 | "fastrlp", 2732 | "num-bigint", 2733 | "num-traits", 2734 | "parity-scale-codec", 2735 | "primitive-types", 2736 | "proptest", 2737 | "rand", 2738 | "rlp", 2739 | "ruint-macro", 2740 | "serde", 2741 | "valuable", 2742 | "zeroize", 2743 | ] 2744 | 2745 | [[package]] 2746 | name = "ruint-macro" 2747 | version = "1.2.1" 2748 | source = "registry+https://github.com/rust-lang/crates.io-index" 2749 | checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" 2750 | 2751 | [[package]] 2752 | name = "rustc-demangle" 2753 | version = "0.1.24" 2754 | source = "registry+https://github.com/rust-lang/crates.io-index" 2755 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 2756 | 2757 | [[package]] 2758 | name = "rustc-hex" 2759 | version = "2.1.0" 2760 | source = "registry+https://github.com/rust-lang/crates.io-index" 2761 | checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" 2762 | 2763 | [[package]] 2764 | name = "rustc_version" 2765 | version = "0.3.3" 2766 | source = "registry+https://github.com/rust-lang/crates.io-index" 2767 | checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" 2768 | dependencies = [ 2769 | "semver 0.11.0", 2770 | ] 2771 | 2772 | [[package]] 2773 | name = "rustc_version" 2774 | version = "0.4.1" 2775 | source = "registry+https://github.com/rust-lang/crates.io-index" 2776 | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2777 | dependencies = [ 2778 | "semver 1.0.23", 2779 | ] 2780 | 2781 | [[package]] 2782 | name = "rustix" 2783 | version = "0.38.35" 2784 | source = "registry+https://github.com/rust-lang/crates.io-index" 2785 | checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" 2786 | dependencies = [ 2787 | "bitflags", 2788 | "errno", 2789 | "libc", 2790 | "linux-raw-sys", 2791 | "windows-sys 0.52.0", 2792 | ] 2793 | 2794 | [[package]] 2795 | name = "rustls" 2796 | version = "0.23.12" 2797 | source = "registry+https://github.com/rust-lang/crates.io-index" 2798 | checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" 2799 | dependencies = [ 2800 | "once_cell", 2801 | "ring", 2802 | "rustls-pki-types", 2803 | "rustls-webpki", 2804 | "subtle", 2805 | "zeroize", 2806 | ] 2807 | 2808 | [[package]] 2809 | name = "rustls-pemfile" 2810 | version = "2.1.3" 2811 | source = "registry+https://github.com/rust-lang/crates.io-index" 2812 | checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" 2813 | dependencies = [ 2814 | "base64", 2815 | "rustls-pki-types", 2816 | ] 2817 | 2818 | [[package]] 2819 | name = "rustls-pki-types" 2820 | version = "1.8.0" 2821 | source = "registry+https://github.com/rust-lang/crates.io-index" 2822 | checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" 2823 | 2824 | [[package]] 2825 | name = "rustls-webpki" 2826 | version = "0.102.7" 2827 | source = "registry+https://github.com/rust-lang/crates.io-index" 2828 | checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" 2829 | dependencies = [ 2830 | "ring", 2831 | "rustls-pki-types", 2832 | "untrusted", 2833 | ] 2834 | 2835 | [[package]] 2836 | name = "rustversion" 2837 | version = "1.0.17" 2838 | source = "registry+https://github.com/rust-lang/crates.io-index" 2839 | checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" 2840 | 2841 | [[package]] 2842 | name = "rusty-fork" 2843 | version = "0.3.0" 2844 | source = "registry+https://github.com/rust-lang/crates.io-index" 2845 | checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" 2846 | dependencies = [ 2847 | "fnv", 2848 | "quick-error", 2849 | "tempfile", 2850 | "wait-timeout", 2851 | ] 2852 | 2853 | [[package]] 2854 | name = "ryu" 2855 | version = "1.0.18" 2856 | source = "registry+https://github.com/rust-lang/crates.io-index" 2857 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 2858 | 2859 | [[package]] 2860 | name = "schannel" 2861 | version = "0.1.23" 2862 | source = "registry+https://github.com/rust-lang/crates.io-index" 2863 | checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" 2864 | dependencies = [ 2865 | "windows-sys 0.52.0", 2866 | ] 2867 | 2868 | [[package]] 2869 | name = "scopeguard" 2870 | version = "1.2.0" 2871 | source = "registry+https://github.com/rust-lang/crates.io-index" 2872 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2873 | 2874 | [[package]] 2875 | name = "sec1" 2876 | version = "0.7.3" 2877 | source = "registry+https://github.com/rust-lang/crates.io-index" 2878 | checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" 2879 | dependencies = [ 2880 | "base16ct", 2881 | "der", 2882 | "generic-array", 2883 | "pkcs8", 2884 | "subtle", 2885 | "zeroize", 2886 | ] 2887 | 2888 | [[package]] 2889 | name = "security-framework" 2890 | version = "2.11.1" 2891 | source = "registry+https://github.com/rust-lang/crates.io-index" 2892 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 2893 | dependencies = [ 2894 | "bitflags", 2895 | "core-foundation", 2896 | "core-foundation-sys", 2897 | "libc", 2898 | "security-framework-sys", 2899 | ] 2900 | 2901 | [[package]] 2902 | name = "security-framework-sys" 2903 | version = "2.11.1" 2904 | source = "registry+https://github.com/rust-lang/crates.io-index" 2905 | checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" 2906 | dependencies = [ 2907 | "core-foundation-sys", 2908 | "libc", 2909 | ] 2910 | 2911 | [[package]] 2912 | name = "semver" 2913 | version = "0.11.0" 2914 | source = "registry+https://github.com/rust-lang/crates.io-index" 2915 | checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" 2916 | dependencies = [ 2917 | "semver-parser", 2918 | ] 2919 | 2920 | [[package]] 2921 | name = "semver" 2922 | version = "1.0.23" 2923 | source = "registry+https://github.com/rust-lang/crates.io-index" 2924 | checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" 2925 | 2926 | [[package]] 2927 | name = "semver-parser" 2928 | version = "0.10.2" 2929 | source = "registry+https://github.com/rust-lang/crates.io-index" 2930 | checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" 2931 | dependencies = [ 2932 | "pest", 2933 | ] 2934 | 2935 | [[package]] 2936 | name = "send_wrapper" 2937 | version = "0.6.0" 2938 | source = "registry+https://github.com/rust-lang/crates.io-index" 2939 | checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" 2940 | 2941 | [[package]] 2942 | name = "serde" 2943 | version = "1.0.209" 2944 | source = "registry+https://github.com/rust-lang/crates.io-index" 2945 | checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" 2946 | dependencies = [ 2947 | "serde_derive", 2948 | ] 2949 | 2950 | [[package]] 2951 | name = "serde_derive" 2952 | version = "1.0.209" 2953 | source = "registry+https://github.com/rust-lang/crates.io-index" 2954 | checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" 2955 | dependencies = [ 2956 | "proc-macro2", 2957 | "quote", 2958 | "syn 2.0.76", 2959 | ] 2960 | 2961 | [[package]] 2962 | name = "serde_json" 2963 | version = "1.0.127" 2964 | source = "registry+https://github.com/rust-lang/crates.io-index" 2965 | checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" 2966 | dependencies = [ 2967 | "itoa", 2968 | "memchr", 2969 | "ryu", 2970 | "serde", 2971 | ] 2972 | 2973 | [[package]] 2974 | name = "serde_repr" 2975 | version = "0.1.19" 2976 | source = "registry+https://github.com/rust-lang/crates.io-index" 2977 | checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" 2978 | dependencies = [ 2979 | "proc-macro2", 2980 | "quote", 2981 | "syn 2.0.76", 2982 | ] 2983 | 2984 | [[package]] 2985 | name = "serde_urlencoded" 2986 | version = "0.7.1" 2987 | source = "registry+https://github.com/rust-lang/crates.io-index" 2988 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 2989 | dependencies = [ 2990 | "form_urlencoded", 2991 | "itoa", 2992 | "ryu", 2993 | "serde", 2994 | ] 2995 | 2996 | [[package]] 2997 | name = "serde_with" 2998 | version = "3.9.0" 2999 | source = "registry+https://github.com/rust-lang/crates.io-index" 3000 | checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" 3001 | dependencies = [ 3002 | "base64", 3003 | "chrono", 3004 | "hex", 3005 | "indexmap 1.9.3", 3006 | "indexmap 2.4.0", 3007 | "serde", 3008 | "serde_derive", 3009 | "serde_json", 3010 | "serde_with_macros", 3011 | "time", 3012 | ] 3013 | 3014 | [[package]] 3015 | name = "serde_with_macros" 3016 | version = "3.9.0" 3017 | source = "registry+https://github.com/rust-lang/crates.io-index" 3018 | checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" 3019 | dependencies = [ 3020 | "darling", 3021 | "proc-macro2", 3022 | "quote", 3023 | "syn 2.0.76", 3024 | ] 3025 | 3026 | [[package]] 3027 | name = "sha1" 3028 | version = "0.10.6" 3029 | source = "registry+https://github.com/rust-lang/crates.io-index" 3030 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 3031 | dependencies = [ 3032 | "cfg-if", 3033 | "cpufeatures", 3034 | "digest 0.10.7", 3035 | ] 3036 | 3037 | [[package]] 3038 | name = "sha2" 3039 | version = "0.10.8" 3040 | source = "registry+https://github.com/rust-lang/crates.io-index" 3041 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 3042 | dependencies = [ 3043 | "cfg-if", 3044 | "cpufeatures", 3045 | "digest 0.10.7", 3046 | ] 3047 | 3048 | [[package]] 3049 | name = "sha3-asm" 3050 | version = "0.1.3" 3051 | source = "registry+https://github.com/rust-lang/crates.io-index" 3052 | checksum = "57d79b758b7cb2085612b11a235055e485605a5103faccdd633f35bd7aee69dd" 3053 | dependencies = [ 3054 | "cc", 3055 | "cfg-if", 3056 | ] 3057 | 3058 | [[package]] 3059 | name = "shlex" 3060 | version = "1.3.0" 3061 | source = "registry+https://github.com/rust-lang/crates.io-index" 3062 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 3063 | 3064 | [[package]] 3065 | name = "signature" 3066 | version = "2.2.0" 3067 | source = "registry+https://github.com/rust-lang/crates.io-index" 3068 | checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 3069 | dependencies = [ 3070 | "digest 0.10.7", 3071 | "rand_core", 3072 | ] 3073 | 3074 | [[package]] 3075 | name = "slab" 3076 | version = "0.4.9" 3077 | source = "registry+https://github.com/rust-lang/crates.io-index" 3078 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 3079 | dependencies = [ 3080 | "autocfg", 3081 | ] 3082 | 3083 | [[package]] 3084 | name = "smallvec" 3085 | version = "1.13.2" 3086 | source = "registry+https://github.com/rust-lang/crates.io-index" 3087 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 3088 | 3089 | [[package]] 3090 | name = "socket2" 3091 | version = "0.5.7" 3092 | source = "registry+https://github.com/rust-lang/crates.io-index" 3093 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 3094 | dependencies = [ 3095 | "libc", 3096 | "windows-sys 0.52.0", 3097 | ] 3098 | 3099 | [[package]] 3100 | name = "spin" 3101 | version = "0.9.8" 3102 | source = "registry+https://github.com/rust-lang/crates.io-index" 3103 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 3104 | 3105 | [[package]] 3106 | name = "spki" 3107 | version = "0.7.3" 3108 | source = "registry+https://github.com/rust-lang/crates.io-index" 3109 | checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 3110 | dependencies = [ 3111 | "base64ct", 3112 | "der", 3113 | ] 3114 | 3115 | [[package]] 3116 | name = "static_assertions" 3117 | version = "1.1.0" 3118 | source = "registry+https://github.com/rust-lang/crates.io-index" 3119 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 3120 | 3121 | [[package]] 3122 | name = "strsim" 3123 | version = "0.11.1" 3124 | source = "registry+https://github.com/rust-lang/crates.io-index" 3125 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 3126 | 3127 | [[package]] 3128 | name = "strum" 3129 | version = "0.26.3" 3130 | source = "registry+https://github.com/rust-lang/crates.io-index" 3131 | checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 3132 | dependencies = [ 3133 | "strum_macros", 3134 | ] 3135 | 3136 | [[package]] 3137 | name = "strum_macros" 3138 | version = "0.26.4" 3139 | source = "registry+https://github.com/rust-lang/crates.io-index" 3140 | checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 3141 | dependencies = [ 3142 | "heck", 3143 | "proc-macro2", 3144 | "quote", 3145 | "rustversion", 3146 | "syn 2.0.76", 3147 | ] 3148 | 3149 | [[package]] 3150 | name = "subtle" 3151 | version = "2.6.1" 3152 | source = "registry+https://github.com/rust-lang/crates.io-index" 3153 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 3154 | 3155 | [[package]] 3156 | name = "syn" 3157 | version = "1.0.109" 3158 | source = "registry+https://github.com/rust-lang/crates.io-index" 3159 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 3160 | dependencies = [ 3161 | "proc-macro2", 3162 | "quote", 3163 | "unicode-ident", 3164 | ] 3165 | 3166 | [[package]] 3167 | name = "syn" 3168 | version = "2.0.76" 3169 | source = "registry+https://github.com/rust-lang/crates.io-index" 3170 | checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" 3171 | dependencies = [ 3172 | "proc-macro2", 3173 | "quote", 3174 | "unicode-ident", 3175 | ] 3176 | 3177 | [[package]] 3178 | name = "syn-solidity" 3179 | version = "0.8.0" 3180 | source = "registry+https://github.com/rust-lang/crates.io-index" 3181 | checksum = "284c41c2919303438fcf8dede4036fd1e82d4fc0fbb2b279bd2a1442c909ca92" 3182 | dependencies = [ 3183 | "paste", 3184 | "proc-macro2", 3185 | "quote", 3186 | "syn 2.0.76", 3187 | ] 3188 | 3189 | [[package]] 3190 | name = "sync_wrapper" 3191 | version = "1.0.1" 3192 | source = "registry+https://github.com/rust-lang/crates.io-index" 3193 | checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" 3194 | dependencies = [ 3195 | "futures-core", 3196 | ] 3197 | 3198 | [[package]] 3199 | name = "tap" 3200 | version = "1.0.1" 3201 | source = "registry+https://github.com/rust-lang/crates.io-index" 3202 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" 3203 | 3204 | [[package]] 3205 | name = "tempfile" 3206 | version = "3.12.0" 3207 | source = "registry+https://github.com/rust-lang/crates.io-index" 3208 | checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" 3209 | dependencies = [ 3210 | "cfg-if", 3211 | "fastrand", 3212 | "once_cell", 3213 | "rustix", 3214 | "windows-sys 0.59.0", 3215 | ] 3216 | 3217 | [[package]] 3218 | name = "thiserror" 3219 | version = "1.0.63" 3220 | source = "registry+https://github.com/rust-lang/crates.io-index" 3221 | checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" 3222 | dependencies = [ 3223 | "thiserror-impl", 3224 | ] 3225 | 3226 | [[package]] 3227 | name = "thiserror-impl" 3228 | version = "1.0.63" 3229 | source = "registry+https://github.com/rust-lang/crates.io-index" 3230 | checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" 3231 | dependencies = [ 3232 | "proc-macro2", 3233 | "quote", 3234 | "syn 2.0.76", 3235 | ] 3236 | 3237 | [[package]] 3238 | name = "threadpool" 3239 | version = "1.8.1" 3240 | source = "registry+https://github.com/rust-lang/crates.io-index" 3241 | checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" 3242 | dependencies = [ 3243 | "num_cpus", 3244 | ] 3245 | 3246 | [[package]] 3247 | name = "time" 3248 | version = "0.3.36" 3249 | source = "registry+https://github.com/rust-lang/crates.io-index" 3250 | checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" 3251 | dependencies = [ 3252 | "deranged", 3253 | "itoa", 3254 | "num-conv", 3255 | "powerfmt", 3256 | "serde", 3257 | "time-core", 3258 | "time-macros", 3259 | ] 3260 | 3261 | [[package]] 3262 | name = "time-core" 3263 | version = "0.1.2" 3264 | source = "registry+https://github.com/rust-lang/crates.io-index" 3265 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 3266 | 3267 | [[package]] 3268 | name = "time-macros" 3269 | version = "0.2.18" 3270 | source = "registry+https://github.com/rust-lang/crates.io-index" 3271 | checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" 3272 | dependencies = [ 3273 | "num-conv", 3274 | "time-core", 3275 | ] 3276 | 3277 | [[package]] 3278 | name = "tiny-keccak" 3279 | version = "2.0.2" 3280 | source = "registry+https://github.com/rust-lang/crates.io-index" 3281 | checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" 3282 | dependencies = [ 3283 | "crunchy", 3284 | ] 3285 | 3286 | [[package]] 3287 | name = "tinyvec" 3288 | version = "1.8.0" 3289 | source = "registry+https://github.com/rust-lang/crates.io-index" 3290 | checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" 3291 | dependencies = [ 3292 | "tinyvec_macros", 3293 | ] 3294 | 3295 | [[package]] 3296 | name = "tinyvec_macros" 3297 | version = "0.1.1" 3298 | source = "registry+https://github.com/rust-lang/crates.io-index" 3299 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3300 | 3301 | [[package]] 3302 | name = "tokio" 3303 | version = "1.39.3" 3304 | source = "registry+https://github.com/rust-lang/crates.io-index" 3305 | checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" 3306 | dependencies = [ 3307 | "backtrace", 3308 | "bytes", 3309 | "libc", 3310 | "mio", 3311 | "pin-project-lite", 3312 | "socket2", 3313 | "tokio-macros", 3314 | "windows-sys 0.52.0", 3315 | ] 3316 | 3317 | [[package]] 3318 | name = "tokio-macros" 3319 | version = "2.4.0" 3320 | source = "registry+https://github.com/rust-lang/crates.io-index" 3321 | checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" 3322 | dependencies = [ 3323 | "proc-macro2", 3324 | "quote", 3325 | "syn 2.0.76", 3326 | ] 3327 | 3328 | [[package]] 3329 | name = "tokio-native-tls" 3330 | version = "0.3.1" 3331 | source = "registry+https://github.com/rust-lang/crates.io-index" 3332 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 3333 | dependencies = [ 3334 | "native-tls", 3335 | "tokio", 3336 | ] 3337 | 3338 | [[package]] 3339 | name = "tokio-rustls" 3340 | version = "0.26.0" 3341 | source = "registry+https://github.com/rust-lang/crates.io-index" 3342 | checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" 3343 | dependencies = [ 3344 | "rustls", 3345 | "rustls-pki-types", 3346 | "tokio", 3347 | ] 3348 | 3349 | [[package]] 3350 | name = "tokio-stream" 3351 | version = "0.1.15" 3352 | source = "registry+https://github.com/rust-lang/crates.io-index" 3353 | checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" 3354 | dependencies = [ 3355 | "futures-core", 3356 | "pin-project-lite", 3357 | "tokio", 3358 | "tokio-util", 3359 | ] 3360 | 3361 | [[package]] 3362 | name = "tokio-tungstenite" 3363 | version = "0.23.1" 3364 | source = "registry+https://github.com/rust-lang/crates.io-index" 3365 | checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" 3366 | dependencies = [ 3367 | "futures-util", 3368 | "log", 3369 | "rustls", 3370 | "rustls-pki-types", 3371 | "tokio", 3372 | "tokio-rustls", 3373 | "tungstenite", 3374 | "webpki-roots", 3375 | ] 3376 | 3377 | [[package]] 3378 | name = "tokio-util" 3379 | version = "0.7.11" 3380 | source = "registry+https://github.com/rust-lang/crates.io-index" 3381 | checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" 3382 | dependencies = [ 3383 | "bytes", 3384 | "futures-core", 3385 | "futures-sink", 3386 | "pin-project-lite", 3387 | "tokio", 3388 | ] 3389 | 3390 | [[package]] 3391 | name = "toml_datetime" 3392 | version = "0.6.8" 3393 | source = "registry+https://github.com/rust-lang/crates.io-index" 3394 | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" 3395 | 3396 | [[package]] 3397 | name = "toml_edit" 3398 | version = "0.22.20" 3399 | source = "registry+https://github.com/rust-lang/crates.io-index" 3400 | checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" 3401 | dependencies = [ 3402 | "indexmap 2.4.0", 3403 | "toml_datetime", 3404 | "winnow", 3405 | ] 3406 | 3407 | [[package]] 3408 | name = "tower" 3409 | version = "0.4.13" 3410 | source = "registry+https://github.com/rust-lang/crates.io-index" 3411 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 3412 | dependencies = [ 3413 | "futures-core", 3414 | "futures-util", 3415 | "pin-project", 3416 | "pin-project-lite", 3417 | "tokio", 3418 | "tower-layer", 3419 | "tower-service", 3420 | "tracing", 3421 | ] 3422 | 3423 | [[package]] 3424 | name = "tower-layer" 3425 | version = "0.3.3" 3426 | source = "registry+https://github.com/rust-lang/crates.io-index" 3427 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 3428 | 3429 | [[package]] 3430 | name = "tower-service" 3431 | version = "0.3.3" 3432 | source = "registry+https://github.com/rust-lang/crates.io-index" 3433 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 3434 | 3435 | [[package]] 3436 | name = "tracing" 3437 | version = "0.1.40" 3438 | source = "registry+https://github.com/rust-lang/crates.io-index" 3439 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 3440 | dependencies = [ 3441 | "log", 3442 | "pin-project-lite", 3443 | "tracing-attributes", 3444 | "tracing-core", 3445 | ] 3446 | 3447 | [[package]] 3448 | name = "tracing-attributes" 3449 | version = "0.1.27" 3450 | source = "registry+https://github.com/rust-lang/crates.io-index" 3451 | checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" 3452 | dependencies = [ 3453 | "proc-macro2", 3454 | "quote", 3455 | "syn 2.0.76", 3456 | ] 3457 | 3458 | [[package]] 3459 | name = "tracing-core" 3460 | version = "0.1.32" 3461 | source = "registry+https://github.com/rust-lang/crates.io-index" 3462 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 3463 | dependencies = [ 3464 | "once_cell", 3465 | ] 3466 | 3467 | [[package]] 3468 | name = "try-lock" 3469 | version = "0.2.5" 3470 | source = "registry+https://github.com/rust-lang/crates.io-index" 3471 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 3472 | 3473 | [[package]] 3474 | name = "tungstenite" 3475 | version = "0.23.0" 3476 | source = "registry+https://github.com/rust-lang/crates.io-index" 3477 | checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" 3478 | dependencies = [ 3479 | "byteorder", 3480 | "bytes", 3481 | "data-encoding", 3482 | "http", 3483 | "httparse", 3484 | "log", 3485 | "rand", 3486 | "rustls", 3487 | "rustls-pki-types", 3488 | "sha1", 3489 | "thiserror", 3490 | "utf-8", 3491 | ] 3492 | 3493 | [[package]] 3494 | name = "typeid" 3495 | version = "1.0.2" 3496 | source = "registry+https://github.com/rust-lang/crates.io-index" 3497 | checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" 3498 | 3499 | [[package]] 3500 | name = "typenum" 3501 | version = "1.17.0" 3502 | source = "registry+https://github.com/rust-lang/crates.io-index" 3503 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 3504 | 3505 | [[package]] 3506 | name = "ucd-trie" 3507 | version = "0.1.6" 3508 | source = "registry+https://github.com/rust-lang/crates.io-index" 3509 | checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" 3510 | 3511 | [[package]] 3512 | name = "uint" 3513 | version = "0.9.5" 3514 | source = "registry+https://github.com/rust-lang/crates.io-index" 3515 | checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" 3516 | dependencies = [ 3517 | "byteorder", 3518 | "crunchy", 3519 | "hex", 3520 | "static_assertions", 3521 | ] 3522 | 3523 | [[package]] 3524 | name = "unarray" 3525 | version = "0.1.4" 3526 | source = "registry+https://github.com/rust-lang/crates.io-index" 3527 | checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" 3528 | 3529 | [[package]] 3530 | name = "unicase" 3531 | version = "2.7.0" 3532 | source = "registry+https://github.com/rust-lang/crates.io-index" 3533 | checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" 3534 | dependencies = [ 3535 | "version_check", 3536 | ] 3537 | 3538 | [[package]] 3539 | name = "unicode-bidi" 3540 | version = "0.3.15" 3541 | source = "registry+https://github.com/rust-lang/crates.io-index" 3542 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 3543 | 3544 | [[package]] 3545 | name = "unicode-ident" 3546 | version = "1.0.12" 3547 | source = "registry+https://github.com/rust-lang/crates.io-index" 3548 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 3549 | 3550 | [[package]] 3551 | name = "unicode-normalization" 3552 | version = "0.1.23" 3553 | source = "registry+https://github.com/rust-lang/crates.io-index" 3554 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 3555 | dependencies = [ 3556 | "tinyvec", 3557 | ] 3558 | 3559 | [[package]] 3560 | name = "untrusted" 3561 | version = "0.9.0" 3562 | source = "registry+https://github.com/rust-lang/crates.io-index" 3563 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3564 | 3565 | [[package]] 3566 | name = "url" 3567 | version = "2.5.2" 3568 | source = "registry+https://github.com/rust-lang/crates.io-index" 3569 | checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" 3570 | dependencies = [ 3571 | "form_urlencoded", 3572 | "idna", 3573 | "percent-encoding", 3574 | ] 3575 | 3576 | [[package]] 3577 | name = "utf-8" 3578 | version = "0.7.6" 3579 | source = "registry+https://github.com/rust-lang/crates.io-index" 3580 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 3581 | 3582 | [[package]] 3583 | name = "utf8parse" 3584 | version = "0.2.2" 3585 | source = "registry+https://github.com/rust-lang/crates.io-index" 3586 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 3587 | 3588 | [[package]] 3589 | name = "valuable" 3590 | version = "0.1.0" 3591 | source = "registry+https://github.com/rust-lang/crates.io-index" 3592 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 3593 | 3594 | [[package]] 3595 | name = "vcpkg" 3596 | version = "0.2.15" 3597 | source = "registry+https://github.com/rust-lang/crates.io-index" 3598 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3599 | 3600 | [[package]] 3601 | name = "version_check" 3602 | version = "0.9.5" 3603 | source = "registry+https://github.com/rust-lang/crates.io-index" 3604 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3605 | 3606 | [[package]] 3607 | name = "wait-timeout" 3608 | version = "0.2.0" 3609 | source = "registry+https://github.com/rust-lang/crates.io-index" 3610 | checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" 3611 | dependencies = [ 3612 | "libc", 3613 | ] 3614 | 3615 | [[package]] 3616 | name = "want" 3617 | version = "0.3.1" 3618 | source = "registry+https://github.com/rust-lang/crates.io-index" 3619 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 3620 | dependencies = [ 3621 | "try-lock", 3622 | ] 3623 | 3624 | [[package]] 3625 | name = "wasi" 3626 | version = "0.11.0+wasi-snapshot-preview1" 3627 | source = "registry+https://github.com/rust-lang/crates.io-index" 3628 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3629 | 3630 | [[package]] 3631 | name = "wasm-bindgen" 3632 | version = "0.2.93" 3633 | source = "registry+https://github.com/rust-lang/crates.io-index" 3634 | checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" 3635 | dependencies = [ 3636 | "cfg-if", 3637 | "once_cell", 3638 | "wasm-bindgen-macro", 3639 | ] 3640 | 3641 | [[package]] 3642 | name = "wasm-bindgen-backend" 3643 | version = "0.2.93" 3644 | source = "registry+https://github.com/rust-lang/crates.io-index" 3645 | checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" 3646 | dependencies = [ 3647 | "bumpalo", 3648 | "log", 3649 | "once_cell", 3650 | "proc-macro2", 3651 | "quote", 3652 | "syn 2.0.76", 3653 | "wasm-bindgen-shared", 3654 | ] 3655 | 3656 | [[package]] 3657 | name = "wasm-bindgen-futures" 3658 | version = "0.4.43" 3659 | source = "registry+https://github.com/rust-lang/crates.io-index" 3660 | checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" 3661 | dependencies = [ 3662 | "cfg-if", 3663 | "js-sys", 3664 | "wasm-bindgen", 3665 | "web-sys", 3666 | ] 3667 | 3668 | [[package]] 3669 | name = "wasm-bindgen-macro" 3670 | version = "0.2.93" 3671 | source = "registry+https://github.com/rust-lang/crates.io-index" 3672 | checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" 3673 | dependencies = [ 3674 | "quote", 3675 | "wasm-bindgen-macro-support", 3676 | ] 3677 | 3678 | [[package]] 3679 | name = "wasm-bindgen-macro-support" 3680 | version = "0.2.93" 3681 | source = "registry+https://github.com/rust-lang/crates.io-index" 3682 | checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" 3683 | dependencies = [ 3684 | "proc-macro2", 3685 | "quote", 3686 | "syn 2.0.76", 3687 | "wasm-bindgen-backend", 3688 | "wasm-bindgen-shared", 3689 | ] 3690 | 3691 | [[package]] 3692 | name = "wasm-bindgen-shared" 3693 | version = "0.2.93" 3694 | source = "registry+https://github.com/rust-lang/crates.io-index" 3695 | checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" 3696 | 3697 | [[package]] 3698 | name = "web-sys" 3699 | version = "0.3.70" 3700 | source = "registry+https://github.com/rust-lang/crates.io-index" 3701 | checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" 3702 | dependencies = [ 3703 | "js-sys", 3704 | "wasm-bindgen", 3705 | ] 3706 | 3707 | [[package]] 3708 | name = "webpki-roots" 3709 | version = "0.26.3" 3710 | source = "registry+https://github.com/rust-lang/crates.io-index" 3711 | checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" 3712 | dependencies = [ 3713 | "rustls-pki-types", 3714 | ] 3715 | 3716 | [[package]] 3717 | name = "widestring" 3718 | version = "1.1.0" 3719 | source = "registry+https://github.com/rust-lang/crates.io-index" 3720 | checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" 3721 | 3722 | [[package]] 3723 | name = "windows-core" 3724 | version = "0.52.0" 3725 | source = "registry+https://github.com/rust-lang/crates.io-index" 3726 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 3727 | dependencies = [ 3728 | "windows-targets", 3729 | ] 3730 | 3731 | [[package]] 3732 | name = "windows-registry" 3733 | version = "0.2.0" 3734 | source = "registry+https://github.com/rust-lang/crates.io-index" 3735 | checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" 3736 | dependencies = [ 3737 | "windows-result", 3738 | "windows-strings", 3739 | "windows-targets", 3740 | ] 3741 | 3742 | [[package]] 3743 | name = "windows-result" 3744 | version = "0.2.0" 3745 | source = "registry+https://github.com/rust-lang/crates.io-index" 3746 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 3747 | dependencies = [ 3748 | "windows-targets", 3749 | ] 3750 | 3751 | [[package]] 3752 | name = "windows-strings" 3753 | version = "0.1.0" 3754 | source = "registry+https://github.com/rust-lang/crates.io-index" 3755 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 3756 | dependencies = [ 3757 | "windows-result", 3758 | "windows-targets", 3759 | ] 3760 | 3761 | [[package]] 3762 | name = "windows-sys" 3763 | version = "0.52.0" 3764 | source = "registry+https://github.com/rust-lang/crates.io-index" 3765 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3766 | dependencies = [ 3767 | "windows-targets", 3768 | ] 3769 | 3770 | [[package]] 3771 | name = "windows-sys" 3772 | version = "0.59.0" 3773 | source = "registry+https://github.com/rust-lang/crates.io-index" 3774 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3775 | dependencies = [ 3776 | "windows-targets", 3777 | ] 3778 | 3779 | [[package]] 3780 | name = "windows-targets" 3781 | version = "0.52.6" 3782 | source = "registry+https://github.com/rust-lang/crates.io-index" 3783 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3784 | dependencies = [ 3785 | "windows_aarch64_gnullvm", 3786 | "windows_aarch64_msvc", 3787 | "windows_i686_gnu", 3788 | "windows_i686_gnullvm", 3789 | "windows_i686_msvc", 3790 | "windows_x86_64_gnu", 3791 | "windows_x86_64_gnullvm", 3792 | "windows_x86_64_msvc", 3793 | ] 3794 | 3795 | [[package]] 3796 | name = "windows_aarch64_gnullvm" 3797 | version = "0.52.6" 3798 | source = "registry+https://github.com/rust-lang/crates.io-index" 3799 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3800 | 3801 | [[package]] 3802 | name = "windows_aarch64_msvc" 3803 | version = "0.52.6" 3804 | source = "registry+https://github.com/rust-lang/crates.io-index" 3805 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3806 | 3807 | [[package]] 3808 | name = "windows_i686_gnu" 3809 | version = "0.52.6" 3810 | source = "registry+https://github.com/rust-lang/crates.io-index" 3811 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3812 | 3813 | [[package]] 3814 | name = "windows_i686_gnullvm" 3815 | version = "0.52.6" 3816 | source = "registry+https://github.com/rust-lang/crates.io-index" 3817 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3818 | 3819 | [[package]] 3820 | name = "windows_i686_msvc" 3821 | version = "0.52.6" 3822 | source = "registry+https://github.com/rust-lang/crates.io-index" 3823 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3824 | 3825 | [[package]] 3826 | name = "windows_x86_64_gnu" 3827 | version = "0.52.6" 3828 | source = "registry+https://github.com/rust-lang/crates.io-index" 3829 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3830 | 3831 | [[package]] 3832 | name = "windows_x86_64_gnullvm" 3833 | version = "0.52.6" 3834 | source = "registry+https://github.com/rust-lang/crates.io-index" 3835 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3836 | 3837 | [[package]] 3838 | name = "windows_x86_64_msvc" 3839 | version = "0.52.6" 3840 | source = "registry+https://github.com/rust-lang/crates.io-index" 3841 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3842 | 3843 | [[package]] 3844 | name = "winnow" 3845 | version = "0.6.18" 3846 | source = "registry+https://github.com/rust-lang/crates.io-index" 3847 | checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" 3848 | dependencies = [ 3849 | "memchr", 3850 | ] 3851 | 3852 | [[package]] 3853 | name = "ws_stream_wasm" 3854 | version = "0.7.4" 3855 | source = "registry+https://github.com/rust-lang/crates.io-index" 3856 | checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" 3857 | dependencies = [ 3858 | "async_io_stream", 3859 | "futures", 3860 | "js-sys", 3861 | "log", 3862 | "pharos", 3863 | "rustc_version 0.4.1", 3864 | "send_wrapper", 3865 | "thiserror", 3866 | "wasm-bindgen", 3867 | "wasm-bindgen-futures", 3868 | "web-sys", 3869 | ] 3870 | 3871 | [[package]] 3872 | name = "wyz" 3873 | version = "0.5.1" 3874 | source = "registry+https://github.com/rust-lang/crates.io-index" 3875 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" 3876 | dependencies = [ 3877 | "tap", 3878 | ] 3879 | 3880 | [[package]] 3881 | name = "zerocopy" 3882 | version = "0.7.35" 3883 | source = "registry+https://github.com/rust-lang/crates.io-index" 3884 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 3885 | dependencies = [ 3886 | "byteorder", 3887 | "zerocopy-derive", 3888 | ] 3889 | 3890 | [[package]] 3891 | name = "zerocopy-derive" 3892 | version = "0.7.35" 3893 | source = "registry+https://github.com/rust-lang/crates.io-index" 3894 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 3895 | dependencies = [ 3896 | "proc-macro2", 3897 | "quote", 3898 | "syn 2.0.76", 3899 | ] 3900 | 3901 | [[package]] 3902 | name = "zeroize" 3903 | version = "1.8.1" 3904 | source = "registry+https://github.com/rust-lang/crates.io-index" 3905 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 3906 | dependencies = [ 3907 | "zeroize_derive", 3908 | ] 3909 | 3910 | [[package]] 3911 | name = "zeroize_derive" 3912 | version = "1.4.2" 3913 | source = "registry+https://github.com/rust-lang/crates.io-index" 3914 | checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" 3915 | dependencies = [ 3916 | "proc-macro2", 3917 | "quote", 3918 | "syn 2.0.76", 3919 | ] 3920 | --------------------------------------------------------------------------------