|
| 1 | +#[cfg(feature = "base")] |
| 2 | +use crate::cmd::resolve_network; |
1 | 3 | use crate::{ |
2 | 4 | Cast, SimpleCast, |
3 | | - cmd::{erc20::IERC20, resolve_network}, |
| 5 | + cmd::erc20::IERC20, |
4 | 6 | opts::{Cast as CastArgs, CastSubcommand, ToBaseArgs}, |
5 | 7 | traces::identifier::SignaturesIdentifier, |
6 | 8 | tx::CastTxSender, |
@@ -421,45 +423,43 @@ pub async fn run_command(args: CastArgs) -> Result<()> { |
421 | 423 | // Can use either --raw or specify raw as a field |
422 | 424 | let is_raw_block = raw || fields.contains(&"raw".into()); |
423 | 425 | let output = if is_raw_block { |
| 426 | + // Base encodes EIP-8130 transactions, so the raw block is only faithful with a |
| 427 | + // Base-typed provider. Base is the only family inferred here; every other one |
| 428 | + // still comes from `--network` alone. |
| 429 | + #[cfg(feature = "base")] |
424 | 430 | let network = match network { |
425 | | - Some(network) => network, |
426 | | - None => resolve_network(&config).await?, |
| 431 | + Some(network) => Some(network), |
| 432 | + None => { |
| 433 | + resolve_network(&config).await?.is_base().then_some(NetworkVariant::Base) |
| 434 | + } |
427 | 435 | }; |
428 | 436 | match network { |
429 | 437 | #[cfg(feature = "base")] |
430 | | - NetworkVariant::Base => { |
| 438 | + Some(NetworkVariant::Base) => { |
431 | 439 | let provider = |
432 | 440 | ProviderBuilder::<BaseNetwork>::from_config(&config)?.build()?; |
433 | 441 | Cast::new(&provider) |
434 | 442 | .block_raw(block.unwrap_or(BlockId::Number(Latest)), full) |
435 | 443 | .await? |
436 | 444 | } |
437 | 445 | #[cfg(feature = "optimism")] |
438 | | - NetworkVariant::Optimism => { |
| 446 | + Some(NetworkVariant::Optimism) => { |
439 | 447 | let provider = |
440 | 448 | ProviderBuilder::<Optimism>::from_config(&config)?.build()?; |
441 | 449 |
|
442 | 450 | Cast::new(&provider) |
443 | 451 | .block_raw(block.unwrap_or(BlockId::Number(Latest)), full) |
444 | 452 | .await? |
445 | 453 | } |
446 | | - NetworkVariant::Tempo => { |
| 454 | + Some(NetworkVariant::Tempo) => { |
447 | 455 | let provider = |
448 | 456 | ProviderBuilder::<TempoNetwork>::from_config(&config)?.build()?; |
449 | 457 | Cast::new(&provider) |
450 | 458 | .block_raw(block.unwrap_or(BlockId::Number(Latest)), full) |
451 | 459 | .await? |
452 | 460 | } |
453 | | - NetworkVariant::Ethereum => { |
454 | | - let provider = |
455 | | - ProviderBuilder::<Ethereum>::from_config(&config)?.build()?; |
456 | | - Cast::new(&provider) |
457 | | - .block_raw(block.unwrap_or(BlockId::Number(Latest)), full) |
458 | | - .await? |
459 | | - } |
460 | | - // Monad blocks are Ethereum-shaped, so they use the Ethereum-typed provider. |
461 | | - #[cfg(feature = "monad")] |
462 | | - NetworkVariant::Monad => { |
| 461 | + // Ethereum (default) or no --raw flag |
| 462 | + _ => { |
463 | 463 | let provider = |
464 | 464 | ProviderBuilder::<Ethereum>::from_config(&config)?.build()?; |
465 | 465 | Cast::new(&provider) |
@@ -749,42 +749,39 @@ pub async fn run_command(args: CastArgs) -> Result<()> { |
749 | 749 | let config = rpc.load_config()?; |
750 | 750 | // Can use either --raw or specify raw as a field |
751 | 751 | let is_raw = raw || field.as_ref().is_some_and(|f| f == "raw"); |
| 752 | + // Base encodes EIP-8130 transactions, so the response is only faithful with a |
| 753 | + // Base-typed provider. Base is the only family inferred here; every other one still |
| 754 | + // comes from `--network` alone. |
| 755 | + #[cfg(feature = "base")] |
752 | 756 | let network = match network { |
753 | | - Some(network) => network, |
754 | | - None => resolve_network(&config).await?, |
| 757 | + Some(network) => Some(network), |
| 758 | + None => resolve_network(&config).await?.is_base().then_some(NetworkVariant::Base), |
755 | 759 | }; |
756 | 760 | let output = match network { |
757 | 761 | #[cfg(feature = "base")] |
758 | | - NetworkVariant::Base => { |
| 762 | + Some(NetworkVariant::Base) => { |
759 | 763 | let provider = ProviderBuilder::<BaseNetwork>::from_config(&config)?.build()?; |
760 | 764 | Cast::new(&provider) |
761 | 765 | .transaction(tx_hash, from, nonce, field, is_raw, to_request, lane) |
762 | 766 | .await? |
763 | 767 | } |
764 | 768 | #[cfg(feature = "optimism")] |
765 | | - NetworkVariant::Optimism => { |
| 769 | + Some(NetworkVariant::Optimism) => { |
766 | 770 | let provider = ProviderBuilder::<Optimism>::from_config(&config)?.build()?; |
767 | 771 |
|
768 | 772 | Cast::new(&provider) |
769 | 773 | .transaction(tx_hash, from, nonce, field, is_raw, to_request, lane) |
770 | 774 | .await? |
771 | 775 | } |
772 | | - NetworkVariant::Tempo => { |
| 776 | + Some(NetworkVariant::Tempo) => { |
773 | 777 | let provider = |
774 | 778 | ProviderBuilder::<TempoNetwork>::from_config(&config)?.build()?; |
775 | 779 | Cast::new(&provider) |
776 | 780 | .transaction(tx_hash, from, nonce, field, is_raw, to_request, lane) |
777 | 781 | .await? |
778 | 782 | } |
779 | | - NetworkVariant::Ethereum => { |
780 | | - let provider = utils::get_provider(&config)?; |
781 | | - Cast::new(&provider) |
782 | | - .transaction(tx_hash, from, nonce, field, is_raw, to_request, lane) |
783 | | - .await? |
784 | | - } |
785 | | - // Monad transactions are Ethereum-shaped, so they use the default provider. |
786 | | - #[cfg(feature = "monad")] |
787 | | - NetworkVariant::Monad => { |
| 783 | + // Ethereum (default) or no --raw flag |
| 784 | + _ => { |
788 | 785 | let provider = utils::get_provider(&config)?; |
789 | 786 | Cast::new(&provider) |
790 | 787 | .transaction(tx_hash, from, nonce, field, is_raw, to_request, lane) |
|
0 commit comments