[fortuna] Add legacy transaction support (#1126)
* gr * support legacy transactions * doc
This commit is contained in:
parent
fe7984d132
commit
f0a077a2cf
|
@ -8,3 +8,4 @@ chains:
|
|||
eos-evm-testnet:
|
||||
geth_rpc_addr: https://api.testnet.evm.eosnetwork.com/
|
||||
contract_addr: 0xD42c7a708E74AD19401D907a14146F006c851Ee3
|
||||
legacy_tx: true
|
||||
|
|
|
@ -115,4 +115,8 @@ pub struct EthereumConfig {
|
|||
|
||||
/// Address of a Pyth Randomness contract to interact with.
|
||||
pub contract_addr: Address,
|
||||
|
||||
/// Use the legacy transaction format (for networks without EIP 1559)
|
||||
#[serde(default)]
|
||||
pub legacy_tx: bool,
|
||||
}
|
||||
|
|
|
@ -11,7 +11,15 @@ use {
|
|||
EthLogDecode,
|
||||
},
|
||||
core::types::Address,
|
||||
middleware::SignerMiddleware,
|
||||
middleware::{
|
||||
transformer::{
|
||||
Transformer,
|
||||
TransformerError,
|
||||
TransformerMiddleware,
|
||||
},
|
||||
SignerMiddleware,
|
||||
},
|
||||
prelude::TransactionRequest,
|
||||
providers::{
|
||||
Http,
|
||||
Middleware,
|
||||
|
@ -21,6 +29,7 @@ use {
|
|||
LocalWallet,
|
||||
Signer,
|
||||
},
|
||||
types::transaction::eip2718::TypedTransaction,
|
||||
},
|
||||
sha3::{
|
||||
Digest,
|
||||
|
@ -33,9 +42,29 @@ use {
|
|||
// contract in the same repo.
|
||||
abigen!(PythRandom, "src/abi.json");
|
||||
|
||||
pub type SignablePythContract = PythRandom<SignerMiddleware<Provider<Http>, LocalWallet>>;
|
||||
pub type SignablePythContract = PythRandom<
|
||||
TransformerMiddleware<SignerMiddleware<Provider<Http>, LocalWallet>, LegacyTxTransformer>,
|
||||
>;
|
||||
pub type PythContract = PythRandom<Provider<Http>>;
|
||||
|
||||
/// Transformer that converts a transaction into a legacy transaction if use_legacy_tx is true.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct LegacyTxTransformer {
|
||||
use_legacy_tx: bool,
|
||||
}
|
||||
|
||||
impl Transformer for LegacyTxTransformer {
|
||||
fn transform(&self, tx: &mut TypedTransaction) -> Result<(), TransformerError> {
|
||||
if self.use_legacy_tx {
|
||||
let legacy_request: TransactionRequest = (*tx).clone().into();
|
||||
*tx = legacy_request.into();
|
||||
Ok(())
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl SignablePythContract {
|
||||
pub async fn from_config(
|
||||
chain_config: &EthereumConfig,
|
||||
|
@ -44,6 +73,10 @@ impl SignablePythContract {
|
|||
let provider = Provider::<Http>::try_from(&chain_config.geth_rpc_addr)?;
|
||||
let chain_id = provider.get_chainid().await?;
|
||||
|
||||
let transformer = LegacyTxTransformer {
|
||||
use_legacy_tx: chain_config.legacy_tx,
|
||||
};
|
||||
|
||||
let wallet__ = private_key
|
||||
.clone()
|
||||
.parse::<LocalWallet>()?
|
||||
|
@ -51,7 +84,10 @@ impl SignablePythContract {
|
|||
|
||||
Ok(PythRandom::new(
|
||||
chain_config.contract_addr,
|
||||
Arc::new(SignerMiddleware::new(provider, wallet__)),
|
||||
Arc::new(TransformerMiddleware::new(
|
||||
SignerMiddleware::new(provider, wallet__),
|
||||
transformer,
|
||||
)),
|
||||
))
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue