|
|
@@ -1,3 +1,12 @@
|
|
|
+
|
|
|
+mod register_provider;
|
|
|
+mod request_randomness;
|
|
|
+mod get_request;
|
|
|
+
|
|
|
+pub use register_provider::register_provider;
|
|
|
+pub use request_randomness::request_randomness;
|
|
|
+pub use get_request::get_request;
|
|
|
+
|
|
|
use ethers::contract::abigen;
|
|
|
use ethers::core::types::Address;
|
|
|
use ethers::middleware::SignerMiddleware;
|
|
|
@@ -8,29 +17,22 @@ use ethers::signers::LocalWallet;
|
|
|
use ethers::signers::Signer;
|
|
|
use std::error::Error;
|
|
|
use std::sync::Arc;
|
|
|
-
|
|
|
-mod register_provider;
|
|
|
-mod request_randomness;
|
|
|
-mod get_request;
|
|
|
-
|
|
|
-pub use register_provider::register_provider;
|
|
|
-pub use request_randomness::request_randomness;
|
|
|
-pub use get_request::get_request;
|
|
|
+use crate::config::EthereumOptions;
|
|
|
+use anyhow::anyhow;
|
|
|
|
|
|
// TODO: Programatically generate this so we don't have to keep committed ABI in sync with the
|
|
|
// contract in the same repo.
|
|
|
abigen!(PythRandom, "src/abi.json");
|
|
|
|
|
|
-const PROVIDER: &str = "https://goerli.optimism.io";
|
|
|
pub type PythProvider = PythRandom<SignerMiddleware<Provider<Http>, LocalWallet>>;
|
|
|
|
|
|
-async fn provider(key: &str, contract_addr: &str) -> Result<PythProvider, Box<dyn Error>> {
|
|
|
- let provider = Provider::<Http>::try_from(PROVIDER)?;
|
|
|
+pub async fn provider(opts: &EthereumOptions) -> Result<PythProvider, Box<dyn Error>> {
|
|
|
+ let provider = Provider::<Http>::try_from(&opts.geth_rpc_addr)?;
|
|
|
let chain_id = provider.get_chainid().await?;
|
|
|
- let wallet__ = key.parse::<LocalWallet>()?.with_chain_id(chain_id.as_u64());
|
|
|
+ let wallet__ = opts.private_key.clone().ok_or(anyhow!("No private key specified"))?.parse::<LocalWallet>()?.with_chain_id(chain_id.as_u64());
|
|
|
|
|
|
Ok(PythRandom::new(
|
|
|
- contract_addr.parse::<Address>()?,
|
|
|
+ opts.contract_addr.parse::<Address>()?,
|
|
|
Arc::new(SignerMiddleware::new(provider, wallet__)),
|
|
|
))
|
|
|
-}
|
|
|
+}
|