alloy icon indicating copy to clipboard operation
alloy copied to clipboard

[Bug] only replay-protected (EIP-155) transactions allowed over RPC

Open NicolasWent opened this issue 10 months ago • 1 comments

Component

network, json-rpc, provider, pubsub

What version of Alloy are you on?

rev = "8cb0307"

Operating System

Linux

Describe the bug

Hello,

I have tried to run the deploy_from_contract.rs example, but instead of using Anvil, I have tried to deploy it on ethereum sepolia testnet

Code to reproduce
use std::env;

use alloy_primitives::U256;
use alloy_provider::{network::EthereumSigner, Provider, ProviderBuilder};
use alloy_signer_wallet::LocalWallet;
use alloy_sol_types::sol;
use dotenv::dotenv;
use eyre::Result;

sol! {
    #[allow(missing_docs)]
    // solc v0.8.24; solc a.sol --via-ir --optimize --bin
    #[sol(rpc, bytecode="608080604052346100155760d2908161001a8239f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c9081633fb5c1cb1460865781638381f58a14606f575063d09de08a146039575f80fd5b34606b575f366003190112606b575f545f1981146057576001015f55005b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b34606b575f366003190112606b576020905f548152f35b34606b576020366003190112606b576004355f5500fea2646970667358221220bdecd3c1dd631eb40587cafcd6e8297479db76db6a328e18ad1ea5b340852e3864736f6c63430008180033")]
    contract Counter {
        uint256 public number;

        function setNumber(uint256 newNumber) public {
            number = newNumber;
        }

        function increment() public {
            number++;
        }
    }
}

#[tokio::main]
async fn main() -> Result<()> {
    dotenv().ok();
    let signer: LocalWallet = env::var("WALLET")
        .expect("Missing 'WALLET' environment variable")
        .parse()?;
    let rpc_url = env::var("HTTP_RPC")
        .expect("Missing HTTP_RPC environment variable")
        .parse()?;
    let provider = ProviderBuilder::new()
        .signer(EthereumSigner::from(signer.clone()))
        .on_http(rpc_url)?;

    let base_fee = provider.get_gas_price().await?;

    let contract_builder = Counter::deploy_builder(&provider);
    let estimate = contract_builder.estimate_gas().await?;
    // Crashes here with error: Error: server returned an error response: error code -32000: only replay-protected (EIP-155) transactions allowed over RPC
    let contract_address = contract_builder
        .gas(estimate)
        .gas_price(base_fee)
        .nonce(
            provider
                .get_transaction_count(signer.address(), None)
                .await?,
        )
        .deploy()
        .await?;

       // other interactions from the example but the code crashes above
Cargo.toml

[package]
name = "send-trx-minimal"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
dotenv = "0.6"
eyre = "0.6"
tokio = { version = "1.37", features = ["full"] }

alloy-primitives = "0.7.0"
alloy-sol-types = { version = "0.7.0", features = ["json"] }

alloy-provider = { git = "https://github.com/alloy-rs/alloy.git", rev = "8cb0307" }
alloy-transport-http = { git = "https://github.com/alloy-rs/alloy.git", rev = "8cb0307" }
alloy-contract = { git = "https://github.com/alloy-rs/alloy.git", rev = "8cb0307" }
alloy-signer-wallet = { git = "https://github.com/alloy-rs/alloy.git", rev = "8cb0307" }

According to this post we need to specify the chain-id field, but I can't specify the chain-id in the CallBuilder

NicolasWent avatar Apr 13 '24 10:04 NicolasWent