From f7d6386d828f1b1ac1bf1778484499ffea022a0f Mon Sep 17 00:00:00 2001 From: Kasper Ziemianek Date: Wed, 30 Oct 2024 13:41:07 +0100 Subject: [PATCH 1/2] adjust ethereum rpc node integration --- tee-worker/omni-executor/Cargo.lock | 1 + tee-worker/omni-executor/Dockerfile | 6 + .../ethereum/intent-executor/Cargo.toml | 3 + .../ethereum/intent-executor/src/lib.rs | 86 ++++++++- .../artifacts/rococo-omni-account.scale | Bin 23684 -> 24005 bytes .../parentchain/listener/src/event_handler.rs | 180 +++++++++--------- 6 files changed, 180 insertions(+), 96 deletions(-) diff --git a/tee-worker/omni-executor/Cargo.lock b/tee-worker/omni-executor/Cargo.lock index d2368f28f5..63b09a07f6 100644 --- a/tee-worker/omni-executor/Cargo.lock +++ b/tee-worker/omni-executor/Cargo.lock @@ -2396,6 +2396,7 @@ dependencies = [ "async-trait", "executor-core", "log", + "tokio", ] [[package]] diff --git a/tee-worker/omni-executor/Dockerfile b/tee-worker/omni-executor/Dockerfile index 63dc7198ce..4f98c37bdc 100644 --- a/tee-worker/omni-executor/Dockerfile +++ b/tee-worker/omni-executor/Dockerfile @@ -5,4 +5,10 @@ RUN cargo build --release FROM ubuntu:22.04 COPY --from=builder /usr/src/omni-executor/target/release/executor-worker /usr/local/bin/executor-worker + +RUN \ + apt-get update && \ + apt-get install -y ca-certificates && \ + apt-get clean + CMD ["executor-worker"] \ No newline at end of file diff --git a/tee-worker/omni-executor/ethereum/intent-executor/Cargo.toml b/tee-worker/omni-executor/ethereum/intent-executor/Cargo.toml index 3bb21d68ea..026b255e24 100644 --- a/tee-worker/omni-executor/ethereum/intent-executor/Cargo.toml +++ b/tee-worker/omni-executor/ethereum/intent-executor/Cargo.toml @@ -10,5 +10,8 @@ async-trait = { workspace = true } executor-core = { path = "../../executor-core" } log = { workspace = true } +[dev-dependencies] +tokio = { workspace = true} + [lints] workspace = true diff --git a/tee-worker/omni-executor/ethereum/intent-executor/src/lib.rs b/tee-worker/omni-executor/ethereum/intent-executor/src/lib.rs index e8b9efc162..5aef97909f 100644 --- a/tee-worker/omni-executor/ethereum/intent-executor/src/lib.rs +++ b/tee-worker/omni-executor/ethereum/intent-executor/src/lib.rs @@ -16,7 +16,7 @@ use std::str::FromStr; -use alloy::network::EthereumWallet; +use alloy::network::{EthereumWallet, TransactionBuilder}; use alloy::primitives::{Address, U256}; use alloy::providers::{Provider, ProviderBuilder, WalletProvider}; use alloy::rpc::types::{TransactionInput, TransactionRequest}; @@ -43,7 +43,7 @@ impl IntentExecutor for EthereumIntentExecutor { info!("Executin intent: {:?}", intent); // todo: this should be retrieved from key_store let signer = PrivateKeySigner::from_str( - "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d", + "0x59c6995e998f97a5a0044964f0945389dc9e86dae86c7a8412f4603b6b78690d", ) .unwrap(); let wallet = EthereumWallet::from(signer); @@ -51,14 +51,20 @@ impl IntentExecutor for EthereumIntentExecutor { .with_recommended_fillers() .wallet(wallet) .on_http(self.rpc_url.parse().map_err(|e| error!("Could not parse rpc url: {:?}", e))?); - let account = - provider.get_account(provider.signer_addresses().next().unwrap()).await.unwrap(); + let nonce = provider + .get_transaction_count(provider.signer_addresses().next().unwrap()) + .await + .unwrap(); + let gas_price = provider.get_gas_price().await.unwrap(); + match intent { Intent::TransferEthereum(to, value) => { - let tx = TransactionRequest::default() + let mut tx = TransactionRequest::default() .to(Address::from(to)) - .nonce(account.nonce) + .nonce(nonce) .value(U256::from_be_bytes(value)); + + tx.set_gas_price(gas_price); let pending_tx = provider.send_transaction(tx).await.map_err(|e| { error!("Could not send transaction: {:?}", e); })?; @@ -68,10 +74,12 @@ impl IntentExecutor for EthereumIntentExecutor { })?; }, Intent::CallEthereum(address, input) => { - let tx = TransactionRequest::default() + let mut tx = TransactionRequest::default() .to(Address::from(address)) - .nonce(account.nonce) + .nonce(nonce) .input(TransactionInput::from(input)); + + tx.set_gas_price(gas_price); let pending_tx = provider.send_transaction(tx).await.map_err(|e| { error!("Could not send transaction: {:?}", e); })?; @@ -84,3 +92,65 @@ impl IntentExecutor for EthereumIntentExecutor { Ok(()) } } + +#[cfg(test)] +pub mod test { + use alloy::hex; + use alloy::hex::FromHex; + use alloy::network::{EthereumWallet, NetworkWallet, TransactionBuilder}; + use alloy::primitives::Address; + use alloy::providers::{Provider, ProviderBuilder, WalletProvider}; + use alloy::rpc::types::{TransactionInput, TransactionRequest}; + use alloy::signers::local::PrivateKeySigner; + use log::error; + use std::str::FromStr; + + // #[tokio::test] + pub async fn test() { + // place url here: + let url = ""; + + let signer = PrivateKeySigner::from_str( + "0x59c6995e998f97a5a0044964f0945389dc9e86dae86c7a8412f4603b6b78690d", + ) + .unwrap(); + let wallet = EthereumWallet::from(signer); + + let provider = ProviderBuilder::new() + .with_recommended_fillers() + .wallet(wallet) + .on_http(url.parse().map_err(|e| error!("Could not parse rpc url: {:?}", e)).unwrap()); + let nonce = provider + .get_transaction_count(provider.signer_addresses().next().unwrap()) + .await + .unwrap(); + let gas_price = provider.get_gas_price().await.unwrap(); + + let mut tx = TransactionRequest::default() + .to(Address::from_hex("0x1f754692f0b0578d6af97faed6319542c9ffd468").unwrap()) + .nonce(nonce) + .input(TransactionInput::from(hex::decode("0x2166e8280000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001e4c6974656e747279204f6d6e694163636f756e7420657865637574696f6e0000").unwrap())); + + tx.set_gas_price(gas_price); + + let pending_tx = provider + .send_transaction(tx) + .await + .map_err(|e| { + std::println!("Could not send transaction: {:?}", e); + }) + .map_err(|e| { + std::println!("Could not get transaction receipt: {:?}", e); + () + }) + .unwrap(); + + pending_tx + .get_receipt() + .await + .map_err(|e| { + error!("Could not get transaction receipt: {:?}", e); + }) + .unwrap(); + } +} diff --git a/tee-worker/omni-executor/parentchain/artifacts/rococo-omni-account.scale b/tee-worker/omni-executor/parentchain/artifacts/rococo-omni-account.scale index 2c9a40ede9e70fec0581665a2586478eafec6683..765cf2e865ca63be3665eb96458a3471eb6ca109 100644 GIT binary patch delta 5048 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 diff --git a/tee-worker/omni-executor/parentchain/listener/src/event_handler.rs b/tee-worker/omni-executor/parentchain/listener/src/event_handler.rs index e1f443752b..be83962df8 100644 --- a/tee-worker/omni-executor/parentchain/listener/src/event_handler.rs +++ b/tee-worker/omni-executor/parentchain/listener/src/event_handler.rs @@ -154,106 +154,110 @@ impl< Error::NonRecoverableError })?; - let intent = match decoded.intent { + let maybe_intent = match decoded.intent { crate::litentry_rococo::runtime_types::core_primitives::intent::Intent::CallEthereum(call_ethereum) => { - Intent::CallEthereum(call_ethereum.address.to_fixed_bytes(), call_ethereum.input.0) + Some(Intent::CallEthereum(call_ethereum.address.to_fixed_bytes(), call_ethereum.input.0)) }, crate::litentry_rococo::runtime_types::core_primitives::intent::Intent::TransferEthereum(transfer) => { - Intent::TransferEthereum(transfer.to.to_fixed_bytes(), transfer.value) - } + Some(Intent::TransferEthereum(transfer.to.to_fixed_bytes(), transfer.value)) + }, + crate::litentry_rococo::runtime_types::core_primitives::intent::Intent::SystemRemark(_) => None, + crate::litentry_rococo::runtime_types::core_primitives::intent::Intent::TransferNative(_) => None, }; - //to explicitly handle all intent variants - match intent { - Intent::CallEthereum(_, _) => { - self.ethereum_intent_executor.execute(intent).await.map_err(|_| { - // assume for now we can easily recover - log::error!("Error executing intent"); - Error::RecoverableError - })?; - }, - Intent::TransferEthereum(_, _) => { - self.ethereum_intent_executor.execute(intent).await.map_err(|_| { - // assume for now we can easily recover - log::error!("Error executing intent"); - Error::RecoverableError - })?; - }, - } + if let Some(intent) = maybe_intent { + // to explicitly handle all intent variants + match intent { + Intent::CallEthereum(_, _) => { + self.ethereum_intent_executor.execute(intent).await.map_err(|_| { + // assume for now we can easily recover + log::error!("Error executing intent"); + Error::RecoverableError + })?; + }, + Intent::TransferEthereum(_, _) => { + self.ethereum_intent_executor.execute(intent).await.map_err(|_| { + // assume for now we can easily recover + log::error!("Error executing intent"); + Error::RecoverableError + })?; + }, + } - log::debug!("Intent executed, publishing result"); + log::debug!("Intent executed, publishing result"); - // todo: the whole signing part should be encapsulated in separate component like `TransactionSigner` - //we need to report back to parachain intent result - let decoded = - crate::litentry_rococo::omni_account::events::IntentRequested::decode_as_fields( - &mut event.field_bytes.as_slice(), - &mut fields, - metadata.types(), - ) - .map_err(|_| { - log::error!("Could not decode event {:?}", event.id); - Error::NonRecoverableError - })?; + // todo: the whole signing part should be encapsulated in separate component like `TransactionSigner` + //we need to report back to parachain intent result + let decoded = + crate::litentry_rococo::omni_account::events::IntentRequested::decode_as_fields( + &mut event.field_bytes.as_slice(), + &mut fields, + metadata.types(), + ) + .map_err(|_| { + log::error!("Could not decode event {:?}", event.id); + Error::NonRecoverableError + })?; - let execution_result = - crate::litentry_rococo::omni_account::calls::types::intent_executed::Result::Success; + let execution_result = + crate::litentry_rococo::omni_account::calls::types::intent_executed::Result::Success; - let call = crate::litentry_rococo::tx().omni_account().intent_executed( - decoded.who, - decoded.intent, - execution_result, - ); + let call = crate::litentry_rococo::tx().omni_account().intent_executed( + decoded.who, + decoded.intent, + execution_result, + ); - let secret_key_bytes = self - .key_store - .read() - .map_err(|e| { - error!("Could not unseal key: {:?}", e); - }) - .unwrap(); - let signer = subxt_signer::sr25519::Keypair::from_secret_key(secret_key_bytes) - .map_err(|e| { - error!("Could not create secret key: {:?}", e); - }) - .unwrap(); + let secret_key_bytes = self + .key_store + .read() + .map_err(|e| { + error!("Could not unseal key: {:?}", e); + }) + .unwrap(); + let signer = subxt_signer::sr25519::Keypair::from_secret_key(secret_key_bytes) + .map_err(|e| { + error!("Could not create secret key: {:?}", e); + }) + .unwrap(); - let mut client = self.rpc_client_factory.new_client().await.map_err(|e| { - error!("Could not create RPC client: {:?}", e); - RecoverableError - })?; - let runtime_version = client.runtime_version().await.map_err(|e| { - error!("Could not get runtime version: {:?}", e); - RecoverableError - })?; - let genesis_hash = client.get_genesis_hash().await.map_err(|e| { - error!("Could not get genesis hash: {:?}", e); - RecoverableError - })?; - let nonce = *self.nonce.read().map_err(|e| { - error!("Could not read nonce: {:?}", e); - RecoverableError - })?; - let params = DefaultExtrinsicParamsBuilder::::new().nonce(nonce).build(); - *self.nonce.write().map_err(|e| { - error!("Could not write nonce: {:?}", e); - RecoverableError - })? = nonce + 1; + let mut client = self.rpc_client_factory.new_client().await.map_err(|e| { + error!("Could not create RPC client: {:?}", e); + RecoverableError + })?; + let runtime_version = client.runtime_version().await.map_err(|e| { + error!("Could not get runtime version: {:?}", e); + RecoverableError + })?; + let genesis_hash = client.get_genesis_hash().await.map_err(|e| { + error!("Could not get genesis hash: {:?}", e); + RecoverableError + })?; + let nonce = *self.nonce.read().map_err(|e| { + error!("Could not read nonce: {:?}", e); + RecoverableError + })?; + let params = DefaultExtrinsicParamsBuilder::::new().nonce(nonce).build(); + *self.nonce.write().map_err(|e| { + error!("Could not write nonce: {:?}", e); + RecoverableError + })? = nonce + 1; - let state = tx::ClientState:: { - metadata: { metadata }, - genesis_hash: ChainConfig::Hash::decode(&mut genesis_hash.as_slice()).unwrap(), - runtime_version: tx::RuntimeVersion { - spec_version: runtime_version.spec_version, - transaction_version: runtime_version.transaction_version, - }, - }; - let signed_call = tx::create_signed(&call, &state, &signer, params).unwrap(); - client.submit_tx(signed_call.encoded()).await.map_err(|e| { - error!("Error while submitting tx: {:?}", e); - RecoverableError - })?; - log::debug!("Result published"); + let state = tx::ClientState:: { + metadata: { metadata }, + genesis_hash: ChainConfig::Hash::decode(&mut genesis_hash.as_slice()).unwrap(), + runtime_version: tx::RuntimeVersion { + spec_version: runtime_version.spec_version, + transaction_version: runtime_version.transaction_version, + }, + }; + let signed_call = tx::create_signed(&call, &state, &signer, params).unwrap(); + client.submit_tx(signed_call.encoded()).await.map_err(|e| { + error!("Error while submitting tx: {:?}", e); + RecoverableError + })?; + log::debug!("Result published"); + } Ok(()) } } From 7b9c884355b99e3d88f1c1f9079b5af8c6206231 Mon Sep 17 00:00:00 2001 From: Kasper Ziemianek Date: Wed, 30 Oct 2024 14:58:31 +0100 Subject: [PATCH 2/2] taplo fmt --- tee-worker/omni-executor/ethereum/intent-executor/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tee-worker/omni-executor/ethereum/intent-executor/Cargo.toml b/tee-worker/omni-executor/ethereum/intent-executor/Cargo.toml index 026b255e24..2eae9fd2a2 100644 --- a/tee-worker/omni-executor/ethereum/intent-executor/Cargo.toml +++ b/tee-worker/omni-executor/ethereum/intent-executor/Cargo.toml @@ -11,7 +11,7 @@ executor-core = { path = "../../executor-core" } log = { workspace = true } [dev-dependencies] -tokio = { workspace = true} +tokio = { workspace = true } [lints] workspace = true